File

spec/util_xml_spec.lua @ 13426:581899aef96f

util.rfc6724: Remove, unused since introduction of Happy Eyeballs It was mainly used to determine whether to try IPv6 or IPv4 first, following the rules for this in the RFC. Now we always try IPv6 and IPv4 at roughly the same time, thus there no need to carry these rules.
author Kim Alvefur <zash@zash.se>
date Thu, 22 Feb 2024 19:46:52 +0100 (14 months ago)
parent 12270:c78639ee6ccb
line wrap: on
line source

local xml = require "util.xml";

describe("util.xml", function()
	describe("#parse()", function()
		it("should work", function()
			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 = xml.parse(x, {allow_comments = true});
			assert.are.equal(stanza.tags[2].attr.xmlns, "b");
			assert.are.equal(stanza.tags[2].namespaces["a"], "b");
		end);

		it("should reject doctypes", function()
			local x = "<!DOCTYPE foo []><foo/>";
			local ok = xml.parse(x);
			assert.falsy(ok);
		end);

		it("should reject comments by default", function()
			local x = "<foo><!-- foo --></foo>";
			local ok = xml.parse(x);
			assert.falsy(ok);
		end);

		it("should allow comments if asked nicely", function()
			local x = "<foo><!-- foo --></foo>";
			local stanza = xml.parse(x, {allow_comments = true});
			assert.are.equal(stanza.name, "foo");
			assert.are.equal(#stanza, 0);
		end);

		it("should reject processing instructions", function()
			local x = "<foo><?php die(); ?></foo>";
			local ok = xml.parse(x);
			assert.falsy(ok);
		end);

		it("should allow processing instructions if asked nicely", function()
			local x = "<?xml-stylesheet href='make-fancy.xsl'?><foo/>";
			local stanza = xml.parse(x, {allow_processing_instructions = true});
			assert.truthy(stanza);
			assert.are.equal(stanza.name, "foo");
		end);

		it("should allow an xml declaration", function()
			local x = "<?xml version='1.0'?><foo/>";
			local stanza = xml.parse(x);
			assert.truthy(stanza);
			assert.are.equal(stanza.name, "foo");
		end);
	end);
end);