|  | <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> |