// 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(); } }