blob: c3b90b8f16f02cc77df5da5100cc58ab5fa1fbb9 [file] [log] [blame]
<!DOCTYPE html>
<body>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
function createContainerNode(test, expectedLength) {
var div = document.createElement('div');
var oldChild = document.createElement('span');
div.appendChild(oldChild);
document.body.appendChild(div);
div.dispatchCount = 0;
div.addEventListener('DOMNodeInserted', () => {
assert_equals(div.childNodes.length, expectedLength);
if (++div.dispatchCount == 2)
test.done();
}, false);
return div;
}
function createFragment() {
var fragment = document.createDocumentFragment();
fragment.appendChild(document.createElement('span'));
fragment.appendChild(document.createElement('span'));
return fragment;
}
var test1 = async_test('appendChild: DOMNodeInserted event should be dispatched after all nodes in a DocumentFragment were inserted.');
test1.step(() => {
createContainerNode(test1, 3).appendChild(createFragment());
});
var test2 = async_test('insertBefore: DOMNodeInserted event should be dispatched after all nodes in a DocumentFragment were inserted.');
test2.step(() => {
createContainerNode(test2, 3).insertBefore(createFragment(), null);
});
var test3 = async_test('replaceChild: DOMNodeInserted event should be dispatched after all nodes in a DocumentFragment were inserted.');
test3.step(() => {
var div = createContainerNode(test3, 2);
div.replaceChild(createFragment(), div.firstChild);
});
test(() => {
var container = document.createElement('div');
var fragment = createFragment();
var fragmentLast = fragment.lastChild;
fragment.addEventListener('DOMNodeRemoved', () => {
fragmentLast.appendChild(container);
}, false);
assert_throws('HierarchyRequestError', () => { container.appendChild(fragment); });
}, 'appendChild: Reparenting in DOMNodeRemoved handler for a DocumentFragment should throw.');
test(() => {
var container = document.createElement('div');
container.innerHTML = '<span></span>';
var fragment = createFragment();
var fragmentLast = fragment.lastChild;
fragment.addEventListener('DOMNodeRemoved', () => {
fragmentLast.appendChild(container);
}, false);
assert_throws('HierarchyRequestError', () => { container.insertBefore(fragment, container.lastChild); });
}, 'insertBefore: Reparenting in DOMNodeRemoved handler for a DocumentFragment should throw.');
test(() => {
var container = document.createElement('div');
container.innerHTML = '<span></span>';
var fragment = createFragment();
var fragmentLast = fragment.lastChild;
fragment.addEventListener('DOMNodeRemoved', () => {
fragmentLast.appendChild(container);
}, false);
assert_throws('HierarchyRequestError', () => { container.replaceChild(fragment, container.lastChild); });
}, 'replaceChild: Reparenting in DOMNodeRemoved handler for a DocumentFragment should throw.');
</script>
</body>