blob: e2d1cdedabe1dbca73cccfc39dc863f13a4aac58 [file] [log] [blame]
/*
* $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&param-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&para=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&para=meter\"") >= 0);
} finally {
method.releaseConnection();
}
}
}