<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>XML serialization</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> </head> <body> <div id="log"></div> <script><![CDATA[ function serialize(node) { var serializer = new XMLSerializer(); return serializer.serializeToString(node); } test(function() { var dt = document.createComment("--"); assert_equals(serialize(dt), '<!------>'); }, "Comment: containing --"); test(function() { var dt = document.createComment("- x"); assert_equals(serialize(dt), '<!--- x-->'); }, "Comment: starting with -"); test(function() { var dt = document.createComment("x -"); assert_equals(serialize(dt), '<!--x --->'); }, "Comment: ending with -"); test(function() { var dt = document.createComment("-->"); assert_equals(serialize(dt), '<!---->-->'); }, "Comment: containing -->"); test(function() { var dt = document.implementation.createDocumentType("html", "", ""); assert_equals(serialize(dt), '<!DOCTYPE html>'); }, "DocumentType: empty public and system id"); test(function() { var dt = document.implementation.createDocumentType("html", "a", ""); assert_equals(serialize(dt), '<!DOCTYPE html PUBLIC "a">'); }, "DocumentType: empty system id"); test(function() { var dt = document.implementation.createDocumentType("html", "", "a"); assert_equals(serialize(dt), '<!DOCTYPE html SYSTEM "a">'); }, "DocumentType: empty public id"); test(function() { var dt = document.implementation.createDocumentType("html", "a", "b"); assert_equals(serialize(dt), '<!DOCTYPE html PUBLIC "a" "b">'); }, "DocumentType: non-empty public and system id"); test(function() { var dt = document.implementation.createDocumentType("html", "'", "'"); assert_equals(serialize(dt), "<!DOCTYPE html PUBLIC \"'\" \"'\">"); }, "DocumentType: 'APOSTROPHE' (U+0027)"); test(function() { var dt = document.implementation.createDocumentType("html", '"', '"'); assert_equals(serialize(dt), '<!DOCTYPE html PUBLIC """ """>'); }, "DocumentType: 'QUOTATION MARK' (U+0022)"); test(function() { var dt = document.implementation.createDocumentType("html", '"\'', '\'"'); assert_equals(serialize(dt), '<!DOCTYPE html PUBLIC ""\'" "\'"">'); }, "DocumentType: 'APOSTROPHE' (U+0027) and 'QUOTATION MARK' (U+0022)"); test(function() { var el = document.createElement("a"); el.setAttribute("href", "\u3042\u3044\u3046 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"); assert_equals(serialize(el), "<a xmlns=\"http://www.w3.org/1999/xhtml\" href=\"\u3042\u3044\u3046 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\"></a>"); }, "Element: href attributes are not percent-encoded"); test(function() { var el = document.createElement("a"); el.setAttribute("href", "?\u3042\u3044\u3046 !\"$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"); assert_equals(serialize(el), "<a xmlns=\"http://www.w3.org/1999/xhtml\" href=\"?\u3042\u3044\u3046 !"$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\"></a>"); }, "Element: query parts in href attributes are not percent-encoded"); test(function() { var pi = document.createProcessingInstruction("a", ""); assert_equals(serialize(pi), "<?a ?>"); }, "ProcessingInstruction: empty data"); test(function() { var pi = document.createProcessingInstruction("a", "b"); assert_equals(serialize(pi), "<?a b?>"); }, "ProcessingInstruction: non-empty data"); test(function() { var pi = document.createProcessingInstruction("xml", "b"); assert_equals(serialize(pi), "<?xml b?>"); }, "ProcessingInstruction: target contains xml"); test(function() { var pi = document.createProcessingInstruction("x:y", "b"); assert_equals(serialize(pi), "<?x:y b?>"); }, "ProcessingInstruction: target contains a 'COLON' (U+003A)"); ]]></script> </body> </html>