Software / code / prosody
File
spec/util_xml_spec.lua @ 13174:8ec7b7d6556f
util.cache: Keep eviction candidate if callback resized to make room
Previously either the old or the new values would be rejected, even if
the cache was resized to allow more items.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 30 Jun 2023 22:01:49 +0200 |
| 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);