Complement for WICKET-4664

Update on Url#getQueryString(), the result is now on par with the ones returned 
by HttpServletRequest :

  * does not contain the leading "?"
  * returns null when no query parameter is present


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/ff4ebd89
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/ff4ebd89
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/ff4ebd89

Branch: refs/heads/wicket-4774
Commit: ff4ebd898e1f6a88979fb5a5bb078498e391adaa
Parents: 96832b4
Author: Cedric Gatay <[email protected]>
Authored: Wed May 1 18:31:45 2013 +0200
Committer: Cedric Gatay <[email protected]>
Committed: Wed May 1 18:31:45 2013 +0200

----------------------------------------------------------------------
 .../http/mock/MockHttpServletRequestTest.java      |   20 ++++++++-
 .../main/java/org/apache/wicket/request/Url.java   |   31 ++++++++++----
 2 files changed, 39 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ff4ebd89/wicket-core/src/test/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequestTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequestTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequestTest.java
index f8d7dc7..46e12d3 100755
--- 
a/wicket-core/src/test/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequestTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequestTest.java
@@ -50,7 +50,7 @@ public class MockHttpServletRequestTest extends WicketTestCase
                assertEquals("myhost.mydomain.org", url.getHost());
                assertEquals(new Integer(1234), url.getPort());
                assertEquals("/foo/bar/baz.html", url.getPath());
-               assertEquals("?a=123&b=456", url.getQueryString());
+               assertEquals("a=123&b=456", url.getQueryString());
 
                String pathInfo = request.getPathInfo();
                assertEquals("/foo/bar/baz.html", pathInfo);
@@ -75,7 +75,7 @@ public class MockHttpServletRequestTest extends WicketTestCase
                assertEquals("localhost", url.getHost());
                assertEquals(new Integer(80), url.getPort());
                assertEquals("/foo/bar/baz.html", url.getPath());
-               assertEquals("?a=123&b=456", url.getQueryString());
+               assertEquals("a=123&b=456", url.getQueryString());
 
                String pathInfo = request.getPathInfo();
                assertEquals("/foo/bar/baz.html", pathInfo);
@@ -100,11 +100,25 @@ public class MockHttpServletRequestTest extends 
WicketTestCase
                assertEquals("localhost", url.getHost());
                assertEquals(new Integer(80), url.getPort());
                assertEquals(request.getContextPath() + 
request.getServletPath() + "/foo/bar/baz.html", url.getPath());
-               assertEquals("?a=123&b=456", url.getQueryString());
+               assertEquals("a=123&b=456", url.getQueryString());
 
                String pathInfo = request.getPathInfo();
                assertEquals("/foo/bar/baz.html", pathInfo);
        }
+
+    /**
+     * WICKET-4664 - no query string returns null as per HttpServletRequest
+     */
+    @Test
+    public void testNoQueryString_returnsNull()
+    {
+        WicketTester tester = new WicketTester();
+        MockHttpServletRequest request = tester.getRequest();
+        request.setURL("my/servlet/without/query/param");
+        
+        Url url = request.getUrl();
+        assertNull(url.getQueryString());
+    }
        
        @Test
        public void getSessionFromNonMockHttpSession()

http://git-wip-us.apache.org/repos/asf/wicket/blob/ff4ebd89/wicket-request/src/main/java/org/apache/wicket/request/Url.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/Url.java 
b/wicket-request/src/main/java/org/apache/wicket/request/Url.java
index 5297857..c9ddc69 100755
--- a/wicket-request/src/main/java/org/apache/wicket/request/Url.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/Url.java
@@ -1125,27 +1125,40 @@ public class Url implements Serializable
         * 
         * @param charset
         *            character set for encoding
-        * 
-        * @return query string
+        * @since Wicket 7 
+     *            the return value does not contain any "?" and could be null
+        * @return query string (null if empty)
         */
        public String getQueryString(Charset charset)
        {
                Args.notNull(charset, "charset");
 
-               StringBuilder query = new StringBuilder();
+               String queryString = null;
+               List<QueryParameter> queryParameters = getQueryParameters();
 
-               for (QueryParameter parameter : getQueryParameters())
+               if (queryParameters.size() != 0)
                {
-                       query.append(query.length() == 0 ? '?' : '&');
-                       query.append(parameter.toString(charset));
+                       StringBuilder query = new StringBuilder();
+
+                       for (QueryParameter parameter : queryParameters)
+                       {
+                               if (query.length() != 0)
+                               {
+                                       query.append('&');
+                               }
+                               query.append(parameter.toString(charset));
+                       }
+                       queryString = query.toString();
                }
-               return query.toString();
+               return queryString;
        }
 
        /**
         * return query string part of url in original encoding
-        * 
-        * @return query string
+     * 
+     * @since Wicket 7 
+     *              the return value does not contain any "?" and could be null
+        * @return query string (null if empty)
         */
        public String getQueryString()
        {

Reply via email to