From: <mgu...@us...> - 2009-10-29 22:59:00
|
Revision: 5140 http://htmlunit.svn.sourceforge.net/htmlunit/?rev=5140&view=rev Author: mguillem Date: 2009-10-29 22:58:48 +0000 (Thu, 29 Oct 2009) Log Message: ----------- Meta refresh: handle space as separator between delay and url. Issue 2888604 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlPageTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2009-10-29 22:06:46 UTC (rev 5139) +++ trunk/htmlunit/src/changes/changes.xml 2009-10-29 22:58:48 UTC (rev 5140) @@ -6,6 +6,9 @@ <body> <release version="2.7" date="?" description="Bugfixes, initial IE8 support, HttpClient 4 migration"> + <action type="fix" dev="mguillem" issue="2888604"> + Meta refresh: handle space as separator between delay and url. + </action> <action type="fix" dev="mguillem" issue="2888289"> JavaScript: events focus and blur don't apply to all kind of HTML elements. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java 2009-10-29 22:06:46 UTC (rev 5139) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java 2009-10-29 22:58:48 UTC (rev 5140) @@ -1169,7 +1169,7 @@ final double time; final URL url; - int index = refreshString.indexOf(";"); + int index = StringUtils.indexOfAnyBut(refreshString, "0123456789"); final boolean timeOnly = (index == -1); if (timeOnly) { @@ -1234,15 +1234,12 @@ /** * Returns an auto-refresh string if specified. This will look in both the meta - * tags (taking care of <noscript> if any) and inside the HTTP response headers. + * tags and inside the HTTP response headers. * @return the auto-refresh string */ private String getRefreshStringOrNull() { - final boolean javaScriptEnabled = getWebClient().isJavaScriptEnabled(); for (final HtmlMeta meta : getMetaTags("refresh")) { - if ((!javaScriptEnabled || getFirstParent(meta, HtmlNoScript.TAG_NAME) == null)) { - return meta.getContentAttribute(); - } + return meta.getContentAttribute().trim(); } return getWebResponse().getResponseHeaderValue("Refresh"); } @@ -1287,25 +1284,6 @@ } /** - * Returns the first parent with the specified node name, or <tt>null</tt> if no parent - * with the specified node name can be found. - * - * @param node the node to start with - * @param nodeName the name of the search node - * @return the first parent with the specified node name - */ - private DomNode getFirstParent(final DomNode node, final String nodeName) { - DomNode parent = node.getParentNode(); - while (parent != null) { - if (parent.getNodeName().equals(nodeName)) { - return parent; - } - parent = parent.getParentNode(); - } - return null; - } - - /** * Deregister frames that are no longer in use. */ public void deregisterFramesIfNeeded() { Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlPageTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlPageTest.java 2009-10-29 22:06:46 UTC (rev 5139) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlPageTest.java 2009-10-29 22:58:48 UTC (rev 5140) @@ -679,21 +679,7 @@ */ @Test public void testRefresh_MetaTag_DefaultRefreshHandler() throws Exception { - final String firstContent = "<html><head><title>first</title>\n" - + "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"3;URL=" + URL_SECOND + "\">\n" - + "</head><body></body></html>"; - final String secondContent = "<html><head><title>second</title></head><body></body></html>"; - - final WebClient client = new WebClient(); - - final MockWebConnection webConnection = new MockWebConnection(); - webConnection.setResponse(URL_FIRST, firstContent); - webConnection.setResponse(URL_SECOND, secondContent); - client.setWebConnection(webConnection); - - final HtmlPage page = client.getPage(URL_FIRST); - - assertEquals("second", page.getTitleText()); + testRefresh_MetaTag("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"3;URL=§§URL§§\">"); } /** @@ -701,21 +687,17 @@ */ @Test public void testRefresh_MetaTag_caseSensitivity() throws Exception { - final String firstContent = "<html><head><title>first</title>\n" - + "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"3;Url=" + URL_SECOND + "\">\n" - + "</head><body></body></html>"; - final String secondContent = "<html><head><title>second</title></head><body></body></html>"; + testRefresh_MetaTag("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"3;Url=§§URL§§\">"); + } - final WebClient client = new WebClient(); - - final MockWebConnection webConnection = new MockWebConnection(); - webConnection.setResponse(URL_FIRST, firstContent); - webConnection.setResponse(URL_SECOND, secondContent); - client.setWebConnection(webConnection); - - final HtmlPage page = client.getPage(URL_FIRST); - - assertEquals("second", page.getTitleText()); + /** + * Regression test for bug 2888604. + * @throws Exception if the test fails + */ + @Test + public void testRefresh_MetaTag_spaceSeparator() throws Exception { + testRefresh_MetaTag("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"3 Url=§§URL§§\">"); + testRefresh_MetaTag("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"3\nUrl=§§URL§§\">"); } /** @@ -774,21 +756,7 @@ */ @Test public void testRefresh_MetaTagQuoted() throws Exception { - final String firstContent = "<html><head><title>first</title>\n" - + "<META HTTP-EQUIV='Refresh' CONTENT='0;URL=\"" + URL_SECOND + "\"'>\n" - + "</head><body></body></html>"; - final String secondContent = "<html><head><title>second</title></head><body></body></html>"; - - final WebClient client = new WebClient(); - - final MockWebConnection webConnection = new MockWebConnection(); - webConnection.setResponse(URL_FIRST, firstContent); - webConnection.setResponse(URL_SECOND, secondContent); - client.setWebConnection(webConnection); - - final HtmlPage page = client.getPage(URL_FIRST); - - assertEquals("second", page.getTitleText()); + testRefresh_MetaTag("<META HTTP-EQUIV='Refresh' CONTENT='0;URL=\"§§URL§§\"'>"); } /** @@ -797,7 +765,12 @@ */ @Test public void testRefresh_MetaTagPartlyQuoted() throws Exception { + testRefresh_MetaTag("<META HTTP-EQUIV='Refresh' CONTENT=\"0;URL='§§URL§§\">"); + } + + private void testRefresh_MetaTag(final String metaTag) throws Exception { final String firstContent = "<html><head><title>first</title>\n" + + metaTag.replace("§§URL§§", URL_SECOND.toString()) + "\n" + "<META HTTP-EQUIV='Refresh' CONTENT=\"0;URL='" + URL_SECOND + "\">\n" + "</head><body></body></html>"; final String secondContent = "<html><head><title>second</title></head><body></body></html>"; @@ -879,21 +852,7 @@ */ @Test public void testRefresh_MetaTag_Whitespace() throws Exception { - final String firstContent = "<html><head><title>first</title>\n" - + "<META HTTP-EQUIV='Refresh' CONTENT='0 ; URL=" + URL_SECOND + "'>\n" - + "</head><body></body></html>"; - final String secondContent = "<html><head><title>second</title></head><body></body></html>"; - - final WebClient client = new WebClient(); - - final MockWebConnection webConnection = new MockWebConnection(); - webConnection.setResponse(URL_FIRST, firstContent); - webConnection.setResponse(URL_SECOND, secondContent); - client.setWebConnection(webConnection); - - final HtmlPage page = client.getPage(URL_FIRST); - - assertEquals("second", page.getTitleText()); + testRefresh_MetaTag("<META HTTP-EQUIV='Refresh' CONTENT='0 ; URL=§§URL§§'>"); } /** @@ -903,19 +862,7 @@ */ @Test public void testRefresh_MetaTag_Double() throws Exception { - final String html1 = "<html><head><title>first</title>\n" - + "<META HTTP-EQUIV='Refresh' CONTENT='1.2 ; URL=" + URL_SECOND + "'>\n" - + "</head><body></body></html>"; - final String html2 = "<html><head><title>second</title></head><body>abc</body></html>"; - - final WebClient client = new WebClient(); - final MockWebConnection webConnection = new MockWebConnection(); - webConnection.setResponse(URL_FIRST, html1); - webConnection.setResponse(URL_SECOND, html2); - client.setWebConnection(webConnection); - - final HtmlPage page = client.getPage(URL_FIRST); - assertEquals("second", page.getTitleText()); + testRefresh_MetaTag("<META HTTP-EQUIV='Refresh' CONTENT='1.2 ; URL=§§URL§§'>"); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |