Annotate

spec/util_xtemplate_spec.lua @ 13568:3615590fd9ed

util.stanza: Handle namespace prefixes for attributes in :find() More correct handling of namespaces here. This works with both prefixes from the parser and hacky .attr["foo:bar"]
author Kim Alvefur <zash@zash.se>
date Sun, 17 Nov 2024 12:35:51 +0100
parent 13499:1f93e4f78c53
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13395
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local st = require "prosody.util.stanza";
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 local xtemplate = require "prosody.util.xtemplate";
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 describe("util.xtemplate", function ()
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 describe("render()", function ()
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 it("works", function ()
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 assert.same("Hello", xtemplate.render("{greeting}", st.stanza("root"):text_tag("greeting", "Hello")), "regular text content")
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 assert.same("Hello", xtemplate.render("{#}", st.stanza("root"):text("Hello")), "top tag text content")
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 assert.same("Hello", xtemplate.render("{greeting/@en}", st.stanza("root"):tag("greeting", { en = "Hello" })), "attribute")
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 end)
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 it("supports conditionals", function ()
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 local atom_tmpl = "{@pubsub:title|and{*{@pubsub:title}*\n\n}}{summary|or{{author/name|and{{author/name} posted }}{title}}}";
13568
3615590fd9ed util.stanza: Handle namespace prefixes for attributes in :find()
Kim Alvefur <zash@zash.se>
parents: 13499
diff changeset
13 local atom_data = st.stanza("entry", { xmlns = "http://www.w3.org/2005/Atom" }, {["pubsub"] = "http://jabber.org/protocol/pubsub"});
13395
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 assert.same("", xtemplate.render(atom_tmpl, atom_data));
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 atom_data:text_tag("title", "an Entry")
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 assert.same("an Entry", xtemplate.render(atom_tmpl, atom_data));
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 atom_data:tag("author"):text_tag("name","Juliet"):up();
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 assert.same("Juliet posted an Entry", xtemplate.render(atom_tmpl, atom_data));
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 atom_data:text_tag("summary", "Juliet just posted a new entry");
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 assert.same("Juliet just posted a new entry", xtemplate.render(atom_tmpl, atom_data));
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24
13568
3615590fd9ed util.stanza: Handle namespace prefixes for attributes in :find()
Kim Alvefur <zash@zash.se>
parents: 13499
diff changeset
25 atom_data.attr["http://jabber.org/protocol/pubsub\1title"] = "Juliets musings";
13395
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 assert.same("*Juliets musings*\n\nJuliet just posted a new entry", xtemplate.render(atom_tmpl, atom_data));
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 end)
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 it("can strip surrounding whitespace", function ()
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 assert.same("Hello ", xtemplate.render(" {-greeting} ", st.stanza("root"):text_tag("greeting", "Hello")))
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 assert.same(" Hello", xtemplate.render(" {greeting-} ", st.stanza("root"):text_tag("greeting", "Hello")))
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 assert.same("Hello", xtemplate.render(" {-greeting-} ", st.stanza("root"):text_tag("greeting", "Hello")))
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 end)
13404
034c7af177f0 util.xtemplate: Test the each template function
Kim Alvefur <zash@zash.se>
parents: 13395
diff changeset
33 describe("each", function ()
034c7af177f0 util.xtemplate: Test the each template function
Kim Alvefur <zash@zash.se>
parents: 13395
diff changeset
34 it("makes sense", function ()
034c7af177f0 util.xtemplate: Test the each template function
Kim Alvefur <zash@zash.se>
parents: 13395
diff changeset
35 local x = st.stanza("root"):tag("foo"):tag("bar")
034c7af177f0 util.xtemplate: Test the each template function
Kim Alvefur <zash@zash.se>
parents: 13395
diff changeset
36 for i = 1, 5 do x:text_tag("i", tostring(i)); end
034c7af177f0 util.xtemplate: Test the each template function
Kim Alvefur <zash@zash.se>
parents: 13395
diff changeset
37 x:reset();
034c7af177f0 util.xtemplate: Test the each template function
Kim Alvefur <zash@zash.se>
parents: 13395
diff changeset
38 assert.same("12345", xtemplate.render("{foo/bar|each(i){{#}}}", x));
034c7af177f0 util.xtemplate: Test the each template function
Kim Alvefur <zash@zash.se>
parents: 13395
diff changeset
39 end)
13499
1f93e4f78c53 util.xtemplate: Fix error on applying each() to zero stanzas
Kim Alvefur <zash@zash.se>
parents: 13404
diff changeset
40 it("handles missing inputs", function ()
1f93e4f78c53 util.xtemplate: Fix error on applying each() to zero stanzas
Kim Alvefur <zash@zash.se>
parents: 13404
diff changeset
41 local x = st.stanza("root");
1f93e4f78c53 util.xtemplate: Fix error on applying each() to zero stanzas
Kim Alvefur <zash@zash.se>
parents: 13404
diff changeset
42 assert.same("", xtemplate.render("{foo/bar|each(i){{#}}}", x));
1f93e4f78c53 util.xtemplate: Fix error on applying each() to zero stanzas
Kim Alvefur <zash@zash.se>
parents: 13404
diff changeset
43 end)
13404
034c7af177f0 util.xtemplate: Test the each template function
Kim Alvefur <zash@zash.se>
parents: 13395
diff changeset
44 end)
13395
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 end)
1675d4b6363a util.xtemplate: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 end)