From: <rb...@us...> - 2013-11-23 21:45:28
|
Revision: 8801 http://sourceforge.net/p/htmlunit/code/8801 Author: rbri Date: 2013-11-23 21:45:25 +0000 (Sat, 23 Nov 2013) Log Message: ----------- next fix for url creation when submitting a form (still not finished) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/PageReloadTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java 2013-11-23 19:29:31 UTC (rev 8800) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java 2013-11-23 21:45:25 UTC (rev 8801) @@ -165,41 +165,46 @@ final BrowserVersion browser = getPage().getWebClient().getBrowserVersion(); String actionUrl = getActionAttribute(); + String anchor = ""; + String queryFromFields = ""; if (HttpMethod.GET == method) { - final String anchor = StringUtils.substringAfter(actionUrl, "#"); + anchor = StringUtils.substringAfter(actionUrl, "#"); final String enc = getPage().getPageEncoding(); - final String queryFromFields = + queryFromFields = URLEncodedUtils.format(Arrays.asList(NameValuePair.toHttpClient(parameters)), enc); // action may already contain some query parameters: they have to be removed actionUrl = StringUtils.substringBefore(actionUrl, "#"); actionUrl = StringUtils.substringBefore(actionUrl, "?"); - if (queryFromFields.length() > 0) { - actionUrl += "?" + queryFromFields; - } - if (anchor.length() > 0 - && !browser.hasFeature(FORM_SUBMISSION_URL_WITHOUT_HASH)) { - actionUrl += "#" + anchor; - } parameters.clear(); // parameters have been added to query } URL url; try { if (actionUrl.isEmpty()) { - url = htmlPage.getUrl(); - if (browser.hasFeature(FORM_SUBMISSION_URL_WITHOUT_HASH)) { - url = UrlUtils.getUrlWithNewRef(url, null); - } + url = WebClient.expandUrl(htmlPage.getUrl(), actionUrl); } - else if (actionUrl.startsWith("?") || actionUrl.startsWith("#")) { - String urlString = htmlPage.getUrl().toExternalForm(); - urlString = StringUtils.substringBefore(urlString, "#"); - urlString = StringUtils.substringBefore(urlString, "?"); - url = new URL(urlString + actionUrl); - } else { url = htmlPage.getFullyQualifiedUrl(actionUrl); } + + if (queryFromFields.length() > 0) { + url = UrlUtils.getUrlWithNewQuery(url, queryFromFields); + } + + if (HttpMethod.GET == method && browser.hasFeature(FORM_SUBMISSION_URL_WITHOUT_HASH) + && WebClient.URL_ABOUT_BLANK != url) { + url = UrlUtils.getUrlWithNewRef(url, null); + } + else if (HttpMethod.POST == method + && browser.hasFeature(FORM_SUBMISSION_URL_WITHOUT_HASH) + && WebClient.URL_ABOUT_BLANK != url + && StringUtils.isEmpty(actionUrl)) { + url = UrlUtils.getUrlWithNewRef(url, null); + } + else if (anchor.length() > 0 + && WebClient.URL_ABOUT_BLANK != url) { + url = UrlUtils.getUrlWithNewRef(url, anchor); + } } catch (final MalformedURLException e) { throw new IllegalArgumentException("Not a valid url: " + actionUrl); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/PageReloadTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/PageReloadTest.java 2013-11-23 19:29:31 UTC (rev 8800) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/PageReloadTest.java 2013-11-23 21:45:25 UTC (rev 8801) @@ -497,7 +497,6 @@ */ @Test @Alerts(DEFAULT = ANCHOR, IE = "") - @NotYetImplemented(Browser.FF) public void submitGetV_urlHash_emptyUrl() throws Exception { openUrlAndClickById("http://localhost:" + PORT + "/reload.html#anchor", "submitGetEmptyV", 1, PATHNAME, getExpectedAlerts()[0]); @@ -1087,7 +1086,6 @@ */ @Test @Alerts(DEFAULT = ANCHOR, IE = "") - @NotYetImplemented(Browser.FF) public void jsSubmitGetV_urlHash_emptyUrl() throws Exception { openUrlAndClickById("http://localhost:" + PORT + "/reload.html#anchor", "jsSubmitGetEmptyV", 1, PATHNAME, getExpectedAlerts()[0]); |