[HtmlUnit] SVN: [15457] trunk/htmlunit/src
rbri--- via HtmlUnit-develop <[email protected]> Fri, 13 Jul 2018 14:36:17 +0000
| Newsgroups | gmane.comp.java.htmlunit.devel |
|---|---|
| Message-ID | <[email protected]> |
Revision: 15457
http://sourceforge.net/p/htmlunit/code/15457
Author: rbri
Date: 2018-07-13 14:36:14 +0000 (Fri, 13 Jul 2018)
Log Message:
-----------
url encoding has to use UTF-8 as codepage
Modified Paths:
--------------
trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java
trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java
trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/PrimitiveWebServer.java
trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClient2Test.java
trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClient7Test.java
trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlForm2Test.java
trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/MalformedHtml2Test.java
trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/MalformedHtmlTest.java
Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java
===================================================================
--- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2018-07-12 19:10:53 UTC (rev 15456)
+++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2018-07-13 14:36:14 UTC (rev 15457)
@@ -1334,7 +1334,8 @@
WebAssert.notNull("method", method);
WebAssert.notNull("parameters", parameters);
- url = UrlUtils.encodeUrl(url, getBrowserVersion().hasFeature(URL_MINIMAL_QUERY_ENCODING), UTF_8);
+ url = UrlUtils.encodeUrl(url, getBrowserVersion().hasFeature(URL_MINIMAL_QUERY_ENCODING),
+ webRequest.getCharset());
webRequest.setUrl(url);
if (LOG.isDebugEnabled()) {
Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java
===================================================================
--- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java 2018-07-12 19:10:53 UTC (rev 15456)
+++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java 2018-07-13 14:36:14 UTC (rev 15457)
@@ -14,7 +14,7 @@
*/
package com.gargoylesoftware.htmlunit;
-import static java.nio.charset.StandardCharsets.ISO_8859_1;
+import static java.nio.charset.StandardCharsets.UTF_8;
import java.io.IOException;
import java.io.ObjectInputStream;
@@ -62,7 +62,7 @@
private Map<String, String> additionalHeaders_ = new HashMap<>();
private Credentials urlCredentials_;
private Credentials credentials_;
- private transient Charset charset_ = ISO_8859_1;
+ private transient Charset charset_ = UTF_8;
/* These two are mutually exclusive; additionally, requestBody_ should only be set for POST requests. */
private List<NameValuePair> requestParameters_ = Collections.emptyList();
Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/PrimitiveWebServer.java
===================================================================
--- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/PrimitiveWebServer.java 2018-07-12 19:10:53 UTC (rev 15456)
+++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/PrimitiveWebServer.java 2018-07-13 14:36:14 UTC (rev 15457)
@@ -21,6 +21,7 @@
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
+import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -37,6 +38,7 @@
private final String firstResponse_;
private final String otherResponse_;
private ServerSocket server_;
+ private Charset charset_ = StandardCharsets.UTF_8;
private List<String> requests_ = new ArrayList<>();
/**
@@ -95,7 +97,7 @@
response = otherResponse_;
}
first = false;
- out.write(response.getBytes(StandardCharsets.UTF_8));
+ out.write(response.getBytes(charset_));
}
}
}
@@ -131,4 +133,11 @@
public void clearRequests() {
requests_.clear();
}
+
+ /**
+ * @param charset the charset
+ */
+ public void setCharset(final Charset charset) {
+ charset_ = charset;
+ }
}
Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClient2Test.java
===================================================================
--- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClient2Test.java 2018-07-12 19:10:53 UTC (rev 15456)
+++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClient2Test.java 2018-07-13 14:36:14 UTC (rev 15457)
@@ -16,7 +16,6 @@
import static com.gargoylesoftware.htmlunit.httpclient.HtmlUnitBrowserCompatCookieSpec.EMPTY_COOKIE_NAME;
-import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
@@ -28,7 +27,6 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts;
import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.util.Cookie;
@@ -43,18 +41,6 @@
public class WebClient2Test extends SimpleWebTestCase {
/**
- * @throws Exception if an error occurs
- */
- @Test
- @Alerts(DEFAULT = "http://first/?param=%A3",
- IE = "http://first/?param=\u00A3")
- public void encodeURL() throws Exception {
- final String html = "<body onload='alert(window.location.href)'></body>";
- getMockWebConnection().setDefaultResponse(html);
- loadPageWithAlerts(html, new URL("http://first/?param=\u00A3"), -1);
- }
-
- /**
* Test for 3151939. The Browser removes leading '/..' from the path.
* @throws Exception if something goes wrong
*/
Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClient7Test.java
===================================================================
--- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClient7Test.java 2018-07-12 19:10:53 UTC (rev 15456)
+++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClient7Test.java 2018-07-13 14:36:14 UTC (rev 15457)
@@ -17,10 +17,12 @@
import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.IE;
import java.net.URL;
+import java.nio.charset.StandardCharsets;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts;
@@ -121,23 +123,23 @@
* @throws Exception if something goes wrong
*/
@Test
- @Alerts(DEFAULT = "/test.html?param=%C2%A9",
- IE = "/test.html?param=\u00A9")
+ @Alerts(DEFAULT = "/test.html?param=%C2%A9%C2%A3",
+ IE = "/test.html?param=\u00A9\u00A3")
@NotYetImplemented(IE)
public void loadPage_EncodeRequest7() throws Exception {
// unicode
- testRequestUrlEncoding("test.html?param=\u00A9");
+ testRequestUrlEncoding("test.html?param=\u00A9\u00A3");
}
private void testRequestUrlEncoding(final String url) throws Exception {
final String response = "HTTP/1.1 200 OK\r\n"
- + "Content-Length: 2\r\n"
+ + "Content-Length: 58\r\n"
+ "Content-Type: text/html\r\n"
+ "\r\n"
+ "<html><head><title>foo</title></head><body>"
+ "</body></html>";
- primitiveWebServer_ = new PrimitiveWebServer(PORT, response, response);
+ primitiveWebServer_ = new PrimitiveWebServer(PORT, response);
primitiveWebServer_.start();
final WebDriver driver = getWebDriver();
@@ -151,4 +153,97 @@
assertEquals(getExpectedAlerts()[0], reqUrl);
}
+
+ /**
+ * @throws Exception if the test fails
+ */
+ @Test
+ @Alerts(DEFAULT = "/bug.html?k%C3%B6nig",
+ IE = "/bug.html?k\u00c3\u00b6nig")
+ @NotYetImplemented(IE)
+ public void linkUrlEncodingUTF8() throws Exception {
+ final String html = "<html>\n"
+ + "<head><title>foo</title>\n"
+ + " <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>\n"
+ + "</head>\n"
+ + "<body>\n"
+ + " <a id='myLink' href='bug.html?k\u00F6nig'>Click me</a>\n"
+ + "</body></html>";
+
+ final String firstResponse = "HTTP/1.1 200 OK\r\n"
+ + "Content-Length: " + html.length() + "\r\n"
+ + "Content-Type: text/html\r\n"
+ + "\r\n"
+ + html;
+
+ final String response = "HTTP/1.1 200 OK\r\n"
+ + "Content-Length: 2\r\n"
+ + "Content-Type: text/html\r\n"
+ + "\r\n"
+ + "<html><head><title>foo</title></head><body>"
+ + "</body></html>";
+
+ primitiveWebServer_ = new PrimitiveWebServer(PORT, firstResponse, response);
+ primitiveWebServer_.start();
+
+ final WebDriver driver = getWebDriver();
+
+ driver.get(URL_FIRST.toString());
+ driver.findElement(By.id("myLink")).click();
+
+ String reqUrl = primitiveWebServer_.getRequests().get(1);
+ if (reqUrl.contains("/favicon.ico")) {
+ reqUrl = primitiveWebServer_.getRequests().get(2);
+ }
+ reqUrl = reqUrl.substring(4, reqUrl.indexOf("HTTP/1.1") - 1);
+
+ assertEquals(getExpectedAlerts()[0], reqUrl);
+ }
+
+ /**
+ * @throws Exception if the test fails
+ */
+ @Test
+ @Alerts(DEFAULT = "/bug.html?k%F6nig",
+ IE = "/bug.html?k\u00f6nig")
+ @NotYetImplemented(IE)
+ public void linkUrlEncodingISO8859_1() throws Exception {
+ final String html = "<html>\n"
+ + "<head><title>foo</title>\n"
+ + " <meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1'>\n"
+ + "</head>\n"
+ + "<body>\n"
+ + " <a id='myLink' href='bug.html?k\u00F6nig'>Click me</a>\n"
+ + "</body></html>";
+
+ final String firstResponse = "HTTP/1.1 200 OK\r\n"
+ + "Content-Length: " + html.length() + "\r\n"
+ + "Content-Type: text/html\r\n"
+ + "\r\n"
+ + html;
+
+ final String response = "HTTP/1.1 200 OK\r\n"
+ + "Content-Length: 2\r\n"
+ + "Content-Type: text/html\r\n"
+ + "\r\n"
+ + "<html><head><title>foo</title></head><body>"
+ + "</body></html>";
+
+ primitiveWebServer_ = new PrimitiveWebServer(PORT, firstResponse, response);
+ primitiveWebServer_.setCharset(StandardCharsets.ISO_8859_1);
+ primitiveWebServer_.start();
+
+ final WebDriver driver = getWebDriver();
+
+ driver.get(URL_FIRST.toString());
+ driver.findElement(By.id("myLink")).click();
+
+ String reqUrl = primitiveWebServer_.getRequests().get(1);
+ if (reqUrl.contains("/favicon.ico")) {
+ reqUrl = primitiveWebServer_.getRequests().get(2);
+ }
+ reqUrl = reqUrl.substring(4, reqUrl.indexOf("HTTP/1.1") - 1);
+
+ assertEquals(getExpectedAlerts()[0], reqUrl);
+ }
}
Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlForm2Test.java
===================================================================
--- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlForm2Test.java 2018-07-12 19:10:53 UTC (rev 15456)
+++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlForm2Test.java 2018-07-13 14:36:14 UTC (rev 15457)
@@ -46,7 +46,6 @@
import com.gargoylesoftware.htmlunit.FormEncodingType;
import com.gargoylesoftware.htmlunit.HttpHeader;
import com.gargoylesoftware.htmlunit.HttpMethod;
-import com.gargoylesoftware.htmlunit.MockWebConnection;
import com.gargoylesoftware.htmlunit.WebDriverTestCase;
import com.gargoylesoftware.htmlunit.util.NameValuePair;
import com.gargoylesoftware.htmlunit.util.UrlUtils;
@@ -171,35 +170,6 @@
* @throws Exception if the test fails
*/
@Test
- public void linkUrlEncoding() throws Exception {
- final String html = "<html>\n"
- + "<head><title>foo</title>\n"
- + " <meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1'>\n"
- + "</head>\n"
- + "<body>\n"
- + " <a href='bug.html?k\u00F6nig' id='myLink'>Click me</a>\n"
- + "</body></html>";
-
- final MockWebConnection webConnection = getMockWebConnection();
- webConnection.setDefaultResponse(html, "text/html", ISO_8859_1);
-
- final WebDriver driver = loadPage2(html);
- assertEquals(URL_FIRST.toExternalForm(), driver.getCurrentUrl());
- driver.findElement(By.id("myLink")).click();
- final String linkSuffix;
- if (getBrowserVersion().isIE()) {
- linkSuffix = "bug.html?k\u00F6nig";
- }
- else {
- linkSuffix = "bug.html?k%F6nig";
- }
- assertEquals(URL_FIRST + linkSuffix, driver.getCurrentUrl());
- }
-
- /**
- * @throws Exception if the test fails
- */
- @Test
public void base() throws Exception {
final String html
= "<html><head>\n"
Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/MalformedHtml2Test.java
===================================================================
--- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/MalformedHtml2Test.java 2018-07-12 19:10:53 UTC (rev 15456)
+++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/MalformedHtml2Test.java 2018-07-13 14:36:14 UTC (rev 15457)
@@ -30,30 +30,6 @@
public class MalformedHtml2Test extends SimpleWebTestCase {
/**
- * @throws Exception if the test fails
- */
- @Test
- public void incompleteEntities() throws Exception {
- final String html = "<html><head>\n"
- + "<title>Test document</title>\n"
- + "</head><body>\n"
- + "<a href='foo?a=1©=2&prod=3' id='myLink'>my link</a>\n"
- + "</body></html>";
-
- final HtmlPage page = loadPage(html);
- final HtmlPage page2 = page.getAnchors().get(0).click();
-
- final String query;
- if (getBrowserVersion().isIE()) {
- query = "a=1\u00A9=2&prod=3";
- }
- else {
- query = "a=1%A9=2&prod=3";
- }
- assertEquals(query, page2.getUrl().getQuery());
- }
-
- /**
* Regression test for Bug #1018.
* @throws Exception if an error occurs
*/
Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/MalformedHtmlTest.java
===================================================================
--- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/MalformedHtmlTest.java 2018-07-12 19:10:53 UTC (rev 15456)
+++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/MalformedHtmlTest.java 2018-07-13 14:36:14 UTC (rev 15457)
@@ -1090,4 +1090,26 @@
assertEquals(0, webDriver.findElements(By.name("main")).size());
assertEquals(1, webDriver.findElements(By.id("tester")).size());
}
+
+ /**
+ * @throws Exception if the test fails
+ */
+ @Test
+ @Alerts("§§URL§§foo?a=1©=2&prod=3")
+ @NotYetImplemented
+ public void incompleteEntities() throws Exception {
+ final String html = "<html><head>\n"
+ + "<title>Test document</title>\n"
+ + "</head><body>\n"
+ + "<a href='foo?a=1©=2&prod=3' id='myLink'>my link</a>\n"
+ + "</body></html>";
+
+ getMockWebConnection().setDefaultResponse("<html><head><title>foo</title></head><body></body></html>");
+ expandExpectedAlertsVariables(URL_FIRST);
+
+ final WebDriver driver = loadPage2(html);
+ driver.findElement(By.id("myLink")).click();
+
+ assertEquals(getExpectedAlerts()[0], getMockWebConnection().getLastWebRequest().getUrl());
+ }
}
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
HtmlUnit-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/htmlunit-develop