package com.googlecode.totallylazy.io; import org.junit.Test; import java.net.URI; import static com.googlecode.totallylazy.io.Uri.uri; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; public class UriTest { @Test public void canRemoveDotSegments() throws Exception { assertThat(uri("../foo").removeDotSegments(), is(uri("/foo"))); assertThat(uri("/foo/").removeDotSegments(), is(uri("/foo/"))); assertThat(uri("build/../build.xml").removeDotSegments(), is(uri("/build.xml"))); assertThat(uri("build/../../build.xml").removeDotSegments(), is(uri("/build.xml"))); assertThat(uri("build/child/../../build.xml").removeDotSegments(), is(uri("/build.xml"))); assertThat(uri("build/./build.xml").removeDotSegments(), is(uri("build/build.xml"))); assertThat(uri("build/././build.xml").removeDotSegments(), is(uri("build/build.xml"))); assertThat(uri("").removeDotSegments(), is(uri(""))); assertThat(uri("/").removeDotSegments(), is(uri("/"))); } @Test public void correctlyParsesUrls() throws Exception { Uri uri = uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related"); assertThat(uri.scheme(), is("http")); assertThat(uri.authority(), is("www.ics.uci.edu:80")); assertThat(uri.path(), is("/pub/ietf/uri/")); assertThat(uri.query(), is("foo=bar")); assertThat(uri.fragment(), is("Related")); } @Test public void handlesNonStandardJarUris() throws Exception { Uri uri = uri("jar:http://www.foo.com/bar/baz.jar?foo=bar!/COM/foo/Quux.class"); assertThat(uri.scheme(), is("jar")); assertThat(uri.authority(), is("http://www.foo.com/bar/baz.jar?foo=bar")); assertThat(uri.path(), is("/COM/foo/Quux.class")); assertThat(uri.query(), is(nullValue())); assertThat(uri.fragment(), is(nullValue())); assertThat(uri.toString(), is("jar:http://www.foo.com/bar/baz.jar?foo=bar!/COM/foo/Quux.class")); } @Test public void supportsToString() throws Exception { assertThat(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").toString(), is("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related")); assertThat(uri("file:///pub/ietf/uri/").toString(), is("file:///pub/ietf/uri/")); assertThat(uri("file:/pub/ietf/uri/").toString(), is("file:/pub/ietf/uri/")); assertThat(uri("pub/ietf/uri/").toString(), is("pub/ietf/uri/")); assertThat(uri("?foo").toString(), is("?foo")); assertThat(uri("#bar").toString(), is("#bar")); } @Test public void supportsMergingPaths() throws Exception { assertThat(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").mergePath("/bob").toString(), is("http://www.ics.uci.edu:80/bob?foo=bar#Related")); assertThat(uri("foo/bar").mergePath("bob").toString(), is("foo/bob")); assertThat(uri("#Related").mergePath("bob").toString(), is("bob#Related")); assertThat(uri("relative?foo=bar").mergePath("bob").toString(), is("bob?foo=bar")); assertThat(uri("/pub/ietf/uri/?foo=bar#Related").mergePath("bob").toString(), is("/pub/ietf/uri/bob?foo=bar#Related")); assertThat(uri("/pub/ietf/uri/?foo=bar#Related").mergePath("/bob").toString(), is("/bob?foo=bar#Related")); } @Test public void supportsDetectingAbsolutePaths() throws Exception { assertThat(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").isAbsolute(), is(true)); assertThat(uri("#Related").isAbsolute(), is(false)); assertThat(uri("#Related").isRelative(), is(true)); assertThat(uri("relative?foo=bar").isAbsolute(), is(false)); assertThat(uri("relative?foo=bar").isRelative(), is(true)); assertThat(uri("/pub/ietf/uri/?foo=bar#Related").isAbsolute(), is(true)); assertThat(uri("/pub/ietf/uri/?foo=bar#Related").isRelative(), is(false)); } @Test public void supportsDroppingParts() throws Exception { assertThat(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").dropScheme().dropAuthority(), is(uri("/pub/ietf/uri/?foo=bar#Related"))); assertThat(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").dropScheme().dropAuthority().dropPath(), is(uri("?foo=bar#Related"))); assertThat(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").dropScheme().dropAuthority().dropPath().dropQuery(), is(uri("#Related"))); } @Test public void supportsUserInfo() throws Exception { assertThat(uri("http://user:password@www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").userInfo(), is("user:password")); assertThat(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").userInfo("user:password"), is(uri("http://user:password@www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related"))); assertThat(uri("http://user:password@www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").userInfo(null), is(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related"))); assertThat(uri("http://user:password@www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").userInfo(""), is(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related"))); assertThat(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").dropUserInfo(), is(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related"))); } @Test public void supportsHost() throws Exception { assertThat(uri("http:/path").host(), is(nullValue())); assertThat(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").host(), is("www.ics.uci.edu")); assertThat(uri("http://www.ics.uci.edu:80/pub/ietf/uri/?foo=bar#Related").host("example"), is(uri("http://example:80/pub/ietf/uri/?foo=bar#Related"))); assertThat(uri("http://server/foo").host(null), is(uri("http:/foo"))); assertThat(uri("http://server/foo").host(""), is(uri("http:/foo"))); assertThat(uri("http://server/foo").dropHost(), is(uri("http:/foo"))); assertThat(uri("http://server:8080/foo").dropHost(), is(uri("http:/foo"))); } @Test public void supportsPort() throws Exception { assertThat(uri("http://server").port(), is(-1)); assertThat(uri("http://server").port(), is(new URI("http://server").getPort())); assertThat(uri("http://server:8080").port(), is(8080)); assertThat(uri("http://server:8080").port(), is(new URI("http://server:8080").getPort())); assertThat(uri("http://server:8080").port(7777), is(uri("http://server:7777"))); assertThat(uri("http://server:8080").port(-1), is(uri("http://server"))); assertThat(uri("http://server:8080").dropPort(), is(uri("http://server"))); } }