From 36914c9d99fb5c50753ac626e895754923ce6325 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sat, 9 Dec 2023 15:15:06 +0100 Subject: util.xtemplate: Add some initial tests Strict typing does not magically make code correct --- spec/util_xtemplate_spec.lua | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 spec/util_xtemplate_spec.lua diff --git a/spec/util_xtemplate_spec.lua b/spec/util_xtemplate_spec.lua new file mode 100644 index 00000000..97ab415c --- /dev/null +++ b/spec/util_xtemplate_spec.lua @@ -0,0 +1,35 @@ +local st = require "prosody.util.stanza"; +local xtemplate = require "prosody.util.xtemplate"; + +describe("util.xtemplate", function () + describe("render()", function () + it("works", function () + assert.same("Hello", xtemplate.render("{greeting}", st.stanza("root"):text_tag("greeting", "Hello")), "regular text content") + assert.same("Hello", xtemplate.render("{#}", st.stanza("root"):text("Hello")), "top tag text content") + assert.same("Hello", xtemplate.render("{greeting/@en}", st.stanza("root"):tag("greeting", { en = "Hello" })), "attribute") + end) + it("supports conditionals", function () + local atom_tmpl = "{@pubsub:title|and{*{@pubsub:title}*\n\n}}{summary|or{{author/name|and{{author/name} posted }}{title}}}"; + local atom_data = st.stanza("entry", { xmlns = "http://www.w3.org/2005/Atom" }); + assert.same("", xtemplate.render(atom_tmpl, atom_data)); + + atom_data:text_tag("title", "an Entry") + assert.same("an Entry", xtemplate.render(atom_tmpl, atom_data)); + + atom_data:tag("author"):text_tag("name","Juliet"):up(); + assert.same("Juliet posted an Entry", xtemplate.render(atom_tmpl, atom_data)); + + atom_data:text_tag("summary", "Juliet just posted a new entry"); + assert.same("Juliet just posted a new entry", xtemplate.render(atom_tmpl, atom_data)); + + atom_data.attr["xmlns:pubsub"] = "http://jabber.org/protocol/pubsub"; + atom_data.attr["pubsub:title"] = "Juliets musings"; + assert.same("*Juliets musings*\n\nJuliet just posted a new entry", xtemplate.render(atom_tmpl, atom_data)); + end) + it("can strip surrounding whitespace", function () + assert.same("Hello ", xtemplate.render(" {-greeting} ", st.stanza("root"):text_tag("greeting", "Hello"))) + assert.same(" Hello", xtemplate.render(" {greeting-} ", st.stanza("root"):text_tag("greeting", "Hello"))) + assert.same("Hello", xtemplate.render(" {-greeting-} ", st.stanza("root"):text_tag("greeting", "Hello"))) + end) + end) +end) -- cgit v1.2.3