/**
Copyright (c) 2012 Delcyon, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package com.delcyon.capo.resourcemanager;
import org.junit.Assert;
import org.junit.Test;
/**
* @author jeremiah
*
*/
public class ResourceURITest
{
private static final String testURI = "jdbc:hsqldb:file:testdb/testdb?user=user\\?&password&\\&\\!systems=\\=!systems?id=:242";
private static final String testSemiColonURI = "jdbc:hsqldb:file:testdb/testdb?user=user\\?;password;\\;\\!systems=\\=!systems?id=:242";
private static final String testMixedURI = "jdbc:hsqldb:file:testdb/testdb?user=user\\?&password;\\&\\;semicolon=\\;&ersand=\\&&\\!systems=\\=!systems?id=:242";
private static final String opaqueTestURI = "scheme:/schemespecific";
private static final String testURL = "foo://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose";
private static final String testURNPath = "urn:example:animal:ferret:nose";
private static final String testMailToURN = "mailto:username@example.com?subject=Topic";
private static final String testMultiColonPathURI = "file:/home/jeremiah/java-work/delcyon-capo/capo/server/clients/by-MAC/cc:52:af:3e:61:6a";
/**
* Test method for {@link com.delcyon.capo.resourcemanager.ResourceURI#ResourceURI(java.lang.String)}.
*/
@Test
public void testResourceURI()
{
ResourceURI resourceURI = new ResourceURI(testURI);
Assert.assertEquals(null, resourceURI.getAuthority());
Assert.assertEquals("jdbc:hsqldb:file:testdb/testdb?user=user\\?&password&\\&!systems=\\=", resourceURI.getBaseURI());
Assert.assertEquals(null, resourceURI.getHierarchy());
Assert.assertEquals(null, resourceURI.getHostname());
Assert.assertEquals("testdb/testdb", resourceURI.getPath());
Assert.assertEquals(null, resourceURI.getPort());
Assert.assertEquals("user=user?&password&\\&!systems=\\=", resourceURI.getQuery());
Assert.assertEquals(null, resourceURI.getFragment());
Assert.assertEquals("jdbc:hsqldb:file:testdb/testdb?user=user\\?&password&\\&\\!systems=\\=!systems?id=:242", resourceURI.getResourceURIString());
Assert.assertEquals("jdbc", resourceURI.getScheme());
Assert.assertEquals("hsqldb:file:testdb/testdb?user=user\\?&password&\\&\\!systems=\\=!systems?id=:242", resourceURI.getSchemeSpecificPart());
Assert.assertEquals(null, resourceURI.getUserInfo());
Assert.assertEquals(true, resourceURI.isOpaque());
Assert.assertEquals(3, resourceURI.getParameterMap().size());
Assert.assertEquals("user?", resourceURI.getParameterMap().get("user"));
Assert.assertEquals("", resourceURI.getParameterMap().get("password"));
Assert.assertEquals("=", resourceURI.getParameterMap().get("&!systems"));
Assert.assertNotNull(resourceURI.getChildResourceURI());
Assert.assertEquals(1, resourceURI.getChildResourceURI().getParameterMap().size());
Assert.assertEquals(":242", resourceURI.getChildResourceURI().getParameterMap().get("id"));
resourceURI = new ResourceURI(testSemiColonURI);
Assert.assertEquals(null, resourceURI.getAuthority());
Assert.assertEquals("jdbc:hsqldb:file:testdb/testdb?user=user\\?;password;\\;!systems=\\=", resourceURI.getBaseURI());
Assert.assertEquals(null, resourceURI.getHierarchy());
Assert.assertEquals(null, resourceURI.getHostname());
Assert.assertEquals("testdb/testdb", resourceURI.getPath());
Assert.assertEquals(null, resourceURI.getPort());
Assert.assertEquals("user=user?;password;\\;!systems=\\=", resourceURI.getQuery());
Assert.assertEquals(null, resourceURI.getFragment());
Assert.assertEquals("jdbc:hsqldb:file:testdb/testdb?user=user\\?;password;\\;\\!systems=\\=!systems?id=:242", resourceURI.getResourceURIString());
Assert.assertEquals("jdbc", resourceURI.getScheme());
Assert.assertEquals("hsqldb:file:testdb/testdb?user=user\\?;password;\\;\\!systems=\\=!systems?id=:242", resourceURI.getSchemeSpecificPart());
Assert.assertEquals(null, resourceURI.getUserInfo());
Assert.assertEquals(true, resourceURI.isOpaque());
Assert.assertEquals(3, resourceURI.getParameterMap().size());
Assert.assertEquals("user?", resourceURI.getParameterMap().get("user"));
Assert.assertEquals("", resourceURI.getParameterMap().get("password"));
Assert.assertEquals("=", resourceURI.getParameterMap().get(";!systems"));
Assert.assertNotNull(resourceURI.getChildResourceURI());
Assert.assertEquals(1, resourceURI.getChildResourceURI().getParameterMap().size());
Assert.assertEquals(":242", resourceURI.getChildResourceURI().getParameterMap().get("id"));
resourceURI = new ResourceURI(testMixedURI);
Assert.assertEquals(null, resourceURI.getAuthority());
Assert.assertEquals("jdbc:hsqldb:file:testdb/testdb?user=user\\?&password;\\&\\;semicolon=\\;&ersand=\\&&!systems=\\=", resourceURI.getBaseURI());
Assert.assertEquals(null, resourceURI.getHierarchy());
Assert.assertEquals(null, resourceURI.getHostname());
Assert.assertEquals("testdb/testdb", resourceURI.getPath());
Assert.assertEquals(null, resourceURI.getPort());
Assert.assertEquals("user=user?&password;\\&\\;semicolon=\\;&ersand=\\&&!systems=\\=", resourceURI.getQuery());
Assert.assertEquals(null, resourceURI.getFragment());
Assert.assertEquals("jdbc:hsqldb:file:testdb/testdb?user=user\\?&password;\\&\\;semicolon=\\;&ersand=\\&&\\!systems=\\=!systems?id=:242", resourceURI.getResourceURIString());
Assert.assertEquals("jdbc", resourceURI.getScheme());
Assert.assertEquals("hsqldb:file:testdb/testdb?user=user\\?&password;\\&\\;semicolon=\\;&ersand=\\&&\\!systems=\\=!systems?id=:242", resourceURI.getSchemeSpecificPart());
Assert.assertEquals(null, resourceURI.getUserInfo());
Assert.assertEquals(true, resourceURI.isOpaque());
Assert.assertEquals(5, resourceURI.getParameterMap().size());
System.out.println(resourceURI.getParameterMap());
Assert.assertEquals("user?", resourceURI.getParameterMap().get("user"));
Assert.assertEquals("", resourceURI.getParameterMap().get("password"));
Assert.assertEquals("&", resourceURI.getParameterMap().get("ampersand"));
Assert.assertEquals(";", resourceURI.getParameterMap().get("&;semicolon"));
Assert.assertEquals("=", resourceURI.getParameterMap().get("!systems"));
Assert.assertNotNull(resourceURI.getChildResourceURI());
Assert.assertEquals(1, resourceURI.getChildResourceURI().getParameterMap().size());
Assert.assertEquals(":242", resourceURI.getChildResourceURI().getParameterMap().get("id"));
resourceURI = new ResourceURI(testURL);
Assert.assertEquals("username:password@example.com:8042", resourceURI.getAuthority());
Assert.assertEquals("foo://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose", resourceURI.getBaseURI());
Assert.assertEquals("username:password@example.com:8042/over/there/index.dtb", resourceURI.getHierarchy());
Assert.assertEquals("example.com", resourceURI.getHostname());
Assert.assertEquals("/over/there/index.dtb", resourceURI.getPath());
Assert.assertEquals(8042l, (long)resourceURI.getPort());
Assert.assertEquals("type=animal&name=narwhal", resourceURI.getQuery());
Assert.assertEquals("nose", resourceURI.getFragment());
Assert.assertEquals("foo://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose", resourceURI.getResourceURIString());
Assert.assertEquals("foo", resourceURI.getScheme());
Assert.assertEquals("//username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose", resourceURI.getSchemeSpecificPart());
Assert.assertEquals("username:password", resourceURI.getUserInfo());
Assert.assertEquals(false, resourceURI.isOpaque());
Assert.assertEquals(2, resourceURI.getParameterMap().size());
Assert.assertEquals("animal", resourceURI.getParameterMap().get("type"));
Assert.assertEquals("narwhal", resourceURI.getParameterMap().get("name"));
Assert.assertNull(resourceURI.getChildResourceURI());
}
/**
* Test method for {@link com.delcyon.capo.resourcemanager.ResourceURI#getScheme(java.lang.String)}.
*/
@Test
public void testGetScheme()
{
Assert.assertEquals("jdbc",ResourceURI.getScheme(testURI));
Assert.assertEquals("jdbc",ResourceURI.getScheme(testSemiColonURI));
Assert.assertEquals("foo",ResourceURI.getScheme(testURL));
Assert.assertEquals("scheme",ResourceURI.getScheme(opaqueTestURI));
}
/**
* Test method for {@link com.delcyon.capo.resourcemanager.ResourceURI#getSchemeSpecificPart(java.lang.String)}.
*/
@Test
public void testGetSchemeSpecificPart()
{
Assert.assertEquals("hsqldb:file:testdb/testdb?user=user\\?&password&\\&\\!systems=\\=!systems?id=:242",ResourceURI.getSchemeSpecificPart(testURI));
Assert.assertEquals("//username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose",ResourceURI.getSchemeSpecificPart(testURL));
}
/**
* Test method for {@link com.delcyon.capo.resourcemanager.ResourceURI#isOpaque(java.lang.String)}.
*/
@Test
public void testIsOpaque()
{
Assert.assertEquals(true,ResourceURI.isOpaque(testURI));
Assert.assertEquals(false,ResourceURI.isOpaque(opaqueTestURI));
Assert.assertEquals(false,ResourceURI.isOpaque(testURL));
}
/**
* Test method for {@link com.delcyon.capo.resourcemanager.ResourceURI#getAuthroity(java.lang.String)}.
*/
@Test
public void testGetAuthroity()
{
Assert.assertEquals("username:password@example.com:8042",ResourceURI.getAuthroity(testURL));
Assert.assertEquals(null,ResourceURI.getAuthroity(testMailToURN));
Assert.assertEquals(null,ResourceURI.getAuthroity(testURI));
Assert.assertEquals(null,ResourceURI.getAuthroity(testURNPath));
}
@Test
public void testGetUserInfo()
{
Assert.assertEquals("username:password",ResourceURI.getUserInfo(testURL));
}
@Test
public void testGetHostname()
{
Assert.assertEquals("example.com",ResourceURI.getHostname(testURL));
Assert.assertEquals(null,ResourceURI.getHostname(testURI));
Assert.assertEquals(null,ResourceURI.getHostname(opaqueTestURI));
}
@Test
public void testGetPort()
{
Assert.assertEquals(8042l,(long)ResourceURI.getPort(testURL));
Assert.assertEquals(null,ResourceURI.getPort(testURI));
Assert.assertEquals(null,ResourceURI.getPort(opaqueTestURI));
}
@Test
public void testGetBaseURI()
{
Assert.assertEquals("foo://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose",ResourceURI.getBaseURI(testURL));
Assert.assertEquals("jdbc:hsqldb:file:testdb/testdb?user=user\\?&password&\\&!systems=\\=",ResourceURI.getBaseURI(testURI));
Assert.assertEquals("scheme:/schemespecific",ResourceURI.getBaseURI(opaqueTestURI));
}
@Test
public void testHasHierarchy()
{
Assert.assertEquals(true,ResourceURI.hasHierarchy(testURL));
Assert.assertEquals(false,ResourceURI.hasHierarchy(testURI));
Assert.assertEquals(false,ResourceURI.hasHierarchy(opaqueTestURI));
Assert.assertEquals(false,ResourceURI.hasHierarchy(testURNPath));
Assert.assertEquals(false,ResourceURI.hasHierarchy(testMailToURN));
}
@Test
public void testGetHierarchy()
{
Assert.assertEquals("username:password@example.com:8042/over/there/index.dtb",ResourceURI.getHierarchy(testURL));
Assert.assertEquals(null,ResourceURI.getHierarchy(testURI));
Assert.assertEquals(null,ResourceURI.getHierarchy(opaqueTestURI));
Assert.assertEquals(null,ResourceURI.getHierarchy(testURNPath));
Assert.assertEquals(null,ResourceURI.getHierarchy(testMailToURN));
}
@Test
public void testGetPath()
{
Assert.assertEquals("/over/there/index.dtb",ResourceURI.getPath(testURL));
Assert.assertEquals("testdb/testdb",ResourceURI.getPath(testSemiColonURI));
Assert.assertEquals("testdb/testdb",ResourceURI.getPath(testURI));
Assert.assertEquals("/schemespecific",ResourceURI.getPath(opaqueTestURI));
Assert.assertEquals("example:animal:ferret:nose",ResourceURI.getPath(testURNPath));
Assert.assertEquals("username@example.com",ResourceURI.getPath(testMailToURN));
Assert.assertEquals("/home/jeremiah/java-work/delcyon-capo/capo/server/clients/by-MAC/cc:52:af:3e:61:6a",ResourceURI.getPath(testMultiColonPathURI));
}
@Test
public void testGetQuery()
{
Assert.assertEquals("type=animal&name=narwhal",ResourceURI.getQuery(testURL));
Assert.assertEquals("user=user?&password&\\&!systems=\\=",ResourceURI.getQuery(testURI));
Assert.assertEquals("user=user?;password;\\;!systems=\\=",ResourceURI.getQuery(testSemiColonURI));
Assert.assertEquals(null,ResourceURI.getQuery(opaqueTestURI));
Assert.assertEquals(null,ResourceURI.getQuery(testURNPath));
Assert.assertEquals("subject=Topic",ResourceURI.getQuery(testMailToURN));
}
@Test
public void testGetFragment()
{
Assert.assertEquals("nose",ResourceURI.getFragment(testURL));
Assert.assertEquals(null,ResourceURI.getFragment(testURI));
Assert.assertEquals(null,ResourceURI.getFragment(opaqueTestURI));
Assert.assertEquals(null,ResourceURI.getFragment(testURNPath));
Assert.assertEquals(null,ResourceURI.getFragment(testMailToURN));
}
/**
* Test method for {@link com.delcyon.capo.resourcemanager.ResourceURI#removeURN(java.lang.String)}.
*/
@Test
public void testRemoveURN()
{
Assert.assertEquals("//username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose",ResourceURI.removeURN(testURL));
Assert.assertEquals("testdb/testdb?user=user\\?&password&\\&\\!systems=\\=!systems?id=:242",ResourceURI.removeURN(testURI));
Assert.assertEquals("/schemespecific",ResourceURI.removeURN(opaqueTestURI));
}
@Test
public void testGetParts()
{
Assert.assertEquals(3, ResourceURI.getParts(testMailToURN).length);
Assert.assertEquals(13, ResourceURI.getParts(testMixedURI).length);
Assert.assertEquals(11, ResourceURI.getParts(testSemiColonURI).length);
Assert.assertEquals(11, ResourceURI.getParts(testURI).length);
Assert.assertEquals(12, ResourceURI.getParts(testURL).length);
Assert.assertEquals(5, ResourceURI.getParts(testURNPath).length);
}
}