// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package util;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import static util.RegexTestCase.*;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
public class FileUtilTest {
@Test
public void testCreateDir() throws Exception {
File dir = FileUtil.createDir("temp");
assertTrue(dir.exists());
assertTrue(dir.isDirectory());
FileUtil.deleteFileSystemDirectory(dir);
}
@Test
public void createFileWithComplexPath() throws Exception {
File file = FileUtil.createFile("temp/sub1/sub2/sub3/file", "");
assertTrue(file.exists());
FileUtil.deleteFileSystemDirectory("temp");
}
@Test
public void testGetDirectoryListingEmpty() throws Exception {
File dir = FileUtil.createDir("temp");
assertEquals(0, FileUtil.getDirectoryListing(dir).length);
FileUtil.deleteFileSystemDirectory(dir);
}
@Test
public void testOrganizeFilesOneFile() throws Exception {
File dir = FileUtil.createDir("temp");
File file = createFileInDir(dir, "file.txt");
assertEquals(1, FileUtil.getDirectoryListing(dir).length);
assertEquals(file, FileUtil.getDirectoryListing(dir)[0]);
FileUtil.deleteFileSystemDirectory(dir);
}
@Test
public void testOrganizeFilesFiveFiles() throws Exception {
File dir = FileUtil.createDir("temp");
File file3 = createFileInDir(dir, "dFile.txt");
File file1 = createFileInDir(dir, "bFile.txt");
File file4 = createFileInDir(dir, "eFile.txt");
File file0 = createFileInDir(dir, "aFile.txt");
File file2 = createFileInDir(dir, "cFile.txt");
assertEquals(5, FileUtil.getDirectoryListing(dir).length);
assertEquals(file0, FileUtil.getDirectoryListing(dir)[0]);
assertEquals(file1, FileUtil.getDirectoryListing(dir)[1]);
assertEquals(file2, FileUtil.getDirectoryListing(dir)[2]);
assertEquals(file3, FileUtil.getDirectoryListing(dir)[3]);
assertEquals(file4, FileUtil.getDirectoryListing(dir)[4]);
FileUtil.deleteFileSystemDirectory(dir);
}
@Test
public void testOrganizeFilesOneSubDir() throws Exception {
File dir = FileUtil.createDir("temp");
File subDir = createSubDir(dir, "subDir");
assertEquals(1, FileUtil.getDirectoryListing(dir).length);
assertEquals(subDir, FileUtil.getDirectoryListing(dir)[0]);
FileUtil.deleteFileSystemDirectory(dir);
}
@Test
public void testOrganizeFilesFiveSubDirs() throws Exception {
File dir = FileUtil.createDir("temp");
File dir3 = createSubDir(dir, "dDir");
File dir1 = createSubDir(dir, "bDir");
File dir4 = createSubDir(dir, "eDir");
File dir0 = createSubDir(dir, "aDir");
File dir2 = createSubDir(dir, "cDir");
assertEquals(5, FileUtil.getDirectoryListing(dir).length);
assertEquals(dir0, FileUtil.getDirectoryListing(dir)[0]);
assertEquals(dir1, FileUtil.getDirectoryListing(dir)[1]);
assertEquals(dir2, FileUtil.getDirectoryListing(dir)[2]);
assertEquals(dir3, FileUtil.getDirectoryListing(dir)[3]);
assertEquals(dir4, FileUtil.getDirectoryListing(dir)[4]);
FileUtil.deleteFileSystemDirectory(dir);
}
@Test
public void testOrganizeFilesMixOfFilesAndDirs() {
File dir = FileUtil.createDir("temp");
File dir3 = createSubDir(dir, "dDir");
File file3 = createFileInDir(dir, "dFile.txt");
File file0 = createFileInDir(dir, "aFile.txt");
File dir1 = createSubDir(dir, "bDir");
File file4 = createFileInDir(dir, "eFile.txt");
File dir4 = createSubDir(dir, "eDir");
File dir0 = createSubDir(dir, "aDir");
File file1 = createFileInDir(dir, "bFile.txt");
File dir2 = createSubDir(dir, "cDir");
File file2 = createFileInDir(dir, "cFile.txt");
assertEquals(10, FileUtil.getDirectoryListing(dir).length);
assertEquals(dir0, FileUtil.getDirectoryListing(dir)[0]);
assertEquals(dir1, FileUtil.getDirectoryListing(dir)[1]);
assertEquals(dir2, FileUtil.getDirectoryListing(dir)[2]);
assertEquals(dir3, FileUtil.getDirectoryListing(dir)[3]);
assertEquals(dir4, FileUtil.getDirectoryListing(dir)[4]);
assertEquals(file0, FileUtil.getDirectoryListing(dir)[5]);
assertEquals(file1, FileUtil.getDirectoryListing(dir)[6]);
assertEquals(file2, FileUtil.getDirectoryListing(dir)[7]);
assertEquals(file3, FileUtil.getDirectoryListing(dir)[8]);
assertEquals(file4, FileUtil.getDirectoryListing(dir)[9]);
FileUtil.deleteFileSystemDirectory(dir);
}
private File createFileInDir(File dir, String fileName) {
return FileUtil.createFile(FileUtil.buildPath(new String[]{dir.getPath(), fileName}), "");
}
private File createSubDir(File dir, String subDirName) {
return FileUtil.createDir(FileUtil.buildPath(new String[]{dir.getPath(), subDirName}));
}
@Test
public void testBuildPathEmpty() throws Exception {
assertEquals("", FileUtil.buildPath(new String[]{}));
}
@Test
public void testBuildPathOneElement() throws Exception {
assertEquals("a", FileUtil.buildPath(new String[]{"a"}));
}
@Test
public void testBuildPathThreeElements() throws Exception {
String separator = System.getProperty("file.separator");
assertEquals("a" + separator + "b" + separator + "c", FileUtil.buildPath(new String[]{"a", "b", "c"}));
}
@Test
public void testAddUrlToClasspath() throws Exception {
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
assertTrue(systemClassLoader instanceof URLClassLoader);
URLClassLoader classLoader = (URLClassLoader) systemClassLoader;
URL sampleUrl = new File("src").toURI().toURL();
String classpath = classpathAsString(classLoader);
assertNotSubString(sampleUrl.toString(), classpath);
FileUtil.addUrlToClasspath(sampleUrl);
classpath = classpathAsString(classLoader);
assertSubString(sampleUrl.toString(), classpath);
}
@Test
public void testAddMultipleUrlsToClasspath() throws Exception {
String separator = System.getProperty("path.separator");
String paths = "/blah/blah" + separator + "C" + otherSeperator(separator) + "\\foo\\bar";
FileUtil.addItemsToClasspath(paths);
URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
String classpath = classpathAsString(classLoader);
assertSubString("/blah/blah", classpath);
assertMatches("[C" + otherSeperator(separator) + "?foo?bar]", classpath);
}
private String otherSeperator(String separator) {
return separator.equals(";") ? ":" : ";";
}
private String classpathAsString(URLClassLoader classLoader) {
URL[] urls = classLoader.getURLs();
StringBuffer urlString = new StringBuffer();
for (int i = 0; i < urls.length; i++)
urlString.append(urls[i].toString()).append(":");
return urlString.toString();
}
}