blob: 1d2844d6a4225dad54ca4b00ccc6f88125e66751 [file] [log] [blame]
<!DOCTYPE html>
<html>
<body>
<div id="root">
<span>
<span id="target"></span>
</span>
</div>
<script src="../../resources/js-test-pre.js"></script>
<script>
description('Tests dispatching an event that bubbles inside a detached tree. The event should propagate to the ancestors of the target');
var log;
function dispatchEventWithLog(target) {
log = [];
for (var node = target; node; node = node.parentNode)
node.addEventListener('foo', (function (event) { log.push([this, event.target]); }).bind(node));
target.dispatchEvent(new Event("foo", {bubbles: true}));
}
function cloneNode(node) {
range = new Range;
range.selectNode(node);
return range.cloneContents();
}
var target = document.getElementById("target");
var root = document.getElementById("root");
evalAndLog('clonedRoot = cloneNode(root)');
evalAndLog('clonedTarget = clonedRoot.getElementById("target"); dispatchEventWithLog(clonedTarget);');
shouldBeTrue('clonedRoot instanceof DocumentFragment');
shouldBe('log.length', '4');
shouldBe('log[0]', '[clonedTarget, clonedTarget]');
shouldBe('log[1]', '[clonedTarget.parentNode, clonedTarget]');
shouldBe('log[2]', '[clonedTarget.parentNode.parentNode, clonedTarget]');
shouldBe('log[3]', '[clonedRoot, clonedTarget]');
shouldBeNull('clonedRoot.parentNode');
debug('');
evalAndLog('root.remove(); dispatchEventWithLog(target);');
shouldBe('log.length', '3');
shouldBe('log[0]', '[target, target]');
shouldBe('log[1]', '[target.parentNode, target]');
shouldBe('log[2]', '[root, target]');
shouldBeNull('root.parentNode');
var successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>