spec/util_xml_spec.lua
branch0.11
changeset 12185 783056b4e448
parent 8239 4878e4159e12
child 12274 c78639ee6ccb
--- a/spec/util_xml_spec.lua	Mon Dec 20 16:24:52 2021 +0100
+++ b/spec/util_xml_spec.lua	Mon Jan 10 18:23:54 2022 +0100
@@ -12,9 +12,41 @@
 	<a:z/> <!-- prefix 'a' is nil here, but should be 'b' -->
 </x>
 ]]
-			local stanza = xml.parse(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 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);