package org.ocpsoft.urlbuilder;
import static org.junit.Assert.assertEquals;
import org.junit.Assert;
import org.junit.Test;
public class AddressBuilderTest
{
@Test
public void testBuildEverything()
{
Assert.assertEquals("http://example.com:8080/search/table?q=query+string#foo",
AddressBuilder.begin()
.scheme("http")
.domain("example.com")
.port(8080)
.path("/{s}/{t}")
.set("s", "search")
.set("t", "table")
.queryEncoded("q", "query string")
.anchor("foo")
.build()
.toString());
}
@Test
public void testBuildEverythingResult()
{
Assert.assertEquals("http://example.com:8080/search/table?q=query+string#foo",
AddressBuilder.begin()
.scheme("http")
.domain("example.com")
.port(8080)
.path("/{s}/{t}")
.set("s", "search")
.set("t", "table")
.queryEncoded("q", "query string")
.anchor("foo")
.build()
.toString());
}
@Test
public void testBuildQuery()
{
Assert.assertEquals("?q=200",
AddressBuilder.begin().query("q", 200).toString());
}
@Test
public void testBuildQueryResult()
{
Assert.assertEquals("?q=200",
AddressBuilder.begin().query("q", 200).build().toString());
}
@Test
public void testBuildQueryMultipleNames()
{
Assert.assertEquals("?q=query&e=string",
AddressBuilder.begin().query("q", "query").query("e", "string").toString());
}
@Test
public void testBuildQueryMultipleNamesResult()
{
Assert.assertEquals("?q=query&e=string",
AddressBuilder.begin().query("q", "query").query("e", "string").build().toString());
}
@Test
public void testBuildQueryMultipleValues()
{
Assert.assertEquals("?q=10&q=20",
AddressBuilder.begin().query("q", 10, 20).toString());
}
@Test
public void testBuildQueryMultipleValuesResult()
{
Assert.assertEquals("?q=10&q=20",
AddressBuilder.begin().query("q", 10, 20).build().toString());
}
@Test
public void testBuildQueryLiteral()
{
Assert.assertEquals("?q=200",
AddressBuilder.begin().queryLiteral("q=200").toString());
}
@Test
public void testBuildQueryLiteralResult()
{
Assert.assertEquals("?q=200",
AddressBuilder.begin().queryLiteral("q=200").build().toString());
}
@Test
public void testBuildQueryLiteralMultipleNames()
{
Assert.assertEquals("?q=query&e=string",
AddressBuilder.begin().queryLiteral("q=query&e=string").toString());
}
@Test
public void testBuildQueryLiteralMultipleNamesResult()
{
Assert.assertEquals("?q=query&e=string",
AddressBuilder.begin().queryLiteral("q=query&e=string").build().toString());
}
@Test
public void testBuildQueryLiteralMultipleValues()
{
Assert.assertEquals("?q=10&q=20",
AddressBuilder.begin().queryLiteral("q=10&q=20").toString());
}
@Test
public void testBuildQueryLiteralMultipleValuesResult()
{
Assert.assertEquals("?q=10&q=20",
AddressBuilder.begin().queryLiteral("q=10&q=20").build().toString());
}
@Test
public void testBuildPathSimple()
{
Assert.assertEquals("/store/23",
AddressBuilder.begin().path("/store/23").toString());
}
@Test
public void testBuildPathSimpleResult()
{
Assert.assertEquals("/store/23",
AddressBuilder.begin().path("/store/23").build().toString());
}
@Test
public void testBuildPathWithOneParameter()
{
Assert.assertEquals("/store/23",
AddressBuilder.begin().path("/store/{item}").set("item", 23).build().toString());
}
@Test
public void testBuildPathWithOneParameterResult()
{
Assert.assertEquals("/store/23",
AddressBuilder.begin().path("/store/{item}").set("item", 23).build().toString());
}
@Test
public void testBuildPathWithParameters()
{
Assert.assertEquals("/store/23/buy",
AddressBuilder.begin().path("/store/{item}/{action}").set("item", 23).set("action", "buy").build()
.toString());
}
@Test
public void testBuildPathWithParametersResult()
{
Assert.assertEquals("/store/23/buy",
AddressBuilder.begin().path("/store/{item}/{action}").set("item", 23).set("action", "buy").build()
.toString());
}
@Test
public void testBuildHostAndPath()
{
Assert.assertEquals("//ocpsoft.org/store/23/buy",
AddressBuilder.begin()
.domain("ocpsoft.org")
.path("/store/{item}/{action}").set("item", 23).set("action", "buy").build().toString());
}
@Test
public void testBuildHostAndQuery()
{
Assert.assertEquals("//ocpsoft.org/?buy=23",
AddressBuilder.begin()
.domain("ocpsoft.org")
.query("buy", "23").build().toString());
}
@Test
public void testBuildHostAndPathResult()
{
Assert.assertEquals("//ocpsoft.org/store/23/buy",
AddressBuilder.begin().domain("ocpsoft.org")
.path("/store/{item}/{action}").set("item", 23).set("action", "buy").build().toString());
}
@Test
public void testProtocolAndPort()
{
Assert.assertEquals("file::80",
AddressBuilder.begin().scheme("file").port(80).toString());
}
@Test
public void testProtocolAndPortResult()
{
Assert.assertEquals("file::80",
AddressBuilder.begin().scheme("file").port(80).build().toString());
}
@Test
public void testFromStringWithFullUrl()
{
Address address = AddressBuilder.create("http://www.google.com:80/search?q=foobar");
assertEquals("http", address.getScheme());
assertEquals("www.google.com", address.getDomain());
assertEquals(Integer.valueOf(80), address.getPort());
assertEquals("/search", address.getPath());
assertEquals("q=foobar", address.getQuery());
assertEquals("/search?q=foobar", address.getPathAndQuery());
}
@Test
public void testFromStringWithoutPort()
{
Address address = AddressBuilder.create("http://www.google.com/search?q=foobar");
assertEquals("http", address.getScheme());
assertEquals("www.google.com", address.getDomain());
assertEquals(null, address.getPort());
assertEquals("/search", address.getPath());
assertEquals("q=foobar", address.getQuery());
assertEquals("/search?q=foobar", address.getPathAndQuery());
}
@Test
public void testFromStringOnlyWithPathAndQuery()
{
Address address = AddressBuilder.create("/search?q=foobar");
assertEquals(null, address.getScheme());
assertEquals(null, address.getDomain());
assertEquals(null, address.getPort());
assertEquals("/search", address.getPath());
assertEquals("q=foobar", address.getQuery());
assertEquals("/search?q=foobar", address.getPathAndQuery());
}
@Test
public void testFromStringOnlyWithPathAndQuery2()
{
Address address = AddressBuilder.create("search?q=foobar");
assertEquals(null, address.getScheme());
assertEquals(null, address.getDomain());
assertEquals(null, address.getPort());
assertEquals("search", address.getPath());
assertEquals("q=foobar", address.getQuery());
assertEquals("search?q=foobar", address.getPathAndQuery());
}
@Test
public void testCreateSchemalessUrl()
{
Address address = AddressBuilder.begin()
.scheme(null)
.domain("example.com")
.path("/test.txt")
.build();
assertEquals("//example.com/test.txt", address.toString());
}
@Test
public void testBuildSchemeSpecificPart()
{
Assert.assertEquals("mailto:contact@ocpsoft.org?subject=Howdy Lincoln!",
AddressBuilder.begin()
.scheme("mailto")
.schemeSpecificPart("contact@ocpsoft.org?subject=Howdy Lincoln!")
.toString());
}
@Test
public void testBuildSchemeSpecificPartResult()
{
Assert.assertEquals("mailto:contact@ocpsoft.org?subject=Howdy Lincoln!",
AddressBuilder.begin()
.scheme("mailto")
.schemeSpecificPart("contact@ocpsoft.org?subject=Howdy Lincoln!")
.build().toString());
}
@Test
public void testAnchorOnly()
{
assertEquals("#foobar", AddressBuilder.create("#foobar").toString());
}
@Test
public void testEmptyAnchorOnly()
{
assertEquals("#", AddressBuilder.create("#").toString());
}
@Test
public void shouldCreateAddressFromUrlWithCurlyBrace()
{
Address address = AddressBuilder.create("http://localhost/somepath/%7Bsomething%7D");
assertEquals("/somepath/%7Bsomething%7D", address.getPath());
assertEquals("http://localhost/somepath/%7Bsomething%7D", address.toString());
}
@Test
public void testQueryWithNull() {
assertEquals("",
AddressBuilder.begin().query(null).build().toString());
}
@Test
public void testQueryDecodedWithNull() {
assertEquals("",
AddressBuilder.begin().queryDecoded(null).build().toString());
}
@Test
public void testQueryEncodedWithNull() {
assertEquals("",
AddressBuilder.begin().queryEncoded(null).build().toString());
}
@Test
public void testSetEncodedWithNull() {
assertEquals("//localhost",
AddressBuilder.begin().domain("localhost").setEncoded(null).build().toString());
}
@Test
public void testSetDecodedWithNull() {
assertEquals("//localhost",
AddressBuilder.begin().domain("localhost").setDecoded(null).build().toString());
}
}