| <!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> |