<!DOCTYPE html>
<script src="../../../resources/js-test.js"></script>
<script>
var parser = new DOMParser();
var serializer = new XMLSerializer();
var doc, newChild, fragment;
function dumpDocument() {
debug(escapeHTML(serializer.serializeToString(doc)) + '<br>');
}
function test(name, fn) {
debug(name);
fn();
dumpDocument();
}
description('This tests that various combinations of replaceChild on the document works as specified.');
test('replacing element with element', function() {
doc = parser.parseFromString('<!DOCTYPE html><body/>', 'text/xml');
newChild = doc.createElement('div');
shouldNotThrow('doc.replaceChild(newChild, doc.documentElement)');
});
test('replacing element with element in fragment', function() {
doc = parser.parseFromString('<!DOCTYPE html><body/>', 'text/xml');
fragment = doc.createDocumentFragment();
fragment.appendChild(doc.createElement('div'));
shouldNotThrow('doc.replaceChild(fragment, doc.documentElement);');
});
test('replacing element with multiple elements in fragment', function() {
doc = parser.parseFromString('<!DOCTYPE html><body/>', 'text/xml');
fragment = doc.createDocumentFragment();
fragment.appendChild(doc.createElement('div'));
fragment.appendChild(doc.createElement('span'));
shouldThrow('doc.replaceChild(fragment, doc.documentElement);');
});
test('replacing element with doctype', function() {
doc = parser.parseFromString('<body/>', 'text/xml');
newChild = doc.implementation.createDocumentType('svg', '-//W3C//DTD SVG 1.1//EN', 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd');
shouldNotThrow('doc.replaceChild(newChild, doc.documentElement)');
});
test('replacing element with doctype when a doctype already exists', function() {
doc = parser.parseFromString('<!DOCTYPE html><body/>', 'text/xml');
newChild = doc.implementation.createDocumentType('svg', '-//W3C//DTD SVG 1.1//EN', 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd');
shouldThrow('doc.replaceChild(newChild, doc.documentElement)');
});
test('replacing doctype with doctype', function() {
doc = parser.parseFromString('<!DOCTYPE html><body/>', 'text/xml');
newChild = doc.implementation.createDocumentType('svg', '-//W3C//DTD SVG 1.1//EN', 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd');
shouldNotThrow('doc.replaceChild(newChild, doc.doctype)');
});
test('replacing doctype with element', function() {
doc = parser.parseFromString('<!DOCTYPE html><body/>', 'text/xml');
doc.removeChild(doc.documentElement);
newChild = doc.createElement('bar');
shouldNotThrow('doc.replaceChild(newChild, doc.doctype)');
});
test('replacing element with doctype when an element already exists', function() {
doc = parser.parseFromString('<!DOCTYPE html><body/>', 'text/xml');
newChild = doc.implementation.createDocumentType('svg', '-//W3C//DTD SVG 1.1//EN', 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd');
shouldThrow('doc.replaceChild(newChild, doc.documentElement)');
});
</script>