| /* |
| * $HeadURL: https://svn.apache.org/repos/asf/jakarta/commons/proper/httpclient/branches/HTTPCLIENT_3_0_BRANCH/src/test/org/apache/commons/httpclient/TestQueryParameters.java $ |
| * $Revision: 1.1 $ |
| * $Date: 2009/02/13 18:07:48 $ |
| * ==================================================================== |
| * |
| * Copyright 1999-2004 The Apache Software Foundation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * ==================================================================== |
| * |
| * This software consists of voluntary contributions made by many |
| * individuals on behalf of the Apache Software Foundation. For more |
| * information on the Apache Software Foundation, please see |
| * <http://www.apache.org/>. |
| * |
| */ |
| |
| package org.apache.commons.httpclient; |
| |
| import java.io.IOException; |
| |
| import junit.framework.*; |
| import org.apache.commons.httpclient.methods.*; |
| import org.apache.commons.httpclient.server.HttpService; |
| import org.apache.commons.httpclient.server.SimpleRequest; |
| import org.apache.commons.httpclient.server.SimpleResponse; |
| |
| /** |
| * @author Rodney Waldhoff |
| * @version $Id: TestQueryParameters.java,v 1.1 2009/02/13 18:07:48 slewis Exp $ |
| */ |
| public class TestQueryParameters extends HttpClientTestBase { |
| |
| public TestQueryParameters(String testName) throws Exception { |
| super(testName); |
| } |
| |
| public static Test suite() { |
| TestSuite suite = new TestSuite(TestQueryParameters.class); |
| return suite; |
| } |
| |
| public static void main(String args[]) { |
| String[] testCaseName = { TestQueryParameters.class.getName() }; |
| junit.textui.TestRunner.main(testCaseName); |
| } |
| |
| // ------------------------------------------------------------------ Tests |
| |
| class QueryInfoService implements HttpService { |
| |
| public QueryInfoService() { |
| super(); |
| } |
| |
| public boolean process(final SimpleRequest request, final SimpleResponse response) |
| throws IOException |
| { |
| HttpVersion httpversion = request.getRequestLine().getHttpVersion(); |
| response.setStatusLine(httpversion, HttpStatus.SC_OK); |
| response.addHeader(new Header("Content-Type", "text/plain")); |
| |
| URI uri = new URI(request.getRequestLine().getUri(), true); |
| |
| StringBuffer buffer = new StringBuffer(); |
| buffer.append("QueryString=\""); |
| buffer.append(uri.getQuery()); |
| buffer.append("\"\r\n"); |
| response.setBodyString(buffer.toString()); |
| return true; |
| } |
| } |
| |
| /** |
| * Test that {@link GetMethod#setQueryString(java.lang.String)} |
| * can include a leading question mark. |
| */ |
| public void testGetMethodQueryString() throws Exception { |
| this.server.setHttpService(new QueryInfoService()); |
| GetMethod method = new GetMethod("/"); |
| method.setQueryString("?hadQuestionMark=true"); |
| try { |
| this.client.executeMethod(method); |
| assertEquals(200, method.getStatusCode()); |
| String response = method.getResponseBodyAsString(); |
| assertTrue(response.indexOf("QueryString=\"hadQuestionMark=true\"") >= 0); |
| } finally { |
| method.releaseConnection(); |
| } |
| } |
| |
| /** |
| * Test that {@link GetMethod#setQueryString(java.lang.String)} |
| * doesn't have to include a leading question mark. |
| */ |
| public void testGetMethodQueryString2() throws Exception { |
| this.server.setHttpService(new QueryInfoService()); |
| GetMethod method = new GetMethod("/"); |
| method.setQueryString("hadQuestionMark=false"); |
| try { |
| this.client.executeMethod(method); |
| assertEquals(200, method.getStatusCode()); |
| String response = method.getResponseBodyAsString(); |
| assertTrue(response.indexOf("QueryString=\"hadQuestionMark=false\"") >= 0); |
| } finally { |
| method.releaseConnection(); |
| } |
| } |
| |
| /** |
| * Test that {@link GetMethod#addParameter(java.lang.String,java.lang.String)} |
| * values get added to the query string. |
| */ |
| public void testGetMethodParameters() throws Exception { |
| this.server.setHttpService(new QueryInfoService()); |
| GetMethod method = new GetMethod("/"); |
| method.setQueryString(new NameValuePair[] { new NameValuePair("param-one","param-value") }); |
| try { |
| this.client.executeMethod(method); |
| assertEquals(200, method.getStatusCode()); |
| String response = method.getResponseBodyAsString(); |
| assertTrue(response.indexOf("QueryString=\"param-one=param-value\"") >= 0); |
| } finally { |
| method.releaseConnection(); |
| } |
| } |
| |
| /** |
| * Test that {@link GetMethod#addParameter(java.lang.String,java.lang.String)} |
| * works with multiple parameters. |
| */ |
| public void testGetMethodMultiParameters() throws Exception { |
| this.server.setHttpService(new QueryInfoService()); |
| GetMethod method = new GetMethod("/"); |
| method.setQueryString(new NameValuePair[] { |
| new NameValuePair("param-one","param-value"), |
| new NameValuePair("param-two","param-value2"), |
| new NameValuePair("special-chars",":/?~.") |
| }); |
| try { |
| this.client.executeMethod(method); |
| assertEquals(200, method.getStatusCode()); |
| String response = method.getResponseBodyAsString(); |
| assertTrue(response.indexOf("QueryString=\"param-one=param-value¶m-two=param-value2&special-chars=:/?~.\"") >= 0); |
| } finally { |
| method.releaseConnection(); |
| } |
| } |
| |
| /** |
| * Test that {@link GetMethod#addParameter(java.lang.String,java.lang.String)} |
| * works with a parameter name but no value. |
| */ |
| public void testGetMethodParameterWithoutValue() throws Exception { |
| this.server.setHttpService(new QueryInfoService()); |
| GetMethod method = new GetMethod("/"); |
| method.setQueryString(new NameValuePair[] { new NameValuePair("param-without-value", null) }); |
| try { |
| this.client.executeMethod(method); |
| assertEquals(200, method.getStatusCode()); |
| String response = method.getResponseBodyAsString(); |
| assertTrue(response.indexOf("QueryString=\"param-without-value=\"") >= 0); |
| } finally { |
| method.releaseConnection(); |
| } |
| } |
| |
| /** |
| * Test that {@link GetMethod#addParameter(java.lang.String,java.lang.String)} |
| * works with a parameter name that occurs more than once. |
| */ |
| public void testGetMethodParameterAppearsTwice() throws Exception { |
| this.server.setHttpService(new QueryInfoService()); |
| GetMethod method = new GetMethod("/"); |
| method.setQueryString(new NameValuePair[] { |
| new NameValuePair("foo","one"), |
| new NameValuePair("foo","two") |
| }); |
| try { |
| this.client.executeMethod(method); |
| assertEquals(200, method.getStatusCode()); |
| String response = method.getResponseBodyAsString(); |
| assertTrue(response.indexOf("QueryString=\"foo=one&foo=two\"") >= 0); |
| } finally { |
| method.releaseConnection(); |
| } |
| } |
| |
| public void testGetMethodOverwriteQueryString() throws Exception { |
| this.server.setHttpService(new QueryInfoService()); |
| GetMethod method = new GetMethod("/"); |
| method.setQueryString("query=string"); |
| method.setQueryString(new NameValuePair[] { |
| new NameValuePair("param","eter"), |
| new NameValuePair("para","meter") |
| }); |
| try { |
| this.client.executeMethod(method); |
| assertEquals(200, method.getStatusCode()); |
| String response = method.getResponseBodyAsString(); |
| assertFalse(response.indexOf("QueryString=\"query=string\"") >= 0); |
| assertTrue(response.indexOf("QueryString=\"param=eter¶=meter\"") >= 0); |
| } finally { |
| method.releaseConnection(); |
| } |
| } |
| |
| /** |
| * Test that {@link PostMethod#addParameter(java.lang.String,java.lang.String)} |
| * and {@link PostMethod#setQueryString(java.lang.String)} combine |
| * properly. |
| */ |
| public void testPostMethodParameterAndQueryString() throws Exception { |
| this.server.setHttpService(new QueryInfoService()); |
| PostMethod method = new PostMethod("/"); |
| method.setQueryString("query=string"); |
| method.setRequestBody(new NameValuePair[] { |
| new NameValuePair("param","eter"), |
| new NameValuePair("para","meter") } ); |
| try { |
| this.client.executeMethod(method); |
| assertEquals(200, method.getStatusCode()); |
| String response = method.getResponseBodyAsString(); |
| assertTrue(response.indexOf("QueryString=\"query=string\"") >= 0); |
| assertFalse(response.indexOf("QueryString=\"param=eter¶=meter\"") >= 0); |
| } finally { |
| method.releaseConnection(); |
| } |
| } |
| } |
| |