diff --git a/lib/constants.js b/lib/constants.js index 4c9dfd2..a04bfd8 100644 --- a/lib/constants.js +++ b/lib/constants.js @@ -8,7 +8,7 @@ module.exports.NODE_TYPES = { ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, // historical TEXT_NODE: 3, - CDATA_SECTION_NODE: 4, // historical + CDATA_SECTION_NODE: 4, ENTITY_REFERENCE_NODE: 5, // historical ENTITY_NODE: 6, // historical PROCESSING_INSTRUCTION_NODE: 7, diff --git a/lib/serialization.js b/lib/serialization.js index dcef496..c8c5e13 100644 --- a/lib/serialization.js +++ b/lib/serialization.js @@ -303,6 +303,10 @@ function serializeElement(node, namespace, prefixMap, requireWellFormed, refs) { return markup; } +function serializeCDATASection(node) { + return ""; +} + /** * @param {{prefixIndex: number}} refs */ @@ -352,6 +356,8 @@ function xmlSerialization(node, namespace, prefixMap, requireWellFormed, refs) { ); case NODE_TYPES.ATTRIBUTE_NODE: return ""; + case NODE_TYPES.CDATA_SECTION_NODE: + return serializeCDATASection(node); default: throw new TypeError("Only Nodes and Attr objects can be serialized"); } diff --git a/test/wpt/XMLSerializer-serializeToString.test.js b/test/wpt/XMLSerializer-serializeToString.test.js index 5e5ef83..1515179 100644 --- a/test/wpt/XMLSerializer-serializeToString.test.js +++ b/test/wpt/XMLSerializer-serializeToString.test.js @@ -77,4 +77,13 @@ describe("WPT", () => { 'value1' ); }); + + test("check CDATASection nodes are serialized correctly", () => { + const markup = + ""; + + const document = new DOMParser().parseFromString(markup, "application/xml"); + + expect(new XMLSerializer().serializeToString(document)).toEqual(markup); + }); });