Changeset

7241:5e7797822f19

tests: Add basic tests for util.xml and util.xmppstream
author Matthew Wild <mwild1@gmail.com>
date Sat, 05 Mar 2016 23:42:01 +0000
parents 7237:472736b583fb
children 7242:d0296db76ccd 7244:8c6943918279
files tests/test.lua tests/test_util_xml.lua tests/test_util_xmppstream.lua
diffstat 3 files changed, 97 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/tests/test.lua	Sat Mar 05 20:48:20 2016 +0000
+++ b/tests/test.lua	Sat Mar 05 23:42:01 2016 +0000
@@ -25,6 +25,8 @@
 	dotest "util.throttle"
 	dotest "util.uuid"
 	dotest "util.random"
+	dotest "util.xml"
+	dotest "util.xmppstream"
 
 	dosingletest("test_sasl.lua", "latin1toutf8");
 	dosingletest("test_utf8.lua", "valid");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_util_xml.lua	Sat Mar 05 23:42:01 2016 +0000
@@ -0,0 +1,12 @@
+function parse(parse)
+	local x =
+[[<x xmlns:a="b">
+	<y xmlns:a="c"> <!-- this overwrites 'a' -->
+	    <a:z/>
+	</y>
+	<a:z/> <!-- prefix 'a' is nil here, but should be 'b' -->
+</x>
+]]
+	local stanza = parse(x);
+	assert_equal(stanza.tags[2].attr.xmlns, "b");
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_util_xmppstream.lua	Sat Mar 05 23:42:01 2016 +0000
@@ -0,0 +1,83 @@
+function new(new_stream, _M)
+	local function test(xml, expect_success, ex)
+		local stanzas = {};
+		local session = { notopen = true };
+		local callbacks = {
+			stream_ns = "streamns";
+			stream_tag = "stream";
+			default_ns = "stanzans";
+			streamopened = function (_session)
+				assert_equal(session, _session);
+				assert_equal(session.notopen, true);
+				_session.notopen = nil;
+				return true;
+			end;
+			handlestanza = function (_session, stanza)
+				assert_equal(session, _session);
+				assert_equal(_session.notopen, nil);
+				table.insert(stanzas, stanza);
+			end;
+			streamclosed = function (_session)
+				assert_equal(session, _session);
+				assert_equal(_session.notopen, nil);
+				_session.notopen = nil;
+			end;
+		}
+		if type(ex) == "table" then
+			for k, v in pairs(ex) do
+				if k ~= "_size_limit" then
+					callbacks[k] = v;
+				end
+			end
+		end
+		local stream = new_stream(session, callbacks, size_limit);
+		local ok, err = pcall(function ()
+			assert(stream:feed(xml));
+		end);
+
+		if ok and type(expect_success) == "function" then
+			expect_success(stanzas);
+		end
+		assert_equal(not not ok, not not expect_success, "Expected "..(expect_success and ("success ("..tostring(err)..")") or "failure"));
+	end
+
+	local function test_stanza(stanza, expect_success, ex)
+		return test([[<stream:stream xmlns:stream="streamns" xmlns="stanzans">]]..stanza, expect_success, ex);
+	end
+
+	test([[<stream:stream xmlns:stream="streamns"/>]], true);
+	test([[<stream xmlns="streamns"/>]], true);
+
+	test([[<stream1 xmlns="streamns"/>]], false);
+	test([[<stream xmlns="streamns1"/>]], false);
+	test("<>", false);
+
+	test_stanza("<message/>", function (stanzas)
+		assert_equal(#stanzas, 1);
+		assert_equal(stanzas[1].name, "message");
+	end);
+	test_stanza("< message>>>>/>\n", false);
+
+	test_stanza([[<x xmlns:a="b">
+		<y xmlns:a="c">
+			<a:z/>
+		</y>
+		<a:z/>
+	</x>]], function (stanzas)
+		assert_equal(#stanzas, 1);
+		local s = stanzas[1];
+		assert_equal(s.name, "x");
+		assert_equal(#s.tags, 2);
+
+		assert_equal(s.tags[1].name, "y");
+		assert_equal(s.tags[1].attr.xmlns, nil);
+
+		assert_equal(s.tags[1].tags[1].name, "z");
+		assert_equal(s.tags[1].tags[1].attr.xmlns, "c");
+
+		assert_equal(s.tags[2].name, "z");
+		assert_equal(s.tags[2].attr.xmlns, "b");
+
+		assert_equal(s.namespaces, nil);
+	end);
+end