blob: b5a0f4914fde692e99de2164d62a58bc8938abd3 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.maven.wagon;
import java.io.File;
import junit.framework.TestCase;
/**
* @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
*/
public class PathUtilsTest extends TestCase {
public void testFilenameResolving() {
assertEquals("filename", PathUtils.filename("dir/filename"));
assertEquals("filename", PathUtils.filename("filename"));
assertEquals("filename", PathUtils.filename("dir1/dir2/filename"));
}
public void testDirResolving() {
assertEquals("dir", PathUtils.dirname("dir/filename"));
assertEquals("", PathUtils.dirname("filename"));
assertEquals("dir1/dir2", PathUtils.dirname("dir1/dir2/filename"));
}
// A characterization test that demonstrates the existing behavior does not
// match the Unix dirname function when a trailing slash is present.
public void testDirnameDoesNotStripTrailingSlash() {
assertEquals("dir1/dir2/filename", PathUtils.dirname("dir1/dir2/filename/"));
}
// A characterization test that demonstrates the existing behavior does not
// match the Unix dirname function when a trailing slash is present.
public void testFilenameDoesNotStripTrailingSlash() {
assertEquals("", PathUtils.filename("dir1/dir2/filename/"));
}
public void testDirSplitting() {
final String path = "a/b/c";
final String[] dirs = PathUtils.dirnames(path);
assertNotNull(dirs);
assertEquals(2, dirs.length);
assertEquals("a", dirs[0]);
assertEquals("b", dirs[1]);
}
public void testHostResolving() {
assertEquals("www.codehaus.org", PathUtils.host("http://www.codehaus.org"));
assertEquals("www.codehaus.org", PathUtils.host("HTTP://www.codehaus.org"));
assertEquals("localhost", PathUtils.host(null));
assertEquals("localhost", PathUtils.host("file:///c:/temp"));
assertEquals("localhost", PathUtils.host("FILE:///c:/temp"));
}
public void testScmHostResolving() {
assertEquals("www.codehaus.org", PathUtils.host("scm:svn:http://www.codehaus.org"));
assertEquals("www.codehaus.org", PathUtils.host("SCM:SVN:HTTP://www.codehaus.org"));
assertEquals("www.codehaus.org", PathUtils.host("scm:svn:http://www.codehaus.org/repos/module"));
assertEquals("www.codehaus.org", PathUtils.host("SCM:SVN:HTTP://www.codehaus.org/repos/module"));
assertEquals("www.codehaus.org", PathUtils.host("scm:cvs:pserver:anoncvs@www.codehaus.org:/root"));
assertEquals("www.codehaus.org", PathUtils.host("SCM:CVS:pserver:anoncvs@www.codehaus.org:/root"));
}
public void testProtocolResolving() {
assertEquals("http", PathUtils.protocol("http://www.codehause.org"));
assertEquals("HTTP", PathUtils.protocol("HTTP://www.codehause.org"));
assertEquals("file", PathUtils.protocol("file:///c:/temp"));
assertEquals("scm", PathUtils.protocol("scm:svn:http://localhost/repos/module"));
assertEquals("scm", PathUtils.protocol("scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic"));
}
public void testUserInfo() {
String urlWithUsername = "http://brett@www.codehaus.org";
assertEquals("brett", PathUtils.user(urlWithUsername));
assertNull(PathUtils.password(urlWithUsername));
assertEquals("www.codehaus.org", PathUtils.host(urlWithUsername));
assertEquals("/", PathUtils.basedir(urlWithUsername));
String urlWithUsernamePassword = "http://brett:porter@www.codehaus.org";
assertEquals("brett", PathUtils.user(urlWithUsernamePassword));
assertEquals("porter", PathUtils.password(urlWithUsernamePassword));
assertEquals("www.codehaus.org", PathUtils.host(urlWithUsernamePassword));
assertEquals("/", PathUtils.basedir(urlWithUsernamePassword));
}
public void testSubversionUserInfo() {
String urlWithUsername = "scm:svn:http://brett@www.codehaus.org";
assertEquals("brett", PathUtils.user(urlWithUsername));
assertNull(PathUtils.password(urlWithUsername));
assertEquals("www.codehaus.org", PathUtils.host(urlWithUsername));
assertEquals("/", PathUtils.basedir(urlWithUsername));
String urlWithUsernamePassword = "scm:svn:http://brett:porter@www.codehaus.org";
assertEquals("brett", PathUtils.user(urlWithUsernamePassword));
assertEquals("porter", PathUtils.password(urlWithUsernamePassword));
assertEquals("www.codehaus.org", PathUtils.host(urlWithUsernamePassword));
assertEquals("/", PathUtils.basedir(urlWithUsernamePassword));
String urlWithUpperCaseProtocol = "SCM:SVN:HTTP://brett@www.codehaus.org";
assertEquals("brett", PathUtils.user(urlWithUpperCaseProtocol));
assertNull(PathUtils.password(urlWithUpperCaseProtocol));
assertEquals("www.codehaus.org", PathUtils.host(urlWithUpperCaseProtocol));
assertEquals("/", PathUtils.basedir(urlWithUpperCaseProtocol));
}
public void testCvsUserInfo() {
String urlWithUsername = "scm:cvs:pserver:brett@www.codehaus.org";
assertEquals("brett", PathUtils.user(urlWithUsername));
assertNull(PathUtils.password(urlWithUsername));
assertEquals("www.codehaus.org", PathUtils.host(urlWithUsername));
assertEquals("/", PathUtils.basedir(urlWithUsername));
String urlWithUsernamePassword = "scm:cvs:pserver:brett:porter@www.codehaus.org";
assertEquals("brett", PathUtils.user(urlWithUsernamePassword));
assertEquals("porter", PathUtils.password(urlWithUsernamePassword));
assertEquals("www.codehaus.org", PathUtils.host(urlWithUsernamePassword));
assertEquals("/", PathUtils.basedir(urlWithUsernamePassword));
String urlWithUpperCaseProtocol = "SCM:CVS:pserver:brett@www.codehaus.org";
assertEquals("brett", PathUtils.user(urlWithUpperCaseProtocol));
assertNull(PathUtils.password(urlWithUpperCaseProtocol));
assertEquals("www.codehaus.org", PathUtils.host(urlWithUpperCaseProtocol));
assertEquals("/", PathUtils.basedir(urlWithUpperCaseProtocol));
}
public void testFileBasedir() {
// see http://www.mozilla.org/quality/networking/testing/filetests.html
// strict forms
assertEquals("c:/temp", PathUtils.basedir("file:///c|/temp"));
assertEquals("localhost", PathUtils.host("file:///c|/temp"));
assertEquals("c:/temp", PathUtils.basedir("file://localhost/c|/temp"));
assertEquals("localhost", PathUtils.host("file://localhost/c|/temp"));
assertEquals("/temp", PathUtils.basedir("file:///temp"));
assertEquals("localhost", PathUtils.host("file:///temp"));
assertEquals("/temp", PathUtils.basedir("file://localhost/temp"));
assertEquals("localhost", PathUtils.host("file://localhost/temp"));
// strict form, with : for drive separator
assertEquals("c:/temp", PathUtils.basedir("file:///c:/temp"));
assertEquals("localhost", PathUtils.host("file:///c:/temp"));
assertEquals("c:/temp", PathUtils.basedir("file://localhost/c:/temp"));
assertEquals("localhost", PathUtils.host("file://localhost/c:/temp"));
// convenience forms
assertEquals("c:/temp", PathUtils.basedir("file://c:/temp"));
assertEquals("c:/temp", PathUtils.basedir("file://c|/temp"));
assertEquals("c:/temp", PathUtils.basedir("file:c:/temp"));
assertEquals("c:/temp", PathUtils.basedir("file:c|/temp"));
assertEquals("/temp", PathUtils.basedir("file:/temp"));
// URL decoding
assertEquals("c:/my docs", PathUtils.basedir("file:///c:/my docs"));
assertEquals("c:/my docs", PathUtils.basedir("file:///c:/my%20docs"));
assertEquals(
"c:/name #%20?{}[]<>.txt", PathUtils.basedir("file:///c:/name%20%23%2520%3F%7B%7D%5B%5D%3C%3E.txt"));
assertEquals("c:/temp", PathUtils.basedir("FILE:///c:/temp"));
assertEquals("localhost", PathUtils.host("FILE:///c:/temp"));
}
public void testEmptyBasedir() {
assertEquals("/", PathUtils.basedir("http://www.codehaus.org:80"));
assertEquals("/", PathUtils.basedir("http://www.codehaus.org"));
assertEquals("/", PathUtils.basedir("http://www.codehaus.org:80/"));
assertEquals("/", PathUtils.basedir("http://www.codehaus.org/"));
assertEquals("/", PathUtils.basedir("HTTP://www.codehaus.org/"));
}
public void testEmptyProtocol() {
assertEquals("", PathUtils.protocol("placeholder-only"));
assertEquals("", PathUtils.protocol("placeholder-only/module-a"));
assertEquals("placeholder-only", PathUtils.authorization("placeholder-only"));
assertEquals("placeholder-only", PathUtils.authorization("placeholder-only/module-a"));
assertEquals(-1, PathUtils.port("placeholder-only"));
assertEquals(-1, PathUtils.port("placeholder-only/module-a"));
assertEquals("/", PathUtils.basedir("placeholder-only"));
assertEquals("/module-a", PathUtils.basedir("placeholder-only/module-a"));
}
public void testPortResolving() {
assertEquals(80, PathUtils.port("http://www.codehause.org:80/maven"));
assertEquals(80, PathUtils.port("HTTP://www.codehause.org:80/maven"));
assertEquals(WagonConstants.UNKNOWN_PORT, PathUtils.port("http://localhost/temp"));
assertEquals(10, PathUtils.port("ftp://localhost:10"));
assertEquals(10, PathUtils.port("FTP://localhost:10"));
}
public void testScmPortResolving() {
assertEquals(80, PathUtils.port("scm:svn:http://www.codehaus.org:80/maven"));
assertEquals(80, PathUtils.port("SCM:SVN:HTTP://www.codehaus.org:80/maven"));
assertEquals(WagonConstants.UNKNOWN_PORT, PathUtils.port("scm:cvs:pserver:anoncvs@localhost:/temp:module"));
assertEquals(2402, PathUtils.port("scm:cvs:pserver:anoncvs@localhost:2402/temp:module"));
assertEquals(2402, PathUtils.port("SCM:CVS:pserver:anoncvs@localhost:2402/temp:module"));
}
public void testScmBasedir() {
assertEquals("/maven", PathUtils.basedir("scm:svn:http://www.codehause.org/maven"));
assertEquals("/maven", PathUtils.basedir("SCM:SVN:HTTP://www.codehause.org/maven"));
assertEquals("/maven", PathUtils.basedir("scm:svn:http://www.codehause.org:80/maven"));
assertEquals("/maven", PathUtils.basedir("scm:cvs:pserver:anoncvs@www.codehause.org:80/maven"));
assertEquals("/maven", PathUtils.basedir("scm:cvs:pserver:anoncvs@www.codehause.org:/maven"));
assertEquals("/maven/module", PathUtils.basedir("scm:cvs:pserver:anoncvs@www.codehause.org:80/maven:module"));
assertEquals("/maven/module", PathUtils.basedir("scm:cvs:pserver:anoncvs@www.codehause.org:/maven:module"));
assertEquals("/maven/module", PathUtils.basedir("SCM:CVS:pserver:anoncvs@www.codehause.org:/maven:module"));
}
public void testPortBasedir() {
assertEquals("/maven", PathUtils.basedir("http://www.codehause.org:80/maven"));
assertEquals("/temp", PathUtils.basedir("http://localhost/temp"));
assertEquals("c:/temp", PathUtils.basedir("file://c:/temp"));
assertEquals("/", PathUtils.basedir("http://localhost:80/"));
assertEquals("/", PathUtils.basedir("http://localhost/"));
}
public void testIpV4() {
assertUrl("http://127.0.0.1", "http", null, null, "127.0.0.1", -1, "/");
assertUrl("http://127.0.0.1:8080", "http", null, null, "127.0.0.1", 8080, "/");
assertUrl("http://127.0.0.1/oo/rest/users", "http", null, null, "127.0.0.1", -1, "/oo/rest/users");
assertUrl("http://127.0.0.1:8080/oo/rest/users", "http", null, null, "127.0.0.1", 8080, "/oo/rest/users");
assertUrl("http://user:password@127.0.0.1", "http", "user", "password", "127.0.0.1", -1, "/");
assertUrl("http://user:password@127.0.0.1:8080", "http", "user", "password", "127.0.0.1", 8080, "/");
assertUrl(
"http://user:password@127.0.0.1/oo/rest/users",
"http",
"user",
"password",
"127.0.0.1",
-1,
"/oo/rest/users");
assertUrl(
"http://user:password@127.0.0.1:8080/oo/rest/users",
"http",
"user",
"password",
"127.0.0.1",
8080,
"/oo/rest/users");
assertUrl(
"scm:svn:http://user:password@127.0.0.1:8080/oo/rest/users",
"scm",
"user",
"password",
"127.0.0.1",
8080,
"/oo/rest/users");
}
public void testIPv6() {
assertUrl(
"http://user:password@[fff:::1]:7891/oo/rest/users",
"http",
"user",
"password",
"fff:::1",
7891,
"/oo/rest/users");
assertUrl("http://[fff:::1]:7891/oo/rest/users", "http", null, null, "fff:::1", 7891, "/oo/rest/users");
assertUrl(
"http://user:password@[fff:::1]/oo/rest/users",
"http",
"user",
"password",
"fff:::1",
-1,
"/oo/rest/users");
assertUrl("http://user:password@[fff:::1]:7891", "http", "user", "password", "fff:::1", 7891, "/");
assertUrl(
"http://user:password@[fff:000::222:1111]:7891/oo/rest/users",
"http",
"user",
"password",
"fff:000::222:1111",
7891,
"/oo/rest/users");
assertUrl(
"http://[fff:000::222:1111]:7891/oo/rest/users",
"http",
null,
null,
"fff:000::222:1111",
7891,
"/oo/rest/users");
assertUrl(
"http://user:password@[fff:000::222:1111]/oo/rest/users",
"http",
"user",
"password",
"fff:000::222:1111",
-1,
"/oo/rest/users");
assertUrl(
"http://user:password@[fff:000::222:1111]:7891",
"http",
"user",
"password",
"fff:000::222:1111",
7891,
"/");
assertUrl(
"http://user:password@16.60.56.58:7891/oo/rest/users",
"http",
"user",
"password",
"16.60.56.58",
7891,
"/oo/rest/users");
assertUrl("http://16.60.56.58:7891/oo/rest/users", "http", null, null, "16.60.56.58", 7891, "/oo/rest/users");
assertUrl(
"http://user:password@16.60.56.58/oo/rest/users",
"http",
"user",
"password",
"16.60.56.58",
-1,
"/oo/rest/users");
assertUrl("http://user:password@16.60.56.58:7891", "http", "user", "password", "16.60.56.58", 7891, "/");
assertUrl(
"http://user:password@16.60.56.58:7891/oo/rest/users",
"http",
"user",
"password",
"16.60.56.58",
7891,
"/oo/rest/users");
assertUrl("http://16.60.56.58:7891/oo/rest/users", "http", null, null, "16.60.56.58", 7891, "/oo/rest/users");
assertUrl(
"http://user:password@16.60.56.58/oo/rest/users",
"http",
"user",
"password",
"16.60.56.58",
-1,
"/oo/rest/users");
assertUrl("http://user:password@16.60.56.58:7891", "http", "user", "password", "16.60.56.58", 7891, "/");
}
private void assertUrl(
String url, String protocol, String user, String password, String host, int port, String basedir) {
assertEquals(protocol, PathUtils.protocol(url));
assertEquals(user, PathUtils.user(url));
assertEquals(password, PathUtils.password(url));
assertEquals(host, PathUtils.host(url));
assertEquals(port, PathUtils.port(url));
assertEquals(basedir, PathUtils.basedir(url));
}
public void testToRelative() {
assertEquals(
"dir",
PathUtils.toRelative(
new File("/home/user").getAbsoluteFile(), new File("/home/user/dir").getAbsolutePath()));
assertEquals(
"dir",
PathUtils.toRelative(
new File("C:/home/user").getAbsoluteFile(), new File("C:/home/user/dir").getAbsolutePath()));
assertEquals(
"dir/subdir",
PathUtils.toRelative(
new File("/home/user").getAbsoluteFile(), new File("/home/user/dir/subdir").getAbsolutePath()));
assertEquals(
"dir/subdir",
PathUtils.toRelative(
new File("C:/home/user").getAbsoluteFile(),
new File("C:/home/user/dir/subdir").getAbsolutePath()));
assertEquals(
".",
PathUtils.toRelative(
new File("/home/user").getAbsoluteFile(), new File("/home/user").getAbsolutePath()));
assertEquals(
".",
PathUtils.toRelative(
new File("C:/home/user").getAbsoluteFile(), new File("C:/home/user").getAbsolutePath()));
}
}