Repository: incubator-juneau Updated Branches: refs/heads/master 953f1d9e3 -> cdebb74d7
Tests for UriContext class. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/cdebb74d Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/cdebb74d Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/cdebb74d Branch: refs/heads/master Commit: cdebb74d7a5d8a48be9eacf8e21802dad179d780 Parents: 953f1d9 Author: JamesBognar <[email protected]> Authored: Wed May 24 09:49:37 2017 -0400 Committer: JamesBognar <[email protected]> Committed: Wed May 24 09:49:37 2017 -0400 ---------------------------------------------------------------------- .../test/java/org/apache/juneau/TestUtils.java | 2 + .../utils/UriContextResolutionComboTest.java | 1632 +++++++++++------- .../juneau/utils/UriContextUriComboTest.java | 445 ++--- .../main/java/org/apache/juneau/UriContext.java | 21 +- .../org/apache/juneau/internal/StringUtils.java | 14 +- 5 files changed, 1301 insertions(+), 813 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/cdebb74d/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java ---------------------------------------------------------------------- diff --git a/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java b/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java index 4405efd..c53e3bf 100755 --- a/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java +++ b/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java @@ -497,6 +497,8 @@ public class TestUtils { * Same as {@link Assert#assertEquals(String,String,String) except takes in a MessageFormat-style message. */ public static void assertEquals(Object expected, Object actual, String msg, Object...args) { + if ("xxx".equals(expected)) + System.err.println("actual=["+actual+"]"); if (! isEquals(expected, actual)) throw new ComparisonFailure(MessageFormat.format(msg, args), toString(expected), toString(actual)); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/cdebb74d/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextResolutionComboTest.java ---------------------------------------------------------------------- diff --git a/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextResolutionComboTest.java b/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextResolutionComboTest.java index e6bf460..2995cf6 100644 --- a/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextResolutionComboTest.java +++ b/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextResolutionComboTest.java @@ -12,6 +12,13 @@ // *************************************************************************************************************************** package org.apache.juneau.utils; +import static org.apache.juneau.TestUtils.*; +import static org.apache.juneau.UriRelativity.*; +import static org.apache.juneau.UriResolution.*; + +import java.util.*; + +import org.apache.juneau.*; import org.junit.*; import org.junit.runner.*; import org.junit.runners.*; @@ -21,607 +28,1028 @@ import org.junit.runners.*; */ @RunWith(Parameterized.class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -@Ignore public class UriContextResolutionComboTest { -// -// @Parameterized.Parameters -// public static Collection<Object[]> getInput() { -// return Arrays.asList(new Object[][] { -// -// // Happy cases - All URL parts known. -// { -// input( -// "Happy-1", -// "http://host:port","/context","/resource","/path", -// "http://foo.com:123/foobar", -// "http://foo.com:123/foobar", -// "http://foo.com:123/foobar" -// ) -// }, -// { -// input( -// "Happy-2", -// "http://host:port","/context","/resource","/path", -// "http://foo.com:123", -// "http://foo.com:123", -// "http://foo.com:123" -// ) -// }, -// { -// input( -// "Happy-3", -// "http://host:port","/context","/resource","/path", -// "/foobar", -// "http://host:port/foobar", -// "/foobar" -// ) -// }, -// { -// input( -// "Happy-4", -// "http://host:port","/context","/resource","/path", -// "/", -// "http://host:port", -// "/" -// ) -// }, -// { -// input( -// "Happy-5", -// "http://host:port","/context","/resource","/path", -// "foobar", -// "http://host:port/context/resource/foobar", -// "/context/resource/foobar" -// ) -// }, -// { -// input( -// "Happy-6", -// "http://host:port","/context","/resource","/path", -// "", -// "http://host:port/context/resource/path", -// "/context/resource/path" -// ) -// }, -// { -// input( -// "Happy-7", -// "http://host:port","/context","/resource","/path", -// "context:/foo", -// "http://host:port/context/foo", -// "/context/foo" -// ) -// }, -// { -// input( -// "Happy-8", -// "http://host:port","/context","/resource","/path", -// "context:/", -// "http://host:port/context", -// "/context" -// ) -// }, -// { -// input( -// "Happy-9", -// "http://host:port","/context","/resource","/path", -// "servlet:/foo", -// "http://host:port/context/resource/foo", -// "/context/resource/foo" -// ) -// }, -// { -// input( -// "Happy-10", -// "http://host:port","/context","/resource","/path", -// "servlet:/", -// "http://host:port/context/resource", -// "/context/resource" -// ) -// }, -// -// // Multiple context and resource parts -// { -// input( -// "MultiContextResource-1", -// "http://host:port","/c1/c2","/r1/r2","/p1/p2", -// "http://foo.com:123/foobar", -// "http://foo.com:123/foobar", -// "http://foo.com:123/foobar" -// ) -// }, -// { -// input( -// "MultiContextResource-2", -// "http://host:port","/c1/c2","/r1/r2","/p1/p2", -// "http://foo.com:123", -// "http://foo.com:123", -// "http://foo.com:123" -// ) -// }, -// { -// input( -// "MultiContextResource-3", -// "http://host:port","/c1/c2","/r1/r2","/p1/p2", -// "/foobar", -// "http://host:port/foobar", -// "/foobar" -// ) -// }, -// { -// input( -// "MultiContextResource-4", -// "http://host:port","/c1/c2","/r1/r2","/p1/p2", -// "/", -// "http://host:port", -// "/" -// ) -// }, -// { -// input( -// "MultiContextResource-5", -// "http://host:port","/c1/c2","/r1/r2","/p1/p2", -// "foobar", -// "http://host:port/c1/c2/r1/r2/p1/foobar", -// "/c1/c2/r1/r2/p1/foobar" -// ) -// }, -// { -// input( -// "MultiContextResource-6", -// "http://host:port","/c1/c2","/r1/r2","/p1/p2", -// "", -// "http://host:port/c1/c2/r1/r2/p1/p2", -// "/c1/c2/r1/r2/p1/p2" -// ) -// }, -// { -// input( -// "MultiContextResource-7", -// "http://host:port","/c1/c2","/r1/r2","/p1/p2", -// "context:/foo", -// "http://host:port/c1/c2/foo", -// "/c1/c2/foo" -// ) -// }, -// { -// input( -// "MultiContextResource-8", -// "http://host:port","/c1/c2","/r1/r2","/p1/p2", -// "context:/", -// "http://host:port/c1/c2", -// "/c1/c2" -// ) -// }, -// { -// input( -// "MultiContextResource-9", -// "http://host:port","/c1/c2","/r1/r2","/p1/p2", -// "servlet:/foo", -// "http://host:port/c1/c2/r1/r2/foo", -// "/c1/c2/r1/r2/foo" -// ) -// }, -// { -// input( -// "MultiContextResource-10", -// "http://host:port","/c1/c2","/r1/r2","/p1/p2", -// "servlet:/", -// "http://host:port/c1/c2/r1/r2", -// "/c1/c2/r1/r2" -// ) -// }, -// -// // No authority given -// { -// input( -// "NoAuthority-1", -// "","/context","/resource","/path", -// "http://foo.com:123/foobar", -// "http://foo.com:123/foobar", -// "http://foo.com:123/foobar" -// ) -// }, -// { -// input( -// "NoAuthority-2", -// "","/context","/resource","/path", -// "http://foo.com:123", -// "http://foo.com:123", -// "http://foo.com:123" -// ) -// }, -// { -// input( -// "NoAuthority-3", -// "","/context","/resource","/path", -// "/foobar", -// "/foobar", -// "/foobar" -// ) -// }, -// { -// input( -// "NoAuthority-4", -// "","/context","/resource","/path", -// "/", -// "/", -// "/" -// ) -// }, -// { -// input( -// "NoAuthority-5", -// "","/context","/resource","/path", -// "foobar", -// "/context/resource/foobar", -// "/context/resource/foobar" -// ) -// }, -// { -// input( -// "NoAuthority-6", -// "","/context","/resource","/path", -// "", -// "/context/resource/path", -// "/context/resource/path" -// ) -// }, -// { -// input( -// "NoAuthority-7", -// "","/context","/resource","/path", -// "context:/foo", -// "/context/foo", -// "/context/foo" -// ) -// }, -// { -// input( -// "NoAuthority-8", -// "","/context","/resource","/path", -// "context:/", -// "/context", -// "/context" -// ) -// }, -// { -// input( -// "NoAuthority-9", -// "","/context","/resource","/path", -// "servlet:/foo", -// "/context/resource/foo", -// "/context/resource/foo" -// ) -// }, -// { -// input( -// "NoAuthority-10", -// "","/context","/resource","/path", -// "servlet:/", -// "/context/resource", -// "/context/resource" -// ) -// }, -// -// // No authority or context given -// { -// input( -// "NoAuthorityOrContext-1", -// "","","/resource","/path", -// "http://foo.com:123/foobar", -// "http://foo.com:123/foobar", -// "http://foo.com:123/foobar" -// ) -// }, -// { -// input( -// "NoAuthorityOrContext-2", -// "","","/resource","/path", -// "http://foo.com:123", -// "http://foo.com:123", -// "http://foo.com:123" -// ) -// }, -// { -// input( -// "NoAuthorityOrContext-3", -// "","","/resource","/path", -// "/foobar", -// "/foobar", -// "/foobar" -// ) -// }, -// { -// input( -// "NoAuthorityOrContext-4", -// "","","/resource","/path", -// "/", -// "/", -// "/" -// ) -// }, -// { -// input( -// "NoAuthorityOrContext-5", -// "","","/resource","/path", -// "foobar", -// "/resource/foobar", -// "/resource/foobar" -// ) -// }, -// { -// input( -// "NoAuthorityOrContext-6", -// "","","/resource","/path", -// "", -// "/resource/path", -// "/resource/path" -// ) -// }, -// { -// input( -// "NoAuthorityOrContext-7", -// "","","/resource","/path", -// "context:/foo", -// "/foo", -// "/foo" -// ) -// }, -// { -// input( -// "NoAuthorityOrContext-8", -// "","","/resource","/path", -// "context:/", -// "/", -// "/" -// ) -// }, -// { -// input( -// "NoAuthorityOrContext-9", -// "","","/resource","/path", -// "servlet:/foo", -// "/resource/foo", -// "/resource/foo" -// ) -// }, -// { -// input( -// "NoAuthorityOrContext-10", -// "","","/resource","/path", -// "servlet:/", -// "/resource", -// "/resource" -// ) -// }, -// -// // No authority or context or resource given -// { -// input( -// "NoAuthorityOrContextOrResource-1", -// "","","","/path", -// "http://foo.com:123/foobar", -// "http://foo.com:123/foobar", -// "http://foo.com:123/foobar" -// ) -// }, -// { -// input( -// "NoAuthorityOrContextOrResource-2", -// "","","","/path", -// "http://foo.com:123", -// "http://foo.com:123", -// "http://foo.com:123" -// ) -// }, -// { -// input( -// "NoAuthorityOrContextOrResource-3", -// "","","","/path", -// "/foobar", -// "/foobar", -// "/foobar" -// ) -// }, -// { -// input( -// "NoAuthorityOrContextOrResource-4", -// "","","","/path", -// "/", -// "/", -// "/" -// ) -// }, -// { -// input( -// "NoAuthorityOrContextOrResource-5", -// "","","","/path", -// "foobar", -// "/foobar", -// "/foobar" -// ) -// }, -// { -// input( -// "NoAuthorityOrContextOrResource-6", -// "","","","/path", -// "", -// "/path", -// "/path" -// ) -// }, -// { -// input( -// "NoAuthorityOrContextOrResource-7", -// "","","","/path", -// "context:/foo", -// "/foo", -// "/foo" -// ) -// }, -// { -// input( -// "NoAuthorityOrContextOrResource-8", -// "","","","/path", -// "context:/", -// "/", -// "/" -// ) -// }, -// { -// input( -// "NoAuthorityOrContextOrResource-9", -// "","","","/path", -// "servlet:/foo", -// "/foo", -// "/foo" -// ) -// }, -// { -// input( -// "NoAuthorityOrContextOrResource-10", -// "","","","/path", -// "servlet:/", -// "/", -// "/" -// ) -// }, -// -// // No context or resource given. -// { -// input( -// "NoContextOrResource-1", -// "http://host:port","","","/path", -// "http://foo.com:123/foobar", -// "http://foo.com:123/foobar", -// "http://foo.com:123/foobar" -// ) -// }, -// { -// input( -// "NoContextOrResource-2", -// "http://host:port","","","/path", -// "http://foo.com:123", -// "http://foo.com:123", -// "http://foo.com:123" -// ) -// }, -// { -// input( -// "NoContextOrResource-3", -// "http://host:port","","","/path", -// "/foobar", -// "http://host:port/foobar", -// "/foobar" -// ) -// }, -// { -// input( -// "NoContextOrResource-4", -// "http://host:port","","","/path", -// "/", -// "http://host:port", -// "/" -// ) -// }, -// { -// input( -// "NoContextOrResource-5", -// "http://host:port","","","/path", -// "foobar", -// "http://host:port/foobar", -// "/foobar" -// ) -// }, -// { -// input( -// "NoContextOrResource-6", -// "http://host:port","","","/path", -// "", -// "http://host:port/path", -// "/path" -// ) -// }, -// { -// input( -// "NoContextOrResource-7", -// "http://host:port","","","/path", -// "context:/foo", -// "http://host:port/foo", -// "/foo" -// ) -// }, -// { -// input( -// "NoContextOrResource-8", -// "http://host:port","","","/path", -// "context:/", -// "http://host:port", -// "/" -// ) -// }, -// { -// input( -// "NoContextOrResource-9", -// "http://host:port","","","/path", -// "servlet:/foo", -// "http://host:port/foo", -// "/foo" -// ) -// }, -// { -// input( -// "NoContextOrResource-10", -// "http://host:port","","","/path", -// "servlet:/", -// "http://host:port", -// "/" -// ) -// }, -// }); -// } -// -// public static Input input(String label, String authority, String context, String resource, String path, String uri, String expectedAbsolute, String expectedRootRelative) { -// return new Input(label, authority, context, resource, path, uri, expectedAbsolute, expectedRootRelative); -// } -// -// public static class Input { -// private final UriContext uriContext; -// private final String label, uri, expectedAbsolute, expectedRootRelative; -// -// public Input(String label, String authority, String context, String resource, String path, String uri, String expectedAbsolute, String expectedRootRelative) { -// this.label = label; -// this.uriContext = new UriContext(authority, context, resource, path); -// this.uri = uri; -// this.expectedAbsolute = expectedAbsolute; -// this.expectedRootRelative = expectedRootRelative; -// } -// } -// -// private Input in; -// -// public UriContextResolutionComboTest(Input in) throws Exception { -// this.in = in; -// } -// -// @Test -// public void testAbsolute() { -// assertEquals(in.expectedAbsolute, in.uriContext.resolve(in.uri), "{0}: testAbsolute() failed", in.label); -// } -// -// @Test -// public void testRootRelative() { -// assertEquals(in.expectedRootRelative, in.uriContext.resolveRootRelative(in.uri), "{0}: testRootRelative() failed", in.label); -// } -// -// @Test -// public void testAbsoluteAppend() { -// assertEquals(in.expectedAbsolute, in.uriContext.append(new StringBuilder(), in.uri).toString(), "{0}: testAbsolute() failed", in.label); -// } -// -// @Test -// public void testRootRelativeAppend() { -// assertEquals(in.expectedRootRelative, in.uriContext.appendRootRelative(new StringBuilder(), in.uri).toString(), "{0}: testRootRelative() failed", in.label); -// } + + @Parameterized.Parameters + public static Collection<Object[]> getInput() { + return Arrays.asList(new Object[][] { + + // Happy cases - All URL parts known. + { + "Happy-1a", + input( + "http://host:port","/context","/resource","/path", + "http://foo.com:123/foobar" + ), + results( + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar" + ) + }, + { + "Happy-2", + input( + "http://host:port","/context","/resource","/path", + "http://foo.com:123" + ), + results( + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123" + ) + }, + { + "Happy-3", + input( + "http://host:port","/context","/resource","/path", + "/foobar" + ), + results( + "http://host:port/foobar", + "http://host:port/foobar", + "/foobar", + "/foobar", + "/foobar", + "/foobar" + ) + }, + { + "Happy-4", + input( + "http://host:port","/context","/resource","/path", + "/" + ), + results( + "http://host:port", + "http://host:port", + "/", + "/", + "/", + "/" + ) + }, + { + "Happy-5", + input( + "http://host:port","/context","/resource","/path", + "foobar" + ), + results( + "http://host:port/context/resource/foobar", + "http://host:port/context/resource/foobar", + "/context/resource/foobar", + "/context/resource/foobar", + "foobar", + "foobar" + ) + }, + { + "Happy-6", + input( + "http://host:port","/context","/resource","/path", + "" + ), + results( + "http://host:port/context/resource", + "http://host:port/context/resource/path", + "/context/resource", + "/context/resource/path", + "", + "" + ) + }, + { + "Happy-7", + input( + "http://host:port","/context","/resource","/path", + "context:/foo" + ), + results( + "http://host:port/context/foo", + "http://host:port/context/foo", + "/context/foo", + "/context/foo", + "/context/foo", + "/context/foo" + ) + }, + { + "Happy-8", + input( + "http://host:port","/context","/resource","/path", + "context:/" + ), + results( + "http://host:port/context", + "http://host:port/context", + "/context", + "/context", + "/context", + "/context" + ) + }, + { + "Happy-9", + input( + "http://host:port","/context","/resource","/path", + "servlet:/foo" + ), + results( + "http://host:port/context/resource/foo", + "http://host:port/context/resource/foo", + "/context/resource/foo", + "/context/resource/foo", + "/context/resource/foo", + "/context/resource/foo" + ) + }, + { + "Happy-10", + input( + "http://host:port","/context","/resource","/path", + "servlet:/" + ), + results( + "http://host:port/context/resource", + "http://host:port/context/resource", + "/context/resource", + "/context/resource", + "/context/resource", + "/context/resource" + ) + }, + + // Multiple context and resource parts + { + "MultiContextResource-1", + input( + "http://host:port","/c1/c2","/r1/r2","/p1/p2", + "http://foo.com:123/foobar" + ), + results( + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar" + ) + }, + { + "MultiContextResource-2", + input( + "http://host:port","/c1/c2","/r1/r2","/p1/p2", + "http://foo.com:123" + ), + results( + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123" + ) + }, + { + "MultiContextResource-3", + input( + "http://host:port","/c1/c2","/r1/r2","/p1/p2", + "/foobar" + ), + results( + "http://host:port/foobar", + "http://host:port/foobar", + "/foobar", + "/foobar", + "/foobar", + "/foobar" + ) + }, + { + "MultiContextResource-4", + input( + "http://host:port","/c1/c2","/r1/r2","/p1/p2", + "/" + ), + results( + "http://host:port", + "http://host:port", + "/", + "/", + "/", + "/" + ) + }, + { + "MultiContextResource-5", + input( + "http://host:port","/c1/c2","/r1/r2","/p1/p2", + "foobar" + ), + results( + "http://host:port/c1/c2/r1/r2/foobar", + "http://host:port/c1/c2/r1/r2/p1/foobar", + "/c1/c2/r1/r2/foobar", + "/c1/c2/r1/r2/p1/foobar", + "foobar", + "foobar" + ) + }, + { + "MultiContextResource-6", + input( + "http://host:port","/c1/c2","/r1/r2","/p1/p2", + "" + ), + results( + "http://host:port/c1/c2/r1/r2", + "http://host:port/c1/c2/r1/r2/p1/p2", + "/c1/c2/r1/r2", + "/c1/c2/r1/r2/p1/p2", + "", + "" + ) + }, + { + "MultiContextResource-7", + input( + "http://host:port","/c1/c2","/r1/r2","/p1/p2", + "context:/foo" + ), + results( + "http://host:port/c1/c2/foo", + "http://host:port/c1/c2/foo", + "/c1/c2/foo", + "/c1/c2/foo", + "/c1/c2/foo", + "/c1/c2/foo" + ) + }, + { + "MultiContextResource-8", + input( + "http://host:port","/c1/c2","/r1/r2","/p1/p2", + "context:/" + ), + results( + "http://host:port/c1/c2", + "http://host:port/c1/c2", + "/c1/c2", + "/c1/c2", + "/c1/c2", + "/c1/c2" + ) + }, + { + "MultiContextResource-9", + input( + "http://host:port","/c1/c2","/r1/r2","/p1/p2", + "servlet:/foo" + ), + results( + "http://host:port/c1/c2/r1/r2/foo", + "http://host:port/c1/c2/r1/r2/foo", + "/c1/c2/r1/r2/foo", + "/c1/c2/r1/r2/foo", + "/c1/c2/r1/r2/foo", + "/c1/c2/r1/r2/foo" + ) + }, + { + "MultiContextResource-10", + input( + "http://host:port","/c1/c2","/r1/r2","/p1/p2", + "servlet:/" + ), + results( + "http://host:port/c1/c2/r1/r2", + "http://host:port/c1/c2/r1/r2", + "/c1/c2/r1/r2", + "/c1/c2/r1/r2", + "/c1/c2/r1/r2", + "/c1/c2/r1/r2" + ) + }, + + // No authority given + { + "NoAuthority-1", + input( + "","/context","/resource","/path", + "http://foo.com:123/foobar" + ), + results( + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar" + ) + }, + { + "NoAuthority-2", + input( + "","/context","/resource","/path", + "http://foo.com:123" + ), + results( + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123" + ) + }, + { + "NoAuthority-3", + input( + "","/context","/resource","/path", + "/foobar" + ), + results( + "/foobar", + "/foobar", + "/foobar", + "/foobar", + "/foobar", + "/foobar" + ) + }, + { + "NoAuthority-4", + input( + "","/context","/resource","/path", + "/" + ), + results( + "/", + "/", + "/", + "/", + "/", + "/" + ) + }, + { + "NoAuthority-5", + input( + "","/context","/resource","/path", + "foobar" + ), + results( + "/context/resource/foobar", + "/context/resource/foobar", + "/context/resource/foobar", + "/context/resource/foobar", + "foobar", + "foobar" + ) + }, + { + "NoAuthority-6", + input( + "","/context","/resource","/path", + "" + ), + results( + "/context/resource", + "/context/resource/path", + "/context/resource", + "/context/resource/path", + "", + "" + ) + }, + { + "NoAuthority-7", + input( + "","/context","/resource","/path", + "context:/foo" + ), + results( + "/context/foo", + "/context/foo", + "/context/foo", + "/context/foo", + "/context/foo", + "/context/foo" + ) + }, + { + "NoAuthority-8", + input( + "","/context","/resource","/path", + "context:/" + ), + results( + "/context", + "/context", + "/context", + "/context", + "/context", + "/context" + ) + }, + { + "NoAuthority-9", + input( + "","/context","/resource","/path", + "servlet:/foo" + ), + results( + "/context/resource/foo", + "/context/resource/foo", + "/context/resource/foo", + "/context/resource/foo", + "/context/resource/foo", + "/context/resource/foo" + ) + }, + { + "NoAuthority-10", + input( + "","/context","/resource","/path", + "servlet:/" + ), + results( + "/context/resource", + "/context/resource", + "/context/resource", + "/context/resource", + "/context/resource", + "/context/resource" + ) + }, + + // No authority or context given + { + "NoAuthorityOrContext-1", + input( + "","","/resource","/path", + "http://foo.com:123/foobar" + ), + results( + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar" + ) + }, + { + "NoAuthorityOrContext-2", + input( + "","","/resource","/path", + "http://foo.com:123" + ), + results( + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123" + ) + }, + { + "NoAuthorityOrContext-3", + input( + "","","/resource","/path", + "/foobar" + ), + results( + "/foobar", + "/foobar", + "/foobar", + "/foobar", + "/foobar", + "/foobar" + ) + }, + { + "NoAuthorityOrContext-4", + input( + "","","/resource","/path", + "/" + ), + results( + "/", + "/", + "/", + "/", + "/", + "/" + ) + }, + { + "NoAuthorityOrContext-5", + input( + "","","/resource","/path", + "foobar" + ), + results( + "/resource/foobar", + "/resource/foobar", + "/resource/foobar", + "/resource/foobar", + "foobar", + "foobar" + ) + }, + { + "NoAuthorityOrContext-6", + input( + "","","/resource","/path", + "" + ), + results( + "/resource", + "/resource/path", + "/resource", + "/resource/path", + "", + "" + ) + }, + { + "NoAuthorityOrContext-7", + input( + "","","/resource","/path", + "context:/foo" + ), + results( + "/foo", + "/foo", + "/foo", + "/foo", + "/foo", + "/foo" + ) + }, + { + "NoAuthorityOrContext-8", + input( + "","","/resource","/path", + "context:/" + ), + results( + "/", + "/", + "/", + "/", + "/", + "/" + ) + }, + { + "NoAuthorityOrContext-9", + input( + "","","/resource","/path", + "servlet:/foo" + ), + results( + "/resource/foo", + "/resource/foo", + "/resource/foo", + "/resource/foo", + "/resource/foo", + "/resource/foo" + ) + }, + { + "NoAuthorityOrContext-10", + input( + "","","/resource","/path", + "servlet:/" + ), + results( + "/resource", + "/resource", + "/resource", + "/resource", + "/resource", + "/resource" + ) + }, + + // No authority or context or resource given + { + "NoAuthorityOrContextOrResource-1", + input( + "","","","/path", + "http://foo.com:123/foobar" + ), + results( + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar" + ) + }, + { + "NoAuthorityOrContextOrResource-2", + input( + "","","","/path", + "http://foo.com:123" + ), + results( + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123" + ) + }, + { + "NoAuthorityOrContextOrResource-3", + input( + "","","","/path", + "/foobar" + ), + results( + "/foobar", + "/foobar", + "/foobar", + "/foobar", + "/foobar", + "/foobar" + ) + }, + { + "NoAuthorityOrContextOrResource-4", + input( + "","","","/path", + "/" + ), + results( + "/", + "/", + "/", + "/", + "/", + "/" + ) + }, + { + "NoAuthorityOrContextOrResource-5", + input( + "","","","/path", + "foobar" + ), + results( + "/foobar", + "/foobar", + "/foobar", + "/foobar", + "foobar", + "foobar" + ) + }, +// return new Results(eAbsResource, eAbsPathInfo, eRrResource, eRrPathInfo, eNoneResource, eNonePathInfo); + { + "NoAuthorityOrContextOrResource-6", + input( + "","","","/path", + "" + ), + results( + "/", + "/path", + "/", + "/path", + "", + "" + ) + }, + { + "NoAuthorityOrContextOrResource-7", + input( + "","","","/path", + "context:/foo" + ), + results( + "/foo", + "/foo", + "/foo", + "/foo", + "/foo", + "/foo" + ) + }, + { + "NoAuthorityOrContextOrResource-8", + input( + "","","","/path", + "context:/" + ), + results( + "/", + "/", + "/", + "/", + "/", + "/" + ) + }, + { + "NoAuthorityOrContextOrResource-9", + input( + "","","","/path", + "servlet:/foo" + ), + results( + "/foo", + "/foo", + "/foo", + "/foo", + "/foo", + "/foo" + ) + }, + { + "NoAuthorityOrContextOrResource-10", + input( + "","","","/path", + "servlet:/" + ), + results( + "/", + "/", + "/", + "/", + "/", + "/" + ) + }, + + // No context or resource given. + { + "NoContextOrResource-1", + input( + "http://host:port","","","/path", + "http://foo.com:123/foobar" + ), + results( + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar", + "http://foo.com:123/foobar" + ) + }, + { + "NoContextOrResource-2", + input( + "http://host:port","","","/path", + "http://foo.com:123" + ), + results( + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123" + ) + }, + { + "NoContextOrResource-3", + input( + "http://host:port","","","/path", + "/foobar" + ), + results( + "http://host:port/foobar", + "http://host:port/foobar", + "/foobar", + "/foobar", + "/foobar", + "/foobar" + ) + }, + { + "NoContextOrResource-4", + input( + "http://host:port","","","/path", + "/" + ), + results( + "http://host:port", + "http://host:port", + "/", + "/", + "/", + "/" + ) + }, + { + "NoContextOrResource-5", + input( + "http://host:port","","","/path", + "foobar" + ), + results( + "http://host:port/foobar", + "http://host:port/foobar", + "/foobar", + "/foobar", + "foobar", + "foobar" + ) + }, + { + "NoContextOrResource-6", + input( + "http://host:port","","","/path", + "" + ), + results( + "http://host:port", + "http://host:port/path", + "/", + "/path", + "", + "" + ) + }, + { + "NoContextOrResource-7", + input( + "http://host:port","","","/path", + "context:/foo" + ), + results( + "http://host:port/foo", + "http://host:port/foo", + "/foo", + "/foo", + "/foo", + "/foo" + ) + }, + { + "NoContextOrResource-8", + input( + "http://host:port","","","/path", + "context:/" + ), + results( + "http://host:port", + "http://host:port", + "/", + "/", + "/", + "/" + ) + }, + { + "NoContextOrResource-9", + input( + "http://host:port","","","/path", + "servlet:/foo" + ), + results( + "http://host:port/foo", + "http://host:port/foo", + "/foo", + "/foo", + "/foo", + "/foo" + ) + }, + { + "NoContextOrResource-10", + input( + "http://host:port","","","/path", + "servlet:/" + ), + results( + "http://host:port", + "http://host:port", + "/", + "/", + "/", + "/" + ) + }, + }); + } + + public static Input input(String authority, String context, String resource, String path, String uri) { + return new Input(authority, context, resource, path, uri); + } + + public static Results results(String eAbsResource, String eAbsPathInfo, String eRrResource, String eRrPathInfo, String eNoneResource, String eNonePathInfo) { + return new Results(eAbsResource, eAbsPathInfo, eRrResource, eRrPathInfo, eNoneResource, eNonePathInfo); + } + + public static class Input { + private final String uri; + private final String authority, context, resource, path; + + public Input(String authority, String context, String resource, String path, String uri) { + this.authority = authority; + this.context = context; + this.resource = resource; + this.path = path; + this.uri = uri; + } + } + + public static class Results { + private final String aResource, aPathInfo, rrResource, rrPathInfo, nResource, nPathInfo; + + public Results(String aResource, String aPathInfo, String rrResource, String rrPathInfo, String nResource, String nPathInfo) { + this.aResource = aResource; + this.aPathInfo = aPathInfo; + this.rrResource = rrResource; + this.rrPathInfo = rrPathInfo; + this.nResource = nResource; + this.nPathInfo = nPathInfo; + } + } + + private String label; + private Input in; + private Results r; + + public UriContextResolutionComboTest(String label, Input in, Results r) throws Exception { + this.label = label; + this.in = in; + this.r = r; + } + + @Test + public void a01_testAbsoluteResource() { + assertEquals(r.aResource, new UriContext(ABSOLUTE, RESOURCE, in.authority, in.context, in.resource, in.path).resolve(in.uri), "{0}: testAbsolute() failed", label); + } + + @Test + public void a02_testAppendAbsoluteResource() { + assertEquals(r.aResource, new UriContext(ABSOLUTE, RESOURCE, in.authority, in.context, in.resource, in.path).append(new StringBuilder(), in.uri).toString(), "{0}: testAbsolute() failed", label); + } + + @Test + public void a03_testAbsolutePathInfo() { + assertEquals(r.aPathInfo, new UriContext(ABSOLUTE, PATH_INFO, in.authority, in.context, in.resource, in.path).resolve(in.uri), "{0}: testAbsolute() failed", label); + } + + @Test + public void a04_testAppendAbsolutePathInfo() { + assertEquals(r.aPathInfo, new UriContext(ABSOLUTE, PATH_INFO, in.authority, in.context, in.resource, in.path).append(new StringBuilder(), in.uri).toString(), "{0}: testAbsolute() failed", label); + } + + @Test + public void a05_testRootRelativeResource() { + assertEquals(r.rrResource, new UriContext(ROOT_RELATIVE, RESOURCE, in.authority, in.context, in.resource, in.path).resolve(in.uri), "{0}: testAbsolute() failed", label); + } + + @Test + public void a06_testAppendRootRelativeResource() { + assertEquals(r.rrResource, new UriContext(ROOT_RELATIVE, RESOURCE, in.authority, in.context, in.resource, in.path).append(new StringBuilder(), in.uri).toString(), "{0}: testAbsolute() failed", label); + } + + @Test + public void a07_testRootRelativePathInfo() { + assertEquals(r.rrPathInfo, new UriContext(ROOT_RELATIVE, PATH_INFO, in.authority, in.context, in.resource, in.path).resolve(in.uri), "{0}: testAbsolute() failed", label); + } + + @Test + public void a08_testAppendRootRelativePathInfo() { + assertEquals(r.rrPathInfo, new UriContext(ROOT_RELATIVE, PATH_INFO, in.authority, in.context, in.resource, in.path).append(new StringBuilder(), in.uri).toString(), "{0}: testAbsolute() failed", label); + } + + @Test + public void a09_testNoneResource() { + assertEquals(r.nResource, new UriContext(NONE, RESOURCE, in.authority, in.context, in.resource, in.path).resolve(in.uri), "{0}: testAbsolute() failed", label); + } + + @Test + public void a10_testAppendNoneResource() { + assertEquals(r.nResource, new UriContext(NONE, RESOURCE, in.authority, in.context, in.resource, in.path).append(new StringBuilder(), in.uri).toString(), "{0}: testAbsolute() failed", label); + } + + @Test + public void a11_testNonePathInfo() { + assertEquals(r.nPathInfo, new UriContext(NONE, PATH_INFO, in.authority, in.context, in.resource, in.path).resolve(in.uri), "{0}: testAbsolute() failed", label); + } + + @Test + public void a12_testAppendNonePathInfo() { + assertEquals(r.nPathInfo, new UriContext(NONE, PATH_INFO, in.authority, in.context, in.resource, in.path).append(new StringBuilder(), in.uri).toString(), "{0}: testAbsolute() failed", label); + } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/cdebb74d/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextUriComboTest.java ---------------------------------------------------------------------- diff --git a/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextUriComboTest.java b/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextUriComboTest.java index 7d9eda7..e63f87f 100644 --- a/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextUriComboTest.java +++ b/juneau-core-test/src/test/java/org/apache/juneau/utils/UriContextUriComboTest.java @@ -12,6 +12,11 @@ // *************************************************************************************************************************** package org.apache.juneau.utils; +import static org.apache.juneau.TestUtils.*; + +import java.util.*; + +import org.apache.juneau.*; import org.junit.*; import org.junit.runner.*; import org.junit.runners.*; @@ -21,210 +26,240 @@ import org.junit.runners.*; */ @RunWith(Parameterized.class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -@Ignore public class UriContextUriComboTest { -// -// @Parameterized.Parameters -// public static Collection<Object[]> getInput() { -// return Arrays.asList(new Object[][] { -// -// // Happy cases - All URL parts known. -// { -// input( -// "Happy-1", -// "http://foo.com:123","/context","/resource","/path", -// "http://foo.com:123", -// "http://foo.com:123/context", -// "http://foo.com:123/context/resource", -// "http://foo.com:123/context/resource/path", -// "/context", -// "/context/resource", -// "/context/resource/path" -// ) -// }, -// { -// input( -// "Happy-2", -// "http://foo.com:123","/c1/c2","/r1/r2","/p1/p2", -// "http://foo.com:123", -// "http://foo.com:123/c1/c2", -// "http://foo.com:123/c1/c2/r1/r2", -// "http://foo.com:123/c1/c2/r1/r2/p1/p2", -// "/c1/c2", -// "/c1/c2/r1/r2", -// "/c1/c2/r1/r2/p1/p2" -// ) -// }, -// { -// input( -// "NoAuthority-1", -// "","/context","/resource","/path", -// "/", -// "/context", -// "/context/resource", -// "/context/resource/path", -// "/context", -// "/context/resource", -// "/context/resource/path" -// ) -// }, -// { -// input( -// "NoContext-1", -// "http://foo.com:123","","/resource","/path", -// "http://foo.com:123", -// "http://foo.com:123", -// "http://foo.com:123/resource", -// "http://foo.com:123/resource/path", -// "/", -// "/resource", -// "/resource/path" -// ) -// }, -// { -// input( -// "NoResource-1", -// "http://foo.com:123","/context","","/path", -// "http://foo.com:123", -// "http://foo.com:123/context", -// "http://foo.com:123/context", -// "http://foo.com:123/context/path", -// "/context", -// "/context", -// "/context/path" -// ) -// }, -// { -// input( -// "NoPath-1", -// "http://foo.com:123","/context","/resource","", -// "http://foo.com:123", -// "http://foo.com:123/context", -// "http://foo.com:123/context/resource", -// "http://foo.com:123/context/resource", -// "/context", -// "/context/resource", -// "/context/resource" -// ) -// }, -// { -// input( -// "NoAuthorityNoContext-1", -// "","","/resource","/path", -// "/", -// "/", -// "/resource", -// "/resource/path", -// "/", -// "/resource", -// "/resource/path" -// ) -// }, -// { -// input( -// "NoContextNoResource-1", -// "http://foo.com:123","","","/path", -// "http://foo.com:123", -// "http://foo.com:123", -// "http://foo.com:123", -// "http://foo.com:123/path", -// "/", -// "/", -// "/path" -// ) -// }, -// { -// input( -// "NoAuthorityNoContextNoResource-1", -// "","","","/path", -// "/", -// "/", -// "/", -// "/path", -// "/", -// "/", -// "/path" -// ) -// }, -// { -// input( -// "Nothing-1", -// "","","","", -// "/", -// "/", -// "/", -// "/", -// "/", -// "/", -// "/" -// ) -// }, -// }); -// } -// -// public static Input input(String label, String authority, String context, String resource, String path, -// String eAbsoluteAuthority, String eAbsoluteContext, String eAbsoluteResource, String eAbsolutePath, -// String eRootRelativeContext, String eRootRelativeResource, String eRootRelativePath) { -// return new Input(label, authority, context, resource, path, eAbsoluteAuthority, eAbsoluteContext, eAbsoluteResource, eAbsolutePath, eRootRelativeContext, eRootRelativeResource, eRootRelativePath); -// } -// -// public static class Input { -// private final UriContext uriContext; -// private final String label, eAbsoluteAuthority, eAbsoluteContext, eAbsoluteResource, eAbsolutePath, eRootRelativeContext, eRootRelativeResource, eRootRelativePath; -// -// public Input(String label, String authority, String context, String resource, String path, -// String eAbsoluteAuthority, String eAbsoluteContext, String eAbsoluteResource, String eAbsolutePath, -// String eRootRelativeContext, String eRootRelativeResource, String eRootRelativePath) { -// this.label = label; -// this.uriContext = new UriContext(authority, context, resource, path); -// this.eAbsoluteAuthority = eAbsoluteAuthority; -// this.eAbsoluteContext = eAbsoluteContext; -// this.eAbsoluteResource = eAbsoluteResource; -// this.eAbsolutePath = eAbsolutePath; -// this.eRootRelativeContext = eRootRelativeContext; -// this.eRootRelativeResource = eRootRelativeResource; -// this.eRootRelativePath = eRootRelativePath; -// } -// } -// -// private Input in; -// -// public UriContextUriComboTest(Input in) throws Exception { -// this.in = in; -// } -// -// @Test -// public void a1_testAbsoluteAuthority() { -// assertEquals(in.eAbsoluteAuthority, in.uriContext.getAbsoluteAuthority(), "{0}: testAbsoluteAuthority() failed", in.label); -// } -// -// @Test -// public void a2_testAbsoluteContext() { -// assertEquals(in.eAbsoluteContext, in.uriContext.getAbsoluteContextRoot(), "{0}: testAbsoluteContext() failed", in.label); -// } -// -// @Test -// public void a3_testAbsoluteResource() { -// assertEquals(in.eAbsoluteResource, in.uriContext.getAbsoluteServletPath(), "{0}: testAbsoluteResource() failed", in.label); -// } -// -// @Test -// public void a4_testAbsolutePath() { -// assertEquals(in.eAbsolutePath, in.uriContext.getAbsolutePathInfo(), "{0}: testAbsolutePath() failed", in.label); -// } -// -// @Test -// public void a5_testRootRelativeContext() { -// assertEquals(in.eRootRelativeContext, in.uriContext.getRootRelativeContextRoot(), "{0}: testRootRelativeContext() failed", in.label); -// } -// -// @Test -// public void a6_testRootRelativeResource() { -// assertEquals(in.eRootRelativeResource, in.uriContext.getRootRelativeServletPath(), "{0}: testRootRelativeResource() failed", in.label); -// } -// -// @Test -// public void a7_testRootRelativePath() { -// assertEquals(in.eRootRelativePath, in.uriContext.getRootRelativePathInfo(), "{0}: testRootRelativePath() failed", in.label); -// } + + @Parameterized.Parameters + public static Collection<Object[]> getInput() { + return Arrays.asList(new Object[][] { + + // Happy cases - All URL parts known. + { + "Happy-1", + input( + "http://foo.com:123","/context","/resource","/path" + ), + results( + "http://foo.com:123", + "http://foo.com:123/context", + "http://foo.com:123/context/resource", + "http://foo.com:123/context/resource/path", + "/context", + "/context/resource", + "/context/resource/path" + ) + }, + { + "Happy-2", + input( + "http://foo.com:123","/c1/c2","/r1/r2","/p1/p2" + ), + results( + "http://foo.com:123", + "http://foo.com:123/c1/c2", + "http://foo.com:123/c1/c2/r1/r2", + "http://foo.com:123/c1/c2/r1/r2/p1/p2", + "/c1/c2", + "/c1/c2/r1/r2", + "/c1/c2/r1/r2/p1/p2" + ) + }, + { + "NoAuthority-1", + input( + "","/context","/resource","/path" + ), + results( + "/", + "/context", + "/context/resource", + "/context/resource/path", + "/context", + "/context/resource", + "/context/resource/path" + ) + }, + { + "NoContext-1", + input( + "http://foo.com:123","","/resource","/path" + ), + results( + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123/resource", + "http://foo.com:123/resource/path", + "/", + "/resource", + "/resource/path" + ) + }, + { + "NoResource-1", + input( + "http://foo.com:123","/context","","/path" + ), + results( + "http://foo.com:123", + "http://foo.com:123/context", + "http://foo.com:123/context", + "http://foo.com:123/context/path", + "/context", + "/context", + "/context/path" + ) + }, + { + "NoPath-1", + input( + "http://foo.com:123","/context","/resource","" + ), + results( + "http://foo.com:123", + "http://foo.com:123/context", + "http://foo.com:123/context/resource", + "http://foo.com:123/context/resource", + "/context", + "/context/resource", + "/context/resource" + ) + }, + { + "NoAuthorityNoContext-1", + input( + "","","/resource","/path" + ), + results( + "/", + "/", + "/resource", + "/resource/path", + "/", + "/resource", + "/resource/path" + ) + }, + { + "NoContextNoResource-1", + input( + "http://foo.com:123","","","/path" + ), + results( + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123", + "http://foo.com:123/path", + "/", + "/", + "/path" + ) + }, + { + "NoAuthorityNoContextNoResource-1", + input( + "","","","/path" + ), + results( + "/", + "/", + "/", + "/path", + "/", + "/", + "/path" + ) + }, + { + "Nothing-1", + input( + "","","","" + ), + results( + "/", + "/", + "/", + "/", + "/", + "/", + "/" + ) + }, + }); + } + + public static Input input(String authority, String context, String resource, String path) { + return new Input(authority, context, resource, path); + } + + public static Results results(String eAbsoluteAuthority, String eAbsoluteContext, String eAbsoluteResource, String eAbsolutePath, + String eRootRelativeContext, String eRootRelativeResource, String eRootRelativePath) { + return new Results(eAbsoluteAuthority, eAbsoluteContext, eAbsoluteResource, eAbsolutePath, eRootRelativeContext, eRootRelativeResource, eRootRelativePath); + } + + public static class Input { + private final UriContext uriContext; + + public Input(String authority, String context, String resource, String path) { + this.uriContext = new UriContext(UriResolution.ABSOLUTE, UriRelativity.RESOURCE, authority, context, resource, path); + } + } + + public static class Results { + private final String eAbsoluteAuthority, eAbsoluteContext, eAbsoluteResource, eAbsolutePath, eRootRelativeContext, eRootRelativeResource, eRootRelativePath; + + public Results(String eAbsoluteAuthority, String eAbsoluteContext, String eAbsoluteResource, String eAbsolutePath, + String eRootRelativeContext, String eRootRelativeResource, String eRootRelativePath) { + this.eAbsoluteAuthority = eAbsoluteAuthority; + this.eAbsoluteContext = eAbsoluteContext; + this.eAbsoluteResource = eAbsoluteResource; + this.eAbsolutePath = eAbsolutePath; + this.eRootRelativeContext = eRootRelativeContext; + this.eRootRelativeResource = eRootRelativeResource; + this.eRootRelativePath = eRootRelativePath; + } + } + + private String label; + private Input in; + private Results r; + + public UriContextUriComboTest(String label, Input in, Results r) throws Exception { + this.label = label; + this.in = in; + this.r = r; + } + + @Test + public void a1_testAbsoluteAuthority() { + assertEquals(r.eAbsoluteAuthority, in.uriContext.getAbsoluteAuthority(), "{0}: testAbsoluteAuthority() failed", label); + } + + @Test + public void a2_testAbsoluteContext() { + assertEquals(r.eAbsoluteContext, in.uriContext.getAbsoluteContextRoot(), "{0}: testAbsoluteContext() failed", label); + } + + @Test + public void a3_testAbsoluteResource() { + assertEquals(r.eAbsoluteResource, in.uriContext.getAbsoluteServletPath(), "{0}: testAbsoluteResource() failed", label); + } + + @Test + public void a4_testAbsolutePath() { + assertEquals(r.eAbsolutePath, in.uriContext.getAbsolutePathInfo(), "{0}: testAbsolutePath() failed", label); + } + + @Test + public void a5_testRootRelativeContext() { + assertEquals(r.eRootRelativeContext, in.uriContext.getRootRelativeContextRoot(), "{0}: testRootRelativeContext() failed", label); + } + + @Test + public void a6_testRootRelativeResource() { + assertEquals(r.eRootRelativeResource, in.uriContext.getRootRelativeServletPath(), "{0}: testRootRelativeResource() failed", label); + } + + @Test + public void a7_testRootRelativePath() { + assertEquals(r.eRootRelativePath, in.uriContext.getRootRelativePathInfo(), "{0}: testRootRelativePath() failed", label); + } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/cdebb74d/juneau-core/src/main/java/org/apache/juneau/UriContext.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/UriContext.java b/juneau-core/src/main/java/org/apache/juneau/UriContext.java index 6f531bf..35e7678 100644 --- a/juneau-core/src/main/java/org/apache/juneau/UriContext.java +++ b/juneau-core/src/main/java/org/apache/juneau/UriContext.java @@ -278,7 +278,7 @@ public class UriContext { return uri; if (resolution == ROOT_RELATIVE && startsWith(uri, '/')) return uri; - if (resolution == NONE) + if (resolution == NONE && ! isSpecialUri(uri)) return uri; return append(new StringBuilder(), uri).toString(); } @@ -298,8 +298,8 @@ public class UriContext { // Absolute paths are not changed. if (isAbsoluteUri(uri)) return a.append(uri); - if (resolution == NONE) - return a.append(uri); + if (resolution == NONE && ! isSpecialUri(uri)) + return a.append(emptyIfNull(uri)); if (resolution == ROOT_RELATIVE && startsWith(uri, '/')) return a.append(uri); @@ -321,7 +321,7 @@ public class UriContext { a.append('/').append(contextRoot); if (uri.length() > 9) a.append('/').append(uri.substring(9)); - else if (contextRoot == null && (authority == null || resolution == ROOT_RELATIVE)) + else if (contextRoot == null && (authority == null || resolution != ABSOLUTE)) a.append('/'); return a; } @@ -336,7 +336,7 @@ public class UriContext { a.append('/').append(servletPath); if (uri.length() > 9) a.append('/').append(uri.substring(9)); - else if (servletPath == null && contextRoot == null && (authority == null || resolution == ROOT_RELATIVE)) + else if (servletPath == null && contextRoot == null && (authority == null || resolution != ABSOLUTE)) a.append('/'); return a; } @@ -360,6 +360,8 @@ public class UriContext { a.append('/').append(uri); } } + else if (uri == null && contextRoot == null && servletPath == null && (authority == null || resolution != ABSOLUTE)) + a.append('/'); return a; } catch (IOException e) { @@ -373,4 +375,13 @@ public class UriContext { return "/"; return uri.substring(0, i); } + + private static boolean isSpecialUri(String s) { + if (s == null || s.length() == 0) + return false; + char c = s.charAt(0); + if (c != 's' && c != 'c') + return false; + return s.startsWith("servlet:/") || s.startsWith("context:/"); + } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/cdebb74d/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java b/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java index ac232a3..c4bf1db 100644 --- a/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java +++ b/juneau-core/src/main/java/org/apache/juneau/internal/StringUtils.java @@ -633,6 +633,18 @@ public final class StringUtils { } /** + * Returns an empty string if the specified string is <jk>null</jk>. + * + * @param s The string to check. + * @return An empty string if the specified string is <jk>null</jk>, or the same string otherwise. + */ + public static String emptyIfNull(String s) { + if (s == null) + return ""; + return s; + } + + /** * Removes escape characters (\) from the specified characters. * * @param s The string to remove escape characters from. @@ -1345,7 +1357,7 @@ public final class StringUtils { return false; // Use a state machine for maximum performance. - + int S1 = 1; // Looking for http int S2 = 2; // Found http, looking for : int S3 = 3; // Found :, looking for /
