58 lines
1.7 KiB
HTML
58 lines
1.7 KiB
HTML
<!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>
|