131 lines
3.9 KiB
HTML
131 lines
3.9 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<body>
|
|
<p>This tests that changing selection in an iframe does not fire selectionchange event in the parent document and vice versa.</p>
|
|
<div id="container">
|
|
<iframe id="child" src="about:blank"></iframe>
|
|
<div id="parent">WebKit rocks</div>
|
|
</div>
|
|
<ul id="console">
|
|
</ul>
|
|
<script>
|
|
|
|
var parent = document.getElementById('parent');
|
|
var child = document.getElementById('child');
|
|
var childDocument = (child.contentWindow || child.contentDocument).document;
|
|
if (!childDocument.body)
|
|
childDocument.appendChild(document.createElement('body'));
|
|
childDocument.body.innerHTML = 'hello world';
|
|
|
|
var selectionOfParent = window.getSelection();
|
|
var selectionOfChild = child.contentDocument.getSelection();
|
|
|
|
tests = [
|
|
{
|
|
selector: function() {
|
|
selectionOfParent.selectAllChildren(document.body);
|
|
return "all of parent's document body";
|
|
},
|
|
expected: 'parent',
|
|
alt_expected: null,
|
|
},
|
|
{
|
|
selector: function() {
|
|
selectionOfChild.selectAllChildren(childDocument.body);
|
|
return "all of parent's document body";
|
|
},
|
|
expected: 'child',
|
|
alt_expected: null,
|
|
},
|
|
{
|
|
selector: function() {
|
|
var range = document.createRange();
|
|
range.setStart(parent.firstChild, 7);
|
|
range.setEnd(parent.firstChild, 12);
|
|
selectionOfParent.removeAllRanges();
|
|
selectionOfParent.addRange(range);
|
|
return '"rocks" of "WebKit rocks" in the parent';
|
|
},
|
|
expected: 'parent, parent',
|
|
alt_expected: 'parent',
|
|
},
|
|
{
|
|
selector: function() {
|
|
var range = childDocument.createRange();
|
|
range.setStart(childDocument.body.firstChild, 6);
|
|
range.setEnd(childDocument.body.firstChild, 11);
|
|
selectionOfChild.removeAllRanges();
|
|
selectionOfChild.addRange(range);
|
|
return '"world" of "hello world" in the child';
|
|
},
|
|
expected: 'child, child',
|
|
alt_expected: 'child',
|
|
}
|
|
];
|
|
var i = 0;
|
|
var selected = null;
|
|
|
|
if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
testRunner.waitUntilDone();
|
|
}
|
|
|
|
var log = [];
|
|
|
|
function logger(event) {
|
|
if (event.target == childDocument)
|
|
log.push('child');
|
|
else if (event.target == document)
|
|
log.push('parent');
|
|
else
|
|
log.push('unknown');
|
|
}
|
|
|
|
function verify(selected, expected, alt_expected) {
|
|
setTimeout(function () {
|
|
var actual = log.length ? '' : 'none';
|
|
for (var i = 0; i < log.length; i++) {
|
|
if (actual.length)
|
|
actual += ', ';
|
|
actual += log[i];
|
|
}
|
|
var result = 'selecting ' + selected + ' fired selection change events from ' + actual;
|
|
if (actual == expected || actual == alt_expected)
|
|
result = 'PASS: ' + result;
|
|
else
|
|
result = 'FAIL: ' + result + ' but expected ' + expected + (alt_expected ? ' or ' + alt_expected : '');
|
|
var console = document.getElementById('console');
|
|
var listItem = document.createElement('li');
|
|
console.appendChild(listItem);
|
|
listItem.appendChild(document.createTextNode(result));
|
|
}, 0);
|
|
}
|
|
|
|
// selects and verify in turn until all tests are ran
|
|
function timer() {
|
|
if (!selected) {
|
|
log = [];
|
|
selected = tests[i].selector();
|
|
} else {
|
|
verify(selected, tests[i].expected, tests[i].alt_expected);
|
|
selected = null;
|
|
i++;
|
|
if (i == tests.length) {
|
|
if (window.testRunner)
|
|
document.getElementById('container').style.display = 'none';
|
|
testRunner.notifyDone();
|
|
return;
|
|
}
|
|
}
|
|
setTimeout(timer, 0);
|
|
}
|
|
|
|
document.addEventListener('selectionchange', logger, false);
|
|
childDocument.onselectionchange = logger;
|
|
|
|
timer();
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|