Changeset

7254:8aaae816cc7e

tests: Expand util.stanza tests
author Matthew Wild <mwild1@gmail.com>
date Wed, 09 Mar 2016 12:59:43 +0000
parents 7253:f4e71242556a
children 7256:9fbb9fbf7e52 7257:425bc672d60b
files tests/test_util_stanza.lua
diffstat 1 files changed, 115 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/tests/test_util_stanza.lua	Wed Mar 09 12:37:56 2016 +0000
+++ b/tests/test_util_stanza.lua	Wed Mar 09 12:59:43 2016 +0000
@@ -25,3 +25,118 @@
 	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)
+	-- 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");
+
+	-- 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");
+
+	-- 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
+
+function error_reply(error_reply, _M)
+	-- 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);
+	
+	-- 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