blob: ec48143c6f00d2751549709123b7a4c331086ade [file] [log] [blame]
<!DOCTYPE html>
<script>
function expect(test, msg) {
if (test)
return true;
log.innerText = 'FAIL: expected ' + msg;
testRunner.notifyDone();
return false;
}
function testBackspaceNavigatesBack() {
eventSender.keyDown('\u0008');
// We expected to navigate; set a timeout that causes the test
// to fail quickly if we didn't navigate.
setTimeout(function() {
expect(false, 'navigation back');
}, 500);
}
function doStep(step, location) {
// This function is called on each page load.
// 'step' increases with each page load, while 'location' is the query param for the page load.
// Since we go back and forwards, we assert that 'location' is what we expect upon the entry to each step.
switch (step) {
case 0:
document.location = '?test-start';
break;
case 1:
if (!expect(location == 'test-start', 'navigation to test-start'))
return;
document.location = '?test-mac';
break;
case 2:
if (!expect(location == 'test-mac', 'navigation to test-mac'))
return;
internals.settings.setEditingBehavior('mac');
testBackspaceNavigatesBack();
break;
case 3:
if (!expect(location == 'test-start', 'navigation back to test-start'))
return;
document.location = '?test-win';
break;
case 4:
if (!expect(location == 'test-win', 'navigation to test-win'))
return;
internals.settings.setEditingBehavior('win');
testBackspaceNavigatesBack();
break;
case 5:
if (!expect(location == 'test-start', 'navigation back to test-start'))
return;
document.location = '?test-unix';
break;
case 6:
if (!expect(location == 'test-unix', 'navigation to test-unix'))
return;
// Test unix behavior: that backspace does not go back.
internals.settings.setEditingBehavior('unix');
// We expect backspace to *not* navigate.
// Start a navigation to the success page; if backspace causes us to go back,
// it will cancel that navigation and navigate us elsewhere, causing the test
// to fail.
document.location = '?test-complete';
eventSender.keyDown('\u0008');
break;
case 7:
if (!expect(location == 'test-complete', 'navigation to test-complete'))
return;
log.innerText += 'PASS: test complete';
sessionStorage.removeItem('step');
testRunner.notifyDone();
}
}
window.onpageshow = function() {
if (!window.testRunner || !window.eventSender || !window.internals) {
log.innerText =
'This test requires eventSender, testRunner and window.internals. ' +
'It cannot be run manually.';
return;
}
if (!location.search) {
sessionStorage.step = 0;
testRunner.dumpAsText();
testRunner.clearBackForwardList();
testRunner.waitUntilDone();
}
setTimeout(function() {
doStep(sessionStorage.step++, location.search.substring(1));
}, 0)
}
</script>
<body>This test passes if it says PASS below.
<div id=log></div>
</body>