Thu, 13 Sep 2018 16:05:24 +0100
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
1 | --luacheck: std +busted |
93 | 2 | local stanzacmp = require "scansion.stanzacmp"; |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
3 | require "verse"; |
93 | 4 | local st = require "util.stanza"; |
98
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
5 | local xml = require "scansion.xml"; |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
6 | |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
7 | local function parse(...) |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
8 | local n = select("#", ...); |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
9 | local out = {}; |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
10 | for i = 1, n do |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
11 | local v = (select(i, ...)); |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
12 | if type(v) == "string" then |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
13 | out[i] = xml.parse(v); |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
14 | else |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
15 | out[i] = v; |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
16 | end |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
17 | end |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
18 | return table.unpack(out, 1, n); |
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
19 | end |
93 | 20 | |
21 | local function yes(s1, s2) | |
98
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
22 | s1, s2 = parse(s1, s2); |
93 | 23 | if not stanzacmp.stanzas_match(s1, s2) then |
24 | print("s1", s1) | |
25 | print("s2", s2) | |
26 | print("literal", tostring(s1) == tostring(s2)); | |
27 | assert(false, "No match, but they should."); | |
28 | end | |
29 | end | |
30 | ||
31 | local function no(s1, s2) | |
98
88a3e03f4b9f
spec/stanzacmp: Allow passing XML strings to yes()/no() to avoid manual stanza building
Matthew Wild <mwild1@gmail.com>
parents:
95
diff
changeset
|
32 | s1, s2 = parse(s1, s2); |
93 | 33 | if stanzacmp.stanzas_match(s1, s2) then |
34 | print("s1", s1) | |
35 | print("s2", s2) | |
36 | assert(false, "Match, but they should not."); | |
37 | end | |
38 | end | |
39 | ||
40 | describe("stanzacmp", function () | |
41 | it("should work", function () | |
42 | local s1 = st.message({ to = "foo", from = "bar"}); | |
43 | local s2 = st.message({ to = "foo", from = "bar"}); | |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
44 | |
93 | 45 | yes(s1, s2); |
46 | yes(s2, s1); | |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
47 | |
93 | 48 | s1.attr.to = nil; |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
49 | |
93 | 50 | yes(s1, s2); |
51 | no(s2, s1); | |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
52 | |
93 | 53 | s1.attr.to = "foo"; |
54 | yes(s1, s2); | |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
55 | |
93 | 56 | s2:tag("blah", { xmlns = "foobar" }); |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
57 | |
93 | 58 | yes(s1, s2); |
59 | no(s2, s1); | |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
60 | |
93 | 61 | s1:tag("blah", { xmlns = "foobar" }); |
62 | yes(s1, s2); | |
63 | yes(s2, s1); | |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
64 | |
93 | 65 | s1:tag("a"); |
66 | no(s1, s2); | |
67 | s2:tag("a"); | |
68 | yes(s1, s2); | |
69 | s2:up():up(); | |
70 | s2:tag("extension", { xmlns = "blah" }); | |
71 | yes(s1, s2); | |
72 | s2:tag("b"); | |
73 | yes(s1, s2); | |
74 | s1:up():up(); | |
75 | s1:tag("extension", { xmlns = "blah" }); | |
76 | no(s1, s2); | |
77 | s1:tag("b"); | |
78 | yes(s1, s2); | |
79 | s1:tag("c", { n = "1" }); | |
80 | no(s1, s2); | |
81 | end); | |
95
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
82 | it("should allow matching any attribute value with {scansion:any}", function () |
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
83 | --[[ |
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
84 | <message from="user@localhost/71652fc8-93cb-40c7-8220-47ce80cc417b" type="chat"> |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
85 | <body>Hello Juliet, are you there?</body> |
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
86 | <delay xmlns="urn:xmpp:delay" from="localhost"/> |
95
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
87 | </message> |
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
88 | ]] |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
89 | |
95
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
90 | local s01 = st.message({ from = "user@localhost/71652fc8-93cb-40c7-8220-47ce80cc417b", type = "chat" }) |
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
91 | :tag("body"):text("Hello Juliet, are you there?"):up() |
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
92 | :tag("delay", { xmlns = "urn:xmpp:delay", from = "localhost", stamp = "{scansion:any}" }):up(); |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
93 | |
95
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
94 | --[[ |
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
95 | <message to="juliet@localhost" type="chat" from="user@localhost/71652fc8-93cb-40c7-8220-47ce80cc417b"> |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
96 | <body>Hello Juliet, are you there?</body> |
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
97 | <stanza-id xmlns="urn:xmpp:sid:0" by="user@localhost" id="eb9eaf13-384e-47d1-a6c0-303ef4f1ac70"/> |
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
98 | <stanza-id xmlns="urn:xmpp:sid:0" by="juliet@localhost" id="f6c6f61d-0b15-46d6-9f69-bca1640401d1"/> |
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
99 | <delay xmlns="urn:xmpp:delay" stamp="2017-05-07T09:46:21Z" from="localhost"/> |
95
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
100 | </message> |
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
101 | ]] |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
102 | |
95
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
103 | local s02 = st.message({ to = "juliet@localhost", from = "user@localhost/71652fc8-93cb-40c7-8220-47ce80cc417b", type = "chat" }) |
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
104 | :tag("body"):text("Hello Juliet, are you there?"):up() |
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
105 | :tag("stanza-id", { xmlns = "urn:xmpp:sid:0", by = "user@localhost", id = "eb9eaf13-384e-47d1-a6c0-303ef4f1ac70" }):up() |
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
106 | :tag("stanza-id", { xmlns = "urn:xmpp:sid:0", by = "juliet@localhost", id = "f6c6f61d-0b15-46d6-9f69-bca1640401d1" }):up() |
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
107 | :tag("delay", { xmlns = "urn:xmpp:delay", stamp = "2017-05-07T09:46:21Z", from = "localhost" }):up(); |
100
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
108 | |
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
109 | |
f2b3e8e6690f
stanzacmp tests: Fix some [luacheck] warnings
Matthew Wild <mwild1@gmail.com>
parents:
99
diff
changeset
|
110 | |
95
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
111 | yes(s01, s02); |
a1e7ad9336db
tests: Add test for scansion:any
Matthew Wild <mwild1@gmail.com>
parents:
93
diff
changeset
|
112 | end); |
99
dc56d434e406
stanzacmp+tests: Add support for scansion:strict to allow override of default behaviour
Matthew Wild <mwild1@gmail.com>
parents:
98
diff
changeset
|
113 | |
dc56d434e406
stanzacmp+tests: Add support for scansion:strict to allow override of default behaviour
Matthew Wild <mwild1@gmail.com>
parents:
98
diff
changeset
|
114 | it("should match unordered children at the top level", function () |
dc56d434e406
stanzacmp+tests: Add support for scansion:strict to allow override of default behaviour
Matthew Wild <mwild1@gmail.com>
parents:
98
diff
changeset
|
115 | yes("<foo><one/><two/></foo>", "<foo><two/><one/></foo>"); |
dc56d434e406
stanzacmp+tests: Add support for scansion:strict to allow override of default behaviour
Matthew Wild <mwild1@gmail.com>
parents:
98
diff
changeset
|
116 | end); |
dc56d434e406
stanzacmp+tests: Add support for scansion:strict to allow override of default behaviour
Matthew Wild <mwild1@gmail.com>
parents:
98
diff
changeset
|
117 | |
dc56d434e406
stanzacmp+tests: Add support for scansion:strict to allow override of default behaviour
Matthew Wild <mwild1@gmail.com>
parents:
98
diff
changeset
|
118 | it("should not match unordered children", function () |
dc56d434e406
stanzacmp+tests: Add support for scansion:strict to allow override of default behaviour
Matthew Wild <mwild1@gmail.com>
parents:
98
diff
changeset
|
119 | no("<foo><one><a/><b/></one></foo>", "<foo><one><b/><a/></one></foo>"); |
dc56d434e406
stanzacmp+tests: Add support for scansion:strict to allow override of default behaviour
Matthew Wild <mwild1@gmail.com>
parents:
98
diff
changeset
|
120 | end); |
dc56d434e406
stanzacmp+tests: Add support for scansion:strict to allow override of default behaviour
Matthew Wild <mwild1@gmail.com>
parents:
98
diff
changeset
|
121 | |
dc56d434e406
stanzacmp+tests: Add support for scansion:strict to allow override of default behaviour
Matthew Wild <mwild1@gmail.com>
parents:
98
diff
changeset
|
122 | it("should be possible to disable ordered matching", function () |
dc56d434e406
stanzacmp+tests: Add support for scansion:strict to allow override of default behaviour
Matthew Wild <mwild1@gmail.com>
parents:
98
diff
changeset
|
123 | yes("<foo><one scansion:strict='no'><a/><b/></one></foo>", "<foo><one><b/><a/></one></foo>"); |
dc56d434e406
stanzacmp+tests: Add support for scansion:strict to allow override of default behaviour
Matthew Wild <mwild1@gmail.com>
parents:
98
diff
changeset
|
124 | end); |
101
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
125 | |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
126 | it("should match when there are many children", function () |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
127 | yes([[<s> |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
128 | <x> |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
129 | <a/> |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
130 | <b/> |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
131 | <c/> |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
132 | </x> |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
133 | </s>]] |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
134 | , [[<s> |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
135 | <x> |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
136 | <a/> |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
137 | <b/> |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
138 | <c/> |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
139 | </x> |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
140 | </s>]]); |
91a9e557e0e5
stanzacmp + tests: Advance through matching stanza on successful match
Matthew Wild <mwild1@gmail.com>
parents:
100
diff
changeset
|
141 | end); |
151
8191f165b9dd
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
Matthew Wild <mwild1@gmail.com>
parents:
101
diff
changeset
|
142 | it("should match", function () |
8191f165b9dd
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
Matthew Wild <mwild1@gmail.com>
parents:
101
diff
changeset
|
143 | yes([[<iq type='set' id='{scansion:any}'> |
8191f165b9dd
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
Matthew Wild <mwild1@gmail.com>
parents:
101
diff
changeset
|
144 | <query ver='{scansion:any}' xmlns='jabber:iq:roster'> |
8191f165b9dd
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
Matthew Wild <mwild1@gmail.com>
parents:
101
diff
changeset
|
145 | <item xmlns='jabber:iq:roster' jid='nurse@localhost' subscription='none'/> |
8191f165b9dd
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
Matthew Wild <mwild1@gmail.com>
parents:
101
diff
changeset
|
146 | </query> |
8191f165b9dd
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
Matthew Wild <mwild1@gmail.com>
parents:
101
diff
changeset
|
147 | </iq>]], |
8191f165b9dd
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
Matthew Wild <mwild1@gmail.com>
parents:
101
diff
changeset
|
148 | [[<iq type='set' id='ncvDjS1d'> |
8191f165b9dd
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
Matthew Wild <mwild1@gmail.com>
parents:
101
diff
changeset
|
149 | <query ver='1' xmlns='jabber:iq:roster'> |
8191f165b9dd
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
Matthew Wild <mwild1@gmail.com>
parents:
101
diff
changeset
|
150 | <item xmlns='jabber:iq:roster' jid='nurse@localhost' subscription='none'/> |
8191f165b9dd
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
Matthew Wild <mwild1@gmail.com>
parents:
101
diff
changeset
|
151 | </query> |
8191f165b9dd
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
Matthew Wild <mwild1@gmail.com>
parents:
101
diff
changeset
|
152 | </iq>]]); |
8191f165b9dd
stanzacmp: Fix for {scansion:any} in top-level attributes being ignored
Matthew Wild <mwild1@gmail.com>
parents:
101
diff
changeset
|
153 | end); |
93 | 154 | end); |