You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by js...@apache.org on 2003/01/28 06:17:23 UTC
cvs commit: jakarta-commons/httpclient/src/test/org/apache/commons/httpclient TestURI.java TestNoHost.java
jsdever 2003/01/27 21:17:22
Modified: httpclient/src/java/org/apache/commons/httpclient URI.java
httpclient/src/test/org/apache/commons/httpclient
TestNoHost.java
Added: httpclient/src/test/org/apache/commons/httpclient
TestURI.java
Log:
Fix URI constructor bug when second argument is only a fragment.
- fixes the case when the second arg to URI(URI,URI) is just a fragment
(e.g. "#s"). According to RFC 2396 a relative reference that is just a
fragment should resolve to the "current document" plus the fragment. I
took this to mean that URI( "http://a/b/c/d;p?q", "#s" ) should resolve
to "http://a/b/c/d;p?q#s".
- Added test cases
Contributed By: Michael Becke
Revision Changes Path
1.25 +16 -6 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/URI.java
Index: URI.java
===================================================================
RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/URI.java,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- URI.java 28 Jan 2003 04:40:21 -0000 1.24
+++ URI.java 28 Jan 2003 05:17:21 -0000 1.25
@@ -494,9 +494,19 @@
this._is_rel_path = relative._is_rel_path;
this._path = relative._path;
}
- // resolve the path
+ // resolve the path and query if necessary
if (relative._scheme == null && relative._authority == null) {
- this._path = resolvePath(base._path, relative._path);
+ if (
+ ( relative._path == null || relative._path.length == 0 )
+ && relative._query == null
+ ) {
+ // handle a reference to the current document, see RFC 2396
+ // section 5.2 step 2
+ this._path = base._path;
+ this._query = base._query;
+ } else {
+ this._path = resolvePath(base._path, relative._path);
+ }
}
// base._query removed
if (relative._query != null) {
1.19 +5 -4 jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestNoHost.java
Index: TestNoHost.java
===================================================================
RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestNoHost.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- TestNoHost.java 23 Jan 2003 22:48:27 -0000 1.18
+++ TestNoHost.java 28 Jan 2003 05:17:22 -0000 1.19
@@ -90,6 +90,7 @@
suite.addTest(TestHeaderElement.suite());
suite.addTest(TestAuthenticator.suite());
suite.addTest(TestHttpUrlMethod.suite());
+ suite.addTest(TestURI.suite());
suite.addTest(TestURIUtil.suite());
suite.addTest(TestURIUtil2.suite());
suite.addTest(TestMethodsNoHost.suite());
1.1 jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestURI.java
Index: TestURI.java
===================================================================
/*
* $Header: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestURI.java,v 1.1 2003/01/28 05:17:22 jsdever Exp $
* $Revision: 1.1 $
* $Date: 2003/01/28 05:17:22 $
*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* 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/>.
*
* [Additional notices, if required by prior licensing conditions]
*
*/
package org.apache.commons.httpclient;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
* Simple tests for the URI class.
*
* @author Michael Becke
*/
public class TestURI extends TestNoHost {
/**
* Constructor for TestURI.
* @param testName
*/
public TestURI(String testName) {
super(testName);
}
public static Test suite() {
return new TestSuite(TestURI.class);
}
/**
* Tests the URI(URI, String) constructor. This tests URIs ability to
* resolve relative URIs.
*
* @see URI#URI(URI, String)
*/
public void testRelativeURIConstructor() {
URI baseURI = null;
try {
baseURI = new URI( "http://a/b/c/d;p?q" );
} catch ( URIException e ) {
fail( "unable to create base URI: " + e );
}
// the following is an array of arrays in the following order
// relative URI and resolved( scheme, host, path, query, fragment URI )
//
// these examples were taken from rfc 2396
String[][] testRelativeURIs = {
{ "#s", "http", "a", "/b/c/d;p", "q", "s", "http://a/b/c/d;p?q#s" },
{ "g:h", "g", null, "h", null, null, "g:h" },
{ "g", "http", "a", "/b/c/g", null, null, "http://a/b/c/g" },
{ "./g", "http", "a", "/b/c/g", null, null, "http://a/b/c/g" },
{ "g/", "http", "a", "/b/c/g/", null, null, "http://a/b/c/g/" },
{ "/g", "http", "a", "/g", null, null, "http://a/g" },
{ "//g", "http", "g", null, null, null, "http://g" },
{ "?y", "http", "a", "/b/c/", "y", null, "http://a/b/c/?y" },
{ "g?y", "http", "a", "/b/c/g", "y", null, "http://a/b/c/g?y" },
{ "#s", "http", "a", "/b/c/d;p", "q", "s", "http://a/b/c/d;p?q#s" },
{ "g#s", "http", "a", "/b/c/g", null, "s", "http://a/b/c/g#s" },
{ "g?y#s","http", "a", "/b/c/g", "y", "s", "http://a/b/c/g?y#s" },
{ ";x", "http", "a", "/b/c/;x", null, null, "http://a/b/c/;x" },
{ "g;x", "http", "a", "/b/c/g;x", null, null, "http://a/b/c/g;x" },
{ "g;x?y#s", "http", "a", "/b/c/g;x", "y", "s", "http://a/b/c/g;x?y#s" },
{ ".", "http", "a", "/b/c/", null, null, "http://a/b/c/" },
{ "./", "http", "a", "/b/c/", null, null, "http://a/b/c/" },
{ "..", "http", "a", "/b/", null, null, "http://a/b/" },
{ "../", "http", "a", "/b/", null, null, "http://a/b/" },
{ "../g", "http", "a", "/b/g", null, null, "http://a/b/g" },
{ "../..", "http", "a", "/", null, null, "http://a/" },
{ "../../", "http", "a", "/", null, null, "http://a/" },
{ "../../g", "http", "a", "/g", null, null, "http://a/g" },
};
for (int i = 0; i < testRelativeURIs.length; i++) {
URI testURI = null;
try {
testURI = new URI( baseURI, testRelativeURIs[i][0] );
} catch ( URIException e ) {
fail(
"unable to create URI with relative value("
+ testRelativeURIs[i][0] + "): " + e
);
}
try {
assertEquals( testURI.getScheme(), testRelativeURIs[i][1] );
assertEquals( testURI.getAuthority(), testRelativeURIs[i][2] );
assertEquals( testURI.getPath(), testRelativeURIs[i][3] );
assertEquals( testURI.getQuery(), testRelativeURIs[i][4] );
assertEquals( testURI.getFragment(), testRelativeURIs[i][5] );
assertEquals( testURI.getURIReference(), testRelativeURIs[i][6] );
} catch ( URIException e ) {
fail( "error getting URI property: " + e );
}
}
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>