| <!doctype html> |
| <title>document.createElement() namespace tests</title> |
| <link rel=author title="Aryeh Gregor" href=ayg@aryeh.name> |
| <div id=log></div> |
| <script src=/resources/testharness.js></script> |
| <script src=/resources/testharnessreport.js></script> |
| <script> |
| "use strict"; |
| /** |
| * This tests the namespace of elements created by the Document interface's |
| * createElement() method. See bug: |
| * https://www.w3.org/Bugs/Public/show_bug.cgi?id=19431 |
| */ |
| |
| /** |
| * Test that an element created using the Document object doc has the HTML |
| * namespace. |
| */ |
| function testDoc(doc, contentType) { |
| if (doc.contentType !== undefined) { |
| // Sanity check |
| assert_equals(doc.contentType, contentType, |
| "Wrong MIME type -- incorrect server config?"); |
| } |
| |
| assert_equals(doc.createElement("x").namespaceURI, "http://www.w3.org/1999/xhtml"); |
| } |
| |
| // First test various objects we create in JS |
| test(function() { |
| testDoc(document, "text/html") |
| }, "Created element's namespace in current document"); |
| test(function() { |
| testDoc(document.implementation.createHTMLDocument(""), "text/html"); |
| }, "Created element's namespace in created HTML document"); |
| test(function() { |
| testDoc(document.implementation.createDocument(null, "", null), |
| "application/xml"); |
| }, "Created element's namespace in created XML document"); |
| test(function() { |
| testDoc(document.implementation.createDocument("http://www.w3.org/1999/xhtml", "html", null), |
| "application/xml"); |
| }, "Created element's namespace in created XHTML document"); |
| test(function() { |
| testDoc(document.implementation.createDocument("http://www.w3.org/2000/svg", "svg", null), |
| "application/xml"); |
| }, "Created element's namespace in created SVG document"); |
| test(function() { |
| testDoc(document.implementation.createDocument("http://www.w3.org/1998/Math/MathML", "math", null), |
| "application/xml"); |
| }, "Created element's namespace in created MathML document"); |
| |
| // Now for various externally-loaded files. Note: these lists must be kept |
| // synced with the lists in generate.py in the subdirectory, and that script |
| // must be run whenever the lists are updated. (We could keep the lists in a |
| // shared JSON file, but it seems like too much effort.) |
| var testExtensions = { |
| html: "text/html", |
| xhtml: "application/xhtml+xml", |
| xml: "application/xml", |
| svg: "image/svg+xml", |
| // Was not able to get server MIME type working properly :( |
| //mml: "application/mathml+xml", |
| }; |
| |
| var tests = [ |
| "empty", |
| "minimal_html", |
| |
| "xhtml", |
| "svg", |
| "mathml", |
| |
| "bare_xhtml", |
| "bare_svg", |
| "bare_mathml", |
| |
| "xhtml_ns_removed", |
| "xhtml_ns_changed", |
| ]; |
| |
| tests.forEach(function(testName) { |
| Object.keys(testExtensions).forEach(function(ext) { |
| var iframe = document.createElement("iframe"); |
| iframe.src = "Document-createElement-namespace-tests/" + |
| testName + "." + ext; |
| var t = async_test("Created element's namespace in " + testName + "." + ext); |
| iframe.onload = function() { |
| t.step(function() { |
| testDoc(iframe.contentDocument, testExtensions[ext]); |
| }); |
| document.body.removeChild(iframe); |
| t.done(); |
| }; |
| document.body.appendChild(iframe); |
| }); |
| }); |
| </script> |