| // |
| // Here is the shared test code among the various navigation tests. The idea is to apply |
| // a number of operation sequences to a variety of navigation techniques. "Operations" |
| // are things like loading a page, or going back or forward. "Navigation techniques" are |
| // things like a HTTP 302 redirect, or the idiom of a POST followed by a redirect. |
| |
| |
| // utility function to fill the test form with some state, simulating the user's input |
| function fillTestForm() { |
| // Add data to form here instead of inside longForm.html, so these settings aren't |
| // also done when we return to that page, so we are sure to test the form state restore. |
| // Currently the state of checkboxes and radio buttons doesn't affect the DumpRenderTree |
| // output, so those settings are moot. |
| testDoc = (window.frames.length == 0) ? document : window.frames['main'].document; |
| testForm = testDoc.getElementById('testform'); |
| testForm.textfield1.value='New form text from user'; |
| testDoc.getElementById('radiooption2').checked=true; |
| testForm.checkbox2.checked=true; |
| testForm.selectgroup1.selectedIndex=2; |
| testForm.textarea1.value='More new form text from user, which should be restored when we return to this page.'; |
| } |
| |
| // utility function to scroll the document down a bit, to test save/restore |
| function scrollDocDown() { |
| testDoc = (window.frames.length == 0) ? document : window.frames['main'].document; |
| testDoc.getElementById('testbody').scrollTop=50; |
| } |
| |
| // utility function to make a form post |
| function submitFormWithPost() { |
| testDoc = (window.frames.length == 0) ? document : window.frames['main'].document; |
| testDoc.getElementById('testform').submitwithpost.click(); |
| } |
| |
| // utility function to make a form post, using the postredirect idiom |
| function submitFormWithPostRedirect() { |
| testDoc = (window.frames.length == 0) ? document : window.frames['main'].document; |
| testDoc.getElementById('testform').submitwithpostredirect.click(); |
| } |
| |
| // utility function to make a form post, using the postredirect idiom |
| function submitFormWithPostRedirectReload() { |
| testDoc = (window.frames.length == 0) ? document : window.frames['main'].document; |
| testDoc.getElementById('testform').submitwithpostredirectreload.click(); |
| } |
| |
| // utility function to do a jump within the page to an anchor |
| function jumpToAnchor() { |
| testWin = (window.frames.length == 0) ? window : window.frames['main']; |
| testWin.location.hash = "anchor1"; |
| } |
| |
| |
| |
| // This is the most basic sequence. Just load the page and verify it worked. |
| // This is used for the non-frames and frames case. |
| // Optionally we will also poke the page to perform a post or jump to an anchor. |
| // |
| // Note most back/forward bugs are due to the b/f list not being created |
| // right during the loading, so this catches a lot of those. |
| // When testCase is a URL with an anchor, or when we queue a jumpToAnchor(), |
| // it's important to check that that we end up scrolled to the right place, |
| // proving the anchor was visited. |
| function runBasicTest(testCase, extraStep) { |
| if (window.testRunner) { |
| testRunner.dumpBackForwardList(); |
| testRunner.queueLoad(testCase); |
| if (extraStep == "post") { |
| testRunner.queueNonLoadingScript("fillTestForm()"); |
| testRunner.queueLoadingScript("submitFormWithPost()"); |
| } else if (extraStep == "postredirect") { |
| testRunner.queueNonLoadingScript("fillTestForm()"); |
| testRunner.queueLoadingScript("submitFormWithPostRedirect()"); |
| } else if (extraStep == "relativeanchor") { |
| testRunner.queueNonLoadingScript("jumpToAnchor()"); |
| } |
| } |
| } |
| |
| // A sequence testing back/forward. Tests that we made it back to |
| // right page, and that the form and scroll state was saved and restored. |
| // This is used for the non-frames and frames case. |
| // Optionally we will also poke the page to perform a post or jump to an anchor. |
| // |
| // When testCase is a URL with an anchor, or when we queue a jumpToAnchor(), |
| // when we go back the scroll set by the user in this sequence should override |
| // the scroll implied by the anchor. |
| // When we POST it is interesting to test going back to the post result, |
| // and going back 2 pages to the original form. |
| function runBackTest(testCase, howFarBack, extraStep) { |
| if (window.testRunner) { |
| testRunner.dumpBackForwardList(); |
| testRunner.queueLoad(testCase); |
| testRunner.queueNonLoadingScript("fillTestForm()"); |
| testRunner.queueNonLoadingScript("scrollDocDown()"); |
| if (extraStep == "post") { |
| testRunner.queueLoadingScript("submitFormWithPost()"); |
| } else if (extraStep == "postredirect") { |
| testRunner.queueLoadingScript("submitFormWithPostRedirect()"); |
| } else if (extraStep == "relativeanchor") { |
| testRunner.queueNonLoadingScript("jumpToAnchor()"); |
| } |
| testRunner.queueLoad("resources/otherpage.html"); |
| testRunner.queueBackNavigation(howFarBack); |
| } |
| } |
| |
| // A sequence testing frames, where the given nav technique is used to |
| // load a single child frame, after the load of the whole frameset. |
| function runLoadChildFrameTest(testCase) { |
| if (window.testRunner) { |
| testRunner.dumpBackForwardList(); |
| testRunner.queueLoad("resources/frameset.pl?frameURL=otherpage.html"); |
| testRunner.queueLoad(testCase, "main"); |
| } |
| } |
| |
| // A sequence testing frames, where the given nav technique is used to |
| // load a single child frame, and then we go back to that point to check |
| // state save/restore. Some browsers do not let you restablish the |
| // set of subframes you were viewing when you go back in a case like this. |
| function runLoadChildFrameBackTest(testCase) { |
| if (window.testRunner) { |
| testRunner.dumpBackForwardList(); |
| testRunner.queueLoad("resources/frameset.pl?frameURL=otherpage.html"); |
| testRunner.queueLoad(testCase, "main"); |
| testRunner.queueNonLoadingScript("fillTestForm()"); |
| testRunner.queueNonLoadingScript("scrollDocDown()"); |
| testRunner.queueLoad("resources/otherpage.html"); |
| testRunner.queueBackNavigation(1); |
| } |
| } |
| |
| |
| // A sequence testing reload. The goals are that form state is cleared, |
| // scroll state is restored, and nothing is added to b/f list. |
| function runReloadTest(testCase) { |
| if (window.testRunner) { |
| testRunner.dumpBackForwardList(); |
| testRunner.queueLoad(testCase); |
| testRunner.queueNonLoadingScript("fillTestForm()"); |
| testRunner.queueNonLoadingScript("scrollDocDown()"); |
| testRunner.queueReload(); |
| } |
| } |
| |
| // A sequence testing the repeated load of the same URL, not via the reload |
| // button (e.g., the user hits return in the location field). It was decided |
| // that this case should not preserve scroll state or form state, and not add |
| // anything to the b/f list. |
| function runLoadSameTest(testCase) { |
| testRunner.dumpBackForwardList(); |
| testRunner.queueLoad(testCase); |
| testRunner.queueNonLoadingScript("fillTestForm()"); |
| testRunner.queueNonLoadingScript("scrollDocDown()"); |
| testRunner.queueLoad(testCase); |
| } |
| |
| // A sequence testing a reload after a redirect. The goal is to check |
| // that in a reload we use the method set by the redirect, GET, |
| // instead of the original one, POST. |
| function runRedirectReloadTest(testCase) { |
| testRunner.dumpBackForwardList(); |
| testRunner.queueLoad(testCase); |
| testRunner.queueLoadingScript("submitFormWithPostRedirectReload()"); |
| testRunner.queueReload(); |
| } |