[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&copy=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&copy=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&copy=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