Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fixup! Add DOM parsing and serialization tests
- Loading branch information
Showing
2 changed files
with
269 additions
and
117 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
269 changes: 269 additions & 0 deletions
269
html/syntax/serializing-html-fragments/serializing.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,269 @@ | ||
<!DOCTYPE html> | ||
<title>innerHTML in HTML</title> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<div id="log"></div> | ||
|
||
<!-- test elments. Each has an expected innerHTML and outerHTML in an array in the <script>--> | ||
<div id="test" style="display:none"> | ||
<span></span> | ||
<span><a></a></span> | ||
<span><a b=c></a></span> | ||
<span><a b='c'></a></span> | ||
<span><a b='&'></a></span> | ||
<span><a b=' '></a></span> | ||
<span><a b='"'></a></span> | ||
<span><a b="<"></a></span> | ||
<span><a b=">"></a></span> | ||
<span><svg xlink:href="a"></svg></span> | ||
<span><svg xmlns:svg="test"></svg></span> | ||
<span><pre>

</pre></span> | ||
<span><textarea>

</textarea></span> | ||
<span><listing>

</listing></span> | ||
<span><a>

</a></span> | ||
<span>a</span> | ||
<span>&</span> | ||
<span> </span> | ||
<span><</span> | ||
<span>></span> | ||
<span>"</span> | ||
<span><style><&></style></span> | ||
<span><script type="test"><&></script></span> | ||
<span><xmp><&></xmp></span> | ||
<span><iframe><&></iframe></span> | ||
<span><noembed><&></noembed></span> | ||
<span><noframes><&></noframes></span> | ||
<span><noscript><&></noscript></span> | ||
<span><!--data--></span> | ||
<span><a><b><c></c></b><d>e</d><f><g>h</g></f></a></span> | ||
<span b=c></span> | ||
</div> | ||
<!-- TODO: template element --> | ||
<script> | ||
|
||
var test_data = document.getElementById("test").getElementsByTagName("span"); | ||
var expected = [ | ||
["", "<span></span>"], | ||
["<a></a>", "<span><a></a></span>"], | ||
["<a b=\"c\"></a>", "<span><a b=\"c\"></a></span>"], | ||
["<a b=\"c\"></a>", "<span><a b=\"c\"></a></span>"], | ||
["<a b=\"&\"></a>", "<span><a b=\"&\"></a></span>"], | ||
["<a b=\" \"></a>", "<span><a b=\" \"></a></span>"], | ||
["<a b=\""\"></a>", "<span><a b=\""\"></a></span>"], | ||
["<a b=\"<\"></a>", "<span><a b=\"<\"></a></span>"], | ||
["<a b=\">\"></a>", "<span><a b=\">\"></a></span>"], | ||
["<svg xlink:href=\"a\"></svg>", "<span><svg xlink:href=\"a\"></svg></span>"], | ||
["<svg xmlns:svg=\"test\"></svg>", "<span><svg xmlns:svg=\"test\"></svg></span>"], | ||
["<pre>\x0A</pre>", "<span><pre>\x0A</pre></span>"], | ||
["<textarea>\x0A</textarea>", "<span><textarea>\x0A</textarea></span>"], | ||
["<listing>\x0A</listing>", "<span><listing>\x0A</listing></span>"], | ||
["<a>\x0A\x0A</a>", "<span><a>\x0A\x0A</a></span>"], | ||
["a", "<span>a</span>"], | ||
["&", "<span>&</span>"], | ||
[" ", "<span> </span>"], | ||
["<", "<span><</span>"], | ||
[">", "<span>></span>"], | ||
["\"", "<span>\"</span>"], | ||
["<style><&></style>", "<span><style><&></style></span>"], | ||
["<script type=\"test\"><&><\/script>", "<span><script type=\"test\"><&><\/script></span>"], | ||
["<xmp><&></xmp>", "<span><xmp><&></xmp></span>"], | ||
["<iframe><&></iframe>", "<span><iframe><&></iframe></span>"], | ||
["<noembed><&></noembed>", "<span><noembed><&></noembed></span>"], | ||
["<noframes><&></noframes>", "<span><noframes><&></noframes></span>"], | ||
["<noscript><&></noscript>", "<span><noscript><&></noscript></span>"], | ||
["<!--data-->", "<span><!--data--></span>"], | ||
["<a><b><c></c></b><d>e</d><f><g>h</g></f></a>", "<span><a><b><c></c></b><d>e</d><f><g>h</g></f></a></span>"], | ||
["", "<span b=\"c\"></span>"] | ||
]; | ||
|
||
var dom_tests = [ | ||
["Attribute in the XML namespace", | ||
function() { | ||
var span = document.createElement("span"); | ||
var svg = document.createElement("svg"); | ||
svg.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:foo", "test"); | ||
span.appendChild(svg); | ||
return span; | ||
}, | ||
'<svg xml:foo="test"></svg>', | ||
'<span><svg xml:foo="test"></svg></span>'], | ||
|
||
["Attribute in the XML namespace with the prefix not set to xml:", | ||
function() { | ||
var span = document.createElement("span"); | ||
var svg = document.createElement("svg"); | ||
svg.setAttributeNS("http://www.w3.org/XML/1998/namespace", "abc:foo", "test"); | ||
span.appendChild(svg); | ||
return span; | ||
}, | ||
'<svg xml:foo="test"></svg>', | ||
'<span><svg xml:foo="test"></svg></span>'], | ||
|
||
["Non-'xmlns' attribute in the xmlns namespace", | ||
function() { | ||
var span = document.createElement("span"); | ||
var svg = document.createElement("svg"); | ||
svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:foo", "test") | ||
span.appendChild(svg); | ||
return span; | ||
}, | ||
'<svg xmlns:foo="test"></svg>', | ||
'<span><svg xmlns:foo="test"></svg></span>'], | ||
|
||
["'xmlns' attribute in the xmlns namespace", | ||
function() { | ||
var span = document.createElement("span"); | ||
var svg = document.createElement("svg"); | ||
svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", "test") | ||
span.appendChild(svg); | ||
return span; | ||
}, | ||
'<svg xmlns="test"></svg>', | ||
'<span><svg xmlns="test"></svg></span>'], | ||
|
||
["Attribute in non-standard namespace", | ||
function() { | ||
var span = document.createElement("span"); | ||
var svg = document.createElement("svg"); | ||
svg.setAttributeNS("fake_ns", "abc:def", "test") | ||
span.appendChild(svg); | ||
return span; | ||
}, | ||
'<svg abc:def="test"></svg>', | ||
'<span><svg abc:def="test"></svg></span>'], | ||
//TODO: Processing instructions, doctypes | ||
] | ||
|
||
var void_elements = [ | ||
"area", "base", "basefont", "bgsound", "br", "col", "embed", | ||
"frame", "hr", "img", "input", "keygen", "link", "menuitem", | ||
"meta", "param", "source", "track", "wbr" | ||
]; | ||
|
||
var void_tests = [ | ||
["Void context node", | ||
function (void_elem) { | ||
return void_elem; | ||
}, | ||
"", | ||
"<%void>" | ||
], | ||
["void as first child with following siblings", | ||
function (void_elem) { | ||
var span = document.createElement("span"); | ||
span.appendChild(void_elem); | ||
span.appendChild(document.createElement("a")).appendChild(document.createTextNode("test")); | ||
span.appendChild(document.createElement("b")) | ||
return span | ||
}, | ||
"<%void><a>test</a><b></b>", | ||
"<span><%void><a>test</a><b></b></span>" | ||
], | ||
["void as second child with following siblings", | ||
function (void_elem) { | ||
var span = document.createElement("span"); | ||
span.appendChild(document.createElement("a")).appendChild(document.createTextNode("test")); | ||
span.appendChild(void_elem); | ||
span.appendChild(document.createElement("b")) | ||
return span; | ||
}, | ||
"<a>test</a><%void><b></b>", | ||
"<span><a>test</a><%void><b></b></span>" | ||
], | ||
["void as last child with preceding siblings", | ||
function (void_elem) { | ||
var span = document.createElement("span"); | ||
span.appendChild(document.createElement("a")).appendChild(document.createTextNode("test")); | ||
span.appendChild(document.createElement("b")) | ||
span.appendChild(void_elem); | ||
return span; | ||
}, | ||
"<a>test</a><b></b><%void>", | ||
"<span><a>test</a><b></b><%void></span>" | ||
], | ||
] | ||
|
||
function cross_map(a1, a2, f) { | ||
var rv = []; | ||
a1.forEach(function(a1_elem) { | ||
a2.forEach(function(a2_elem) { | ||
rv.push(f(a1_elem, a2_elem)); | ||
}) | ||
}); | ||
return rv; | ||
} | ||
|
||
function innerHTML_test(i) { | ||
assert_equals(test_data[i].innerHTML, expected[i][0]); | ||
} | ||
|
||
function outerHTML_test(i) { | ||
assert_equals(test_data[i].outerHTML, expected[i][1]); | ||
} | ||
|
||
function innerHTML_dom_test(test_data) { | ||
assert_equals(test_data[1]().innerHTML, test_data[2]); | ||
} | ||
|
||
function outerHTML_dom_test(test_data) { | ||
assert_equals(test_data[1]().outerHTML, test_data[3]); | ||
} | ||
|
||
function make_void(name) { | ||
var rv = document.createElement(name); | ||
rv.appendChild(document.createElement("a")).appendChild(document.createComment("abc")) | ||
rv.appendChild(document.createElement("b")). | ||
appendChild(document.createElement("c")). | ||
appendChild(document.createTextNode("abc")) | ||
return rv; | ||
} | ||
|
||
function innerHTML_void_test(func, elem, expected) { | ||
assert_equals(func(elem).innerHTML, expected); | ||
} | ||
|
||
function outerHTML_void_test(func, elem, expected) { | ||
assert_equals(func(elem).outerHTML, expected); | ||
} | ||
|
||
generate_tests(innerHTML_test, | ||
expected.map(function(item, i) { | ||
return ["innerHTML " + i + " " + expected[i][0], i]; | ||
})) | ||
|
||
generate_tests(outerHTML_test, | ||
expected.map(function(item, i) { | ||
return ["outerHTML " + i + " " + expected[i][1], i]; | ||
})) | ||
|
||
generate_tests(innerHTML_dom_test, | ||
dom_tests.map(function(item) { | ||
return ["innerHTML " + item[0], item]; | ||
})) | ||
|
||
generate_tests(outerHTML_dom_test, | ||
dom_tests.map(function(item) { | ||
return ["outerHTML " + item[0], item]; | ||
})) | ||
|
||
generate_tests(innerHTML_void_test, | ||
cross_map(void_tests, void_elements, | ||
function(test_data, elem_name) { | ||
var rv = ["innerHTML " + test_data[0] + " " + elem_name, | ||
test_data[1], | ||
make_void(elem_name), | ||
test_data[2].replace("%void", elem_name)]; | ||
return rv; | ||
})) | ||
|
||
generate_tests(outerHTML_void_test, | ||
cross_map(void_tests, void_elements, | ||
function(test_data, elem_name) { | ||
var rv = ["outerHTML " + test_data[0] + " " + elem_name, | ||
test_data[1], | ||
make_void(elem_name), | ||
test_data[3].replace("%void", elem_name)]; | ||
return rv; | ||
})) | ||
|
||
</script> |