diff options
Diffstat (limited to 'tests/test_util_stanza.lua')
-rw-r--r-- | tests/test_util_stanza.lua | 129 |
1 files changed, 127 insertions, 2 deletions
diff --git a/tests/test_util_stanza.lua b/tests/test_util_stanza.lua index fce26f3a..4be07a4b 100644 --- a/tests/test_util_stanza.lua +++ b/tests/test_util_stanza.lua @@ -1,7 +1,7 @@ -- Prosody IM -- Copyright (C) 2008-2010 Matthew Wild -- Copyright (C) 2008-2010 Waqas Hussain --- +-- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- @@ -18,10 +18,135 @@ end function deserialize(deserialize, st) local stanza = st.stanza("message", { a = "a" }); - + local stanza2 = deserialize(st.preserialize(stanza)); assert_is(stanza2 and stanza.name, "deserialize returns a stanza"); assert_table(stanza2.attr, "Deserialized stanza has attributes"); assert_equal(stanza2.attr.a, "a", "Deserialized stanza retains attributes"); assert_table(getmetatable(stanza2), "Deserialized stanza has metatable"); end + +function stanza(stanza) + local s = stanza("foo", { xmlns = "myxmlns", a = "attr-a" }); + assert_equal(s.name, "foo"); + assert_equal(s.attr.xmlns, "myxmlns"); + assert_equal(s.attr.a, "attr-a"); + + local s1 = stanza("s1"); + assert_equal(s1.name, "s1"); + assert_equal(s1.attr.xmlns, nil); + assert_equal(#s1, 0); + assert_equal(#s1.tags, 0); + + s1:tag("child1"); + assert_equal(#s1.tags, 1); + assert_equal(s1.tags[1].name, "child1"); + + s1:tag("grandchild1"):up(); + assert_equal(#s1.tags, 1); + assert_equal(s1.tags[1].name, "child1"); + assert_equal(#s1.tags[1], 1); + assert_equal(s1.tags[1][1].name, "grandchild1"); + + s1:up():tag("child2"); + assert_equal(#s1.tags, 2, tostring(s1)); + assert_equal(s1.tags[1].name, "child1"); + assert_equal(s1.tags[2].name, "child2"); + assert_equal(#s1.tags[1], 1); + assert_equal(s1.tags[1][1].name, "grandchild1"); + + s1:up():text("Hello world"); + assert_equal(#s1.tags, 2); + assert_equal(#s1, 3); + assert_equal(s1.tags[1].name, "child1"); + assert_equal(s1.tags[2].name, "child2"); + assert_equal(#s1.tags[1], 1); + assert_equal(s1.tags[1][1].name, "grandchild1"); +end + +function message(message) + local m = message(); + assert_equal(m.name, "message"); +end + +function iq(iq) + local i = iq(); + assert_equal(i.name, "iq"); +end + +function presence(presence) + local p = presence(); + assert_equal(p.name, "presence"); +end + +function reply(reply, _M) + do + -- Test stanza + local s = _M.stanza("s", { to = "touser", from = "fromuser", id = "123" }) + :tag("child1"); + -- Make reply stanza + local r = reply(s); + assert_equal(r.name, s.name); + assert_equal(r.id, s.id); + assert_equal(r.attr.to, s.attr.from); + assert_equal(r.attr.from, s.attr.to); + assert_equal(#r.tags, 0, "A reply should not include children of the original stanza"); + end + + do + -- Test stanza + local s = _M.stanza("iq", { to = "touser", from = "fromuser", id = "123", type = "get" }) + :tag("child1"); + -- Make reply stanza + local r = reply(s); + assert_equal(r.name, s.name); + assert_equal(r.id, s.id); + assert_equal(r.attr.to, s.attr.from); + assert_equal(r.attr.from, s.attr.to); + assert_equal(r.attr.type, "result"); + assert_equal(#r.tags, 0, "A reply should not include children of the original stanza"); + end + + do + -- Test stanza + local s = _M.stanza("iq", { to = "touser", from = "fromuser", id = "123", type = "set" }) + :tag("child1"); + -- Make reply stanza + local r = reply(s); + assert_equal(r.name, s.name); + assert_equal(r.id, s.id); + assert_equal(r.attr.to, s.attr.from); + assert_equal(r.attr.from, s.attr.to); + assert_equal(r.attr.type, "result"); + assert_equal(#r.tags, 0, "A reply should not include children of the original stanza"); + end +end + +function error_reply(error_reply, _M) + do + -- Test stanza + local s = _M.stanza("s", { to = "touser", from = "fromuser", id = "123" }) + :tag("child1"); + -- Make reply stanza + local r = error_reply(s); + assert_equal(r.name, s.name); + assert_equal(r.id, s.id); + assert_equal(r.attr.to, s.attr.from); + assert_equal(r.attr.from, s.attr.to); + assert_equal(#r.tags, 1); + end + + do + -- Test stanza + local s = _M.stanza("iq", { to = "touser", from = "fromuser", id = "123", type = "get" }) + :tag("child1"); + -- Make reply stanza + local r = error_reply(s); + assert_equal(r.name, s.name); + assert_equal(r.id, s.id); + assert_equal(r.attr.to, s.attr.from); + assert_equal(r.attr.from, s.attr.to); + assert_equal(r.attr.type, "error"); + assert_equal(#r.tags, 1); + end +end |