File

spec/util_xtemplate_spec.lua @ 13459:790f60c0843b

util.startup: Back out 598df17b8ebb Broke signal handling again, such that an early s2s connection results in libunbound catching signals and getting Prosody killed on e.g. SIGHUP This returns to the situation where prosody --daemonize does not respond to signals.
author Kim Alvefur <zash@zash.se>
date Sun, 10 Mar 2024 15:56:01 +0100
parent 13404:034c7af177f0
child 13499:1f93e4f78c53
line wrap: on
line source

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)
		describe("each", function ()
			it("makes sense", function ()
				local x = st.stanza("root"):tag("foo"):tag("bar")
				for i = 1, 5 do x:text_tag("i", tostring(i)); end
				x:reset();
				assert.same("12345", xtemplate.render("{foo/bar|each(i){{#}}}", x));
			end)
		end)
	end)
end)