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);
+ });
});