@@ -26,7 +26,9 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.condition.Os;
import org.apache.tools.ant.taskdefs.condition.Os;
import org.junit.After;
import org.junit.After;
import org.junit.Before;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import static org.hamcrest.Matchers.endsWith;
import static org.hamcrest.Matchers.endsWith;
import static org.hamcrest.Matchers.startsWith;
import static org.hamcrest.Matchers.startsWith;
@@ -35,7 +37,7 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail ;
import static org.junit.Assume.assumeFalse ;
import static org.junit.Assume.assumeTrue;
import static org.junit.Assume.assumeTrue;
/**
/**
@@ -44,6 +46,9 @@ import static org.junit.Assume.assumeTrue;
*/
*/
public class FileUtilsTest {
public class FileUtilsTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
private File removeThis;
private File removeThis;
private String root;
private String root;
@@ -77,7 +82,8 @@ public class FileUtilsTest {
FileOutputStream fos = new FileOutputStream(removeThis);
FileOutputStream fos = new FileOutputStream(removeThis);
fos.write(new byte[0]);
fos.write(new byte[0]);
fos.close();
fos.close();
assumeTrue("Could not change file modified time", removeThis.setLastModified(removeThis.lastModified() - 2000));
assumeTrue("Could not change file modified time",
removeThis.setLastModified(removeThis.lastModified() - 2000));
long modTime = removeThis.lastModified();
long modTime = removeThis.lastModified();
assertNotEquals(0, modTime);
assertNotEquals(0, modTime);
@@ -103,82 +109,90 @@ public class FileUtilsTest {
}
}
@Test
@Test
public void testResolveFile() {
if (!Os.isFamily("dos") && !Os.isFamily("netware")) {
/*
* Start with simple absolute file names.
*/
assertEquals(File.separator,
FILE_UTILS.resolveFile(null, "/").getPath());
assertEquals(File.separator,
FILE_UTILS.resolveFile(null, "\\").getPath());
} else {
assertEqualsIgnoreDriveCase(localize(File.separator),
public void testResolveFilePosix() {
assumeTrue("DOS or NetWare", !Os.isFamily("dos") && !Os.isFamily("netware"));
/*
* Start with simple absolute file names.
*/
assertEquals(File.separator, FILE_UTILS.resolveFile(null, "/").getPath());
assertEquals(File.separator, FILE_UTILS.resolveFile(null, "\\").getPath());
}
@Test
public void testResolveFileDosOrNetware() {
assumeTrue("Not DOS or Netware", Os.isFamily("dos") || Os.isFamily("netware"));
assertEqualsIgnoreDriveCase(localize(File.separator),
FILE_UTILS.resolveFile(null, "/").getPath());
FILE_UTILS.resolveFile(null, "/").getPath());
assertEqualsIgnoreDriveCase(localize(File.separator),
assertEqualsIgnoreDriveCase(localize(File.separator),
FILE_UTILS.resolveFile(null, "\\").getPath());
FILE_UTILS.resolveFile(null, "\\").getPath());
/*
* throw in drive letters
*/
String driveSpec = "C:";
assertEquals(driveSpec + "\\",
FILE_UTILS.resolveFile(null, driveSpec + "/").getPath());
assertEquals(driveSpec + "\\",
FILE_UTILS.resolveFile(null, driveSpec + "\\").getPath());
String driveSpecLower = "c:";
assertEquals(driveSpecLower + "\\",
FILE_UTILS.resolveFile(null, driveSpecLower + "/").getPath());
assertEquals(driveSpecLower + "\\",
FILE_UTILS.resolveFile(null, driveSpecLower + "\\").getPath());
/*
* promised to eliminate consecutive slashes after drive letter.
*/
assertEquals(driveSpec + "\\",
FILE_UTILS.resolveFile(null, driveSpec + "/////").getPath());
assertEquals(driveSpec + "\\",
FILE_UTILS.resolveFile(null, driveSpec + "\\\\\\\\\\\\").getPath());
}
/*
* throw in drive letters
*/
String driveSpec = "C:";
assertEquals(driveSpec + "\\",
FILE_UTILS.resolveFile(null, driveSpec + "/").getPath());
assertEquals(driveSpec + "\\",
FILE_UTILS.resolveFile(null, driveSpec + "\\").getPath());
String driveSpecLower = "c:";
assertEquals(driveSpecLower + "\\",
FILE_UTILS.resolveFile(null, driveSpecLower + "/").getPath());
assertEquals(driveSpecLower + "\\",
FILE_UTILS.resolveFile(null, driveSpecLower + "\\").getPath());
/*
* promised to eliminate consecutive slashes after drive letter.
*/
assertEquals(driveSpec + "\\",
FILE_UTILS.resolveFile(null, driveSpec + "/////").getPath());
assertEquals(driveSpec + "\\",
FILE_UTILS.resolveFile(null, driveSpec + "\\\\\\\\\\\\").getPath());
if (Os.isFamily("netware")) {
if (Os.isFamily("netware")) {
/*
/*
* throw in NetWare volume names
* throw in NetWare volume names
*/
*/
String driveSpec = "SYS:";
driveSpec = "SYS:";
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.resolveFile(null, driveSpec + "/").getPath());
FILE_UTILS.resolveFile(null, driveSpec + "/").getPath());
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.resolveFile(null, driveSpec + "\\").getPath());
String driveSpecLower = "sys:";
FILE_UTILS.resolveFile(null, driveSpec + "\\").getPath());
driveSpecLower = "sys:";
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.resolveFile(null, driveSpecLower + "/").getPath());
FILE_UTILS.resolveFile(null, driveSpecLower + "/").getPath());
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.resolveFile(null, driveSpecLower + "\\").getPath());
FILE_UTILS.resolveFile(null, driveSpecLower + "\\").getPath());
/*
/*
* promised to eliminate consecutive slashes after drive letter.
* promised to eliminate consecutive slashes after drive letter.
*/
*/
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.resolveFile(null, driveSpec + "/////").getPath());
FILE_UTILS.resolveFile(null, driveSpec + "/////").getPath());
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.resolveFile(null, driveSpec + "\\\\\\\\\\\\").getPath());
} else if (!Os.isFamily("dos")) {
/*
* drive letters must be considered just normal filenames.
*/
String driveSpec = "C:";
String udir = System.getProperty("user.dir");
assertEquals(udir + File.separator + driveSpec,
FILE_UTILS.resolveFile(null, driveSpec + "/").getPath());
assertEquals(udir + File.separator + driveSpec,
FILE_UTILS.resolveFile(null, driveSpec + "\\").getPath());
String driveSpecLower = "c:";
assertEquals(udir + File.separator + driveSpecLower,
FILE_UTILS.resolveFile(null, driveSpecLower + "/").getPath());
assertEquals(udir + File.separator + driveSpecLower,
FILE_UTILS.resolveFile(null, driveSpecLower + "\\").getPath());
FILE_UTILS.resolveFile(null, driveSpec + "\\\\\\\\\\\\").getPath());
}
}
}
@Test
public void testResolveFileNotDos() {
assumeFalse("is DOS", Os.isFamily("dos"));
/*
/*
* Now test some relative file name magic.
* drive letters must be considered just normal filenames.
*/
*/
String driveSpec = "C:";
String udir = System.getProperty("user.dir");
assertEquals(udir + File.separator + driveSpec,
FILE_UTILS.resolveFile(null, driveSpec + "/").getPath());
assertEquals(udir + File.separator + driveSpec,
FILE_UTILS.resolveFile(null, driveSpec + "\\").getPath());
String driveSpecLower = "c:";
assertEquals(udir + File.separator + driveSpecLower,
FILE_UTILS.resolveFile(null, driveSpecLower + "/").getPath());
assertEquals(udir + File.separator + driveSpecLower,
FILE_UTILS.resolveFile(null, driveSpecLower + "\\").getPath());
}
/*
* Test some relative file name magic.
*/
@Test
public void testResolveRelativeFile() {
assertEquals(localize("/1/2/3/4"),
assertEquals(localize("/1/2/3/4"),
FILE_UTILS.resolveFile(new File(localize("/1/2/3")), "4").getPath());
FILE_UTILS.resolveFile(new File(localize("/1/2/3")), "4").getPath());
assertEquals(localize("/1/2/3/4"),
assertEquals(localize("/1/2/3/4"),
@@ -203,95 +217,94 @@ public class FileUtilsTest {
}
}
@Test
@Test
public void testNormalize() {
if (!Os.isFamily("dos") && !Os.isFamily("netware")) {
/*
* Start with simple absolute file names.
*/
assertEquals(File.separator,
FILE_UTILS.normalize("/").getPath());
assertEquals(File.separator,
FILE_UTILS.normalize("\\").getPath());
} else {
try {
FILE_UTILS.normalize("/").getPath();
fail("normalized \"/\" on dos or netware");
} catch (Exception e) {
}
try {
FILE_UTILS.normalize("\\").getPath();
fail("normalized \"\\\" on dos or netware");
} catch (Exception e) {
}
public void testNormalizePosix() {
assumeTrue("DOS or NetWare", !Os.isFamily("dos") && !Os.isFamily("netware"));
/*
* Start with simple absolute file names.
*/
assertEquals(File.separator, FILE_UTILS.normalize("/").getPath());
assertEquals(File.separator, FILE_UTILS.normalize("\\").getPath());
// Expected exception caught
thrown.expect(BuildException.class);
String driveSpec = "C:";
assertEquals(driveSpec, FILE_UTILS.normalize(driveSpec).getPath());
}
@Test
public void testNormalizeDosOrNetwareFailures() {
assumeTrue("Not DOS or Netware", Os.isFamily("dos") || Os.isFamily("netware"));
thrown.expect(IOException.class);
try {
FILE_UTILS.normalize("/").getPath();
} finally {
FILE_UTILS.normalize("\\").getPath();
}
}
}
@Test
public void testNormalizeDosOrNetware() {
assumeTrue("Not DOS or Netware", Os.isFamily("dos") || Os.isFamily("netware"));
if (Os.isFamily("dos")) {
if (Os.isFamily("dos")) {
/*
/*
* throw in drive letters
* throw in drive letters
*/
*/
String driveSpec = "C:";
String driveSpec = "C:";
try {
FILE_UTILS.normalize(driveSpec).getPath();
fail(driveSpec + " is not an absolute path");
} catch (Exception e) {
}
assertEquals(driveSpec + "\\",
assertEquals(driveSpec + "\\",
FILE_UTILS.normalize(driveSpec + "/").getPath());
FILE_UTILS.normalize(driveSpec + "/").getPath());
assertEquals(driveSpec + "\\",
assertEquals(driveSpec + "\\",
FILE_UTILS.normalize(driveSpec + "\\").getPath());
FILE_UTILS.normalize(driveSpec + "\\").getPath());
String driveSpecLower = "c:";
String driveSpecLower = "c:";
assertEquals(driveSpecLower + "\\",
assertEquals(driveSpecLower + "\\",
FILE_UTILS.normalize(driveSpecLower + "/").getPath());
FILE_UTILS.normalize(driveSpecLower + "/").getPath());
assertEquals(driveSpecLower + "\\",
assertEquals(driveSpecLower + "\\",
FILE_UTILS.normalize(driveSpecLower + "\\").getPath());
FILE_UTILS.normalize(driveSpecLower + "\\").getPath());
/*
/*
* promised to eliminate consecutive slashes after drive letter.
* promised to eliminate consecutive slashes after drive letter.
*/
*/
assertEquals(driveSpec + "\\",
assertEquals(driveSpec + "\\",
FILE_UTILS.normalize(driveSpec + "/////").getPath());
FILE_UTILS.normalize(driveSpec + "/////").getPath());
assertEquals(driveSpec + "\\",
assertEquals(driveSpec + "\\",
FILE_UTILS.normalize(driveSpec + "\\\\\\\\\\\\").getPath());
FILE_UTILS.normalize(driveSpec + "\\\\\\\\\\\\").getPath());
// Expected exception caught
thrown.expect(BuildException.class);
FILE_UTILS.normalize(driveSpec).getPath();
} else if (Os.isFamily("netware")) {
} else if (Os.isFamily("netware")) {
/*
/*
* throw in NetWare volume names
* throw in NetWare volume names
*/
*/
String driveSpec = "SYS:";
String driveSpec = "SYS:";
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.normalize(driveSpec).getPath());
FILE_UTILS.normalize(driveSpec).getPath());
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.normalize(driveSpec + "/").getPath());
FILE_UTILS.normalize(driveSpec + "/").getPath());
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.normalize(driveSpec + "\\").getPath());
FILE_UTILS.normalize(driveSpec + "\\").getPath());
String driveSpecLower = "sys:";
String driveSpecLower = "sys:";
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.normalize(driveSpecLower).getPath());
FILE_UTILS.normalize(driveSpecLower).getPath());
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.normalize(driveSpecLower + "/").getPath());
FILE_UTILS.normalize(driveSpecLower + "/").getPath());
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.normalize(driveSpecLower + "\\").getPath());
FILE_UTILS.normalize(driveSpecLower + "\\").getPath());
assertEquals(driveSpec + "\\junk",
assertEquals(driveSpec + "\\junk",
FILE_UTILS.normalize(driveSpecLower + "\\junk").getPath());
FILE_UTILS.normalize(driveSpecLower + "\\junk").getPath());
/*
/*
* promised to eliminate consecutive slashes after drive letter.
* promised to eliminate consecutive slashes after drive letter.
*/
*/
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.normalize(driveSpec + "/////").getPath());
FILE_UTILS.normalize(driveSpec + "/////").getPath());
assertEquals(driveSpec,
assertEquals(driveSpec,
FILE_UTILS.normalize(driveSpec + "\\\\\\\\\\\\").getPath());
} else {
try {
String driveSpec = "C:";
assertEquals(driveSpec,
FILE_UTILS.normalize(driveSpec).getPath());
fail("Expected failure, C: isn't an absolute path on other os's");
} catch (BuildException e) {
// Passed test
}
FILE_UTILS.normalize(driveSpec + "\\\\\\\\\\\\").getPath());
}
}
}
/*
* Now test some relative file name magic.
*/
/**
* Test some relative file name magic.
*/
@Test
public void testNormalizeRelativeFile() {
assertEquals(localize("/1/2/3/4"),
assertEquals(localize("/1/2/3/4"),
FILE_UTILS.normalize(localize("/1/2/3/4")).getPath());
FILE_UTILS.normalize(localize("/1/2/3/4")).getPath());
assertEquals(localize("/1/2/3/4"),
assertEquals(localize("/1/2/3/4"),
@@ -309,16 +322,13 @@ public class FileUtilsTest {
assertEquals(localize("/1/2/3/4"),
assertEquals(localize("/1/2/3/4"),
FILE_UTILS.normalize(localize("/1/2/3/..\\../5/..\\./2/./3/6\\../4")).getPath());
FILE_UTILS.normalize(localize("/1/2/3/..\\../5/..\\./2/./3/6\\../4")).getPath());
try {
FILE_UTILS.normalize("foo");
fail("foo is not an absolute path");
} catch (BuildException e) {
// Expected exception caught
}
assertEquals("will not go outside FS root (but will not throw an exception either)",
assertEquals("will not go outside FS root (but will not throw an exception either)",
new File(localize("/1/../../b")),
new File(localize("/1/../../b")),
FILE_UTILS.normalize(localize("/1/../../b")));
FILE_UTILS.normalize(localize("/1/../../b")));
// Expected exception caught
thrown.expect(BuildException.class);
FILE_UTILS.normalize("foo");
}
}
/**
/**
@@ -326,15 +336,12 @@ public class FileUtilsTest {
*/
*/
@Test
@Test
public void testNullArgs() {
public void testNullArgs() {
try {
FILE_UTILS.normalize(null);
fail("successfully normalized a null-file");
} catch (NullPointerException npe) {
// Expected exception caught
}
File f = FILE_UTILS.resolveFile(null, "a");
File f = FILE_UTILS.resolveFile(null, "a");
assertEquals(f, new File("a").getAbsoluteFile());
assertEquals(f, new File("a").getAbsoluteFile());
// Expected exception caught
thrown.expect(NullPointerException.class);
FILE_UTILS.normalize(null);
}
}