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