1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit;
16
17 import org.htmlunit.html.HtmlPage;
18 import org.htmlunit.junit.BrowserRunner;
19 import org.junit.Test;
20 import org.junit.runner.RunWith;
21
22
23
24
25
26
27 @RunWith(BrowserRunner.class)
28 public final class WaitingRefreshHandlerTest extends SimpleWebTestCase {
29
30
31
32
33
34 @Test
35 public void refreshOnJavascriptThread() throws Exception {
36 final String firstContent = DOCTYPE_HTML
37 + "<html>\n"
38 + "<head><title>First Page</title>\n"
39 + "<script>\n"
40 + "function doRedirect() {\n"
41 + " window.location.href = '" + URL_SECOND + "';\n"
42 + "}\n"
43 + "</script>\n"
44 + "</head>\n"
45 + "<body onload='setTimeout(doRedirect, 1);'>first page body</body>\n"
46 + "</html>";
47 final String secondContent = DOCTYPE_HTML
48 + "<html>\n"
49 + "<head><title>Meta Redirect Page</title>\n"
50 + "<meta http-equiv='Refresh' content='1; URL=" + URL_THIRD + "'>\n"
51 + "</head>\n"
52 + "<body>redirect page body</body>\n"
53 + "</html>";
54 final String thirdContent = DOCTYPE_HTML
55 + "<html>\n"
56 + "<head><title>Expected Last Page</title></head>\n"
57 + "<body>Success!</body>\n"
58 + "</html>";
59
60 final WebClient client = getWebClientWithMockWebConnection();
61 final MockWebConnection conn = getMockWebConnection();
62 conn.setResponse(URL_FIRST, firstContent);
63 conn.setResponse(URL_SECOND, secondContent);
64 conn.setResponse(URL_THIRD, thirdContent);
65 client.setRefreshHandler(new WaitingRefreshHandler(0));
66
67 client.getPage(URL_FIRST);
68 assertEquals(0, client.waitForBackgroundJavaScriptStartingBefore(1000));
69 final HtmlPage pageAfterWait = (HtmlPage) client.getCurrentWindow().getEnclosedPage();
70 assertEquals("Expected Last Page", pageAfterWait.getTitleText());
71 }
72 }