Software /
code /
prosody
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