package net.paoding.rose.load.vfs; import java.io.File; import java.io.IOException; import java.net.URL; import junit.framework.TestCase; import net.paoding.rose.load.vfs.FileObject; import net.paoding.rose.load.vfs.FileSystemManager; import net.paoding.rose.load.vfs.FileType; import net.paoding.rose.load.vfs.JarFileObject; import net.paoding.rose.load.vfs.SimpleFileObject; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.springframework.util.ResourceUtils; public class FileObjectTest extends TestCase { private static ClassLoader loader = SimpleFileObject.class.getClassLoader(); public void testSimpleFileObjectDirEnd() throws IOException { FileSystemManager fs = new FileSystemManager(); String pathDir = "net/paoding/rose"; URL urlDir = loader.getResource(pathDir); FileObject parent = fs.resolveFile(urlDir); assertTrue(parent.getURL().toString().endsWith("/")); assertTrue(parent.getURL().getPath().endsWith("/")); FileObject childDir = parent.getChild("load"); assertTrue(childDir.getURL().toString().endsWith("/")); // getChildren assertTrue(ArrayUtils.contains(parent.getChildren(), childDir)); } public void testSimpleFileObject() throws IOException { FileSystemManager fs = new FileSystemManager(); // String pathFile = "net/paoding/rose/load/vfs/SimpleFileObject.class"; URL urlFile = loader.getResource(pathFile); assertNotNull(urlFile); FileObject fileObjectFile = fs.resolveFile(urlFile); assertEquals(SimpleFileObject.class, fileObjectFile.getClass()); // String pathDir = new File(urlFile.getPath()).getParent().replace('\\', '/'); pathDir = StringUtils.removeEnd(pathDir, "/"); URL urlDir = ResourceUtils.getURL(pathDir); assertNotNull(urlDir); File fileDir = new File(urlDir.getFile()); assertTrue(fileDir.exists()); FileObject fileObjectDir = fs.resolveFile(urlDir); assertEquals(SimpleFileObject.class, fileObjectDir.getClass()); File dirFile = ResourceUtils.getFile(urlDir); assertTrue(urlDir.toString().endsWith("/")); assertTrue(urlDir.getPath().endsWith("/")); assertFalse(dirFile.getPath().endsWith("/")); assertTrue(fileObjectDir.toString().endsWith("/")); // exists assertTrue(fileObjectFile.exists()); assertTrue(fileObjectDir.exists()); assertFalse(fileObjectDir.getChild("a_not_exists_file.txt").exists()); // getName assertEquals("vfs", fileObjectDir.getName().getBaseName()); assertEquals("SimpleFileObject.class", fileObjectFile.getName().getBaseName()); // getRelativeName assertEquals("SimpleFileObject.class", fileObjectDir.getName().getRelativeName( fileObjectFile.getName())); assertEquals("", fileObjectDir.getName().getRelativeName(fileObjectDir.getName())); assertEquals("", fileObjectFile.getName().getRelativeName(fileObjectFile.getName())); // getType assertSame(FileType.FOLDER, fileObjectDir.getType()); assertSame(FileType.FILE, fileObjectFile.getType()); // getChild, getParent, and equals, getChildren assertEquals(fileObjectFile, fileObjectDir.getChild("SimpleFileObject.class")); assertEquals(fileObjectDir, fileObjectFile.getParent()); assertSame(fileObjectFile, fileObjectDir.getChild("SimpleFileObject.class")); assertSame(fileObjectDir, fileObjectFile.getParent()); assertTrue(ArrayUtils.contains(fileObjectDir.getChildren(), fileObjectFile)); // getURL assertEquals(urlDir, fileObjectDir.getURL()); assertEquals(urlFile, fileObjectFile.getURL()); } public void testJarFileObjectDirEnd() throws IOException { FileSystemManager fs = new FileSystemManager(); String pathDir = "org/apache/commons/lang/"; URL urlDir = loader.getResource(pathDir); FileObject parent = fs.resolveFile(urlDir); assertTrue(parent.exists()); assertTrue(parent.getURL().toString().endsWith("/")); FileObject childDir = parent.getChild("math"); FileObject childDir2 = parent.getChild("math/"); assertTrue(childDir.exists()); assertTrue(childDir.getURL().toString().endsWith("/")); assertSame(childDir, childDir2); assertEquals("math/", parent.getName().getRelativeName(childDir.getName())); assertEquals("math/", parent.getName().getRelativeName(childDir2.getName())); } public void testJarFileObject() throws IOException { FileSystemManager fs = new FileSystemManager(); URL urlFile = loader.getResource("org/apache/commons/lang/StringUtils.class"); assertTrue(urlFile.toString().startsWith("jar:")); FileObject fileObjectFile = fs.resolveFile(urlFile); assertEquals(JarFileObject.class, fileObjectFile.getClass()); // URL urlDir = new URL(urlFile.toString().substring(0, urlFile.toString().lastIndexOf('/') + 1)); assertNotNull(urlDir); FileObject fileObjectDir = fs.resolveFile(urlDir); assertEquals(JarFileObject.class, fileObjectDir.getClass()); // exists assertTrue(fileObjectFile.exists()); assertTrue(fileObjectDir.exists()); assertFalse(fileObjectDir.getChild("a_not_exists_file.txt").exists()); // getName assertEquals("lang", fileObjectDir.getName().getBaseName()); assertEquals("StringUtils.class", fileObjectFile.getName().getBaseName()); // getRelativeName assertEquals("StringUtils.class", fileObjectDir.getName().getRelativeName( fileObjectFile.getName())); assertEquals("", fileObjectDir.getName().getRelativeName(fileObjectDir.getName())); assertEquals("", fileObjectFile.getName().getRelativeName(fileObjectFile.getName())); // getType assertSame(FileType.FOLDER, fileObjectDir.getType()); assertSame(FileType.FILE, fileObjectFile.getType()); // getChild, getParent, and equals assertEquals(fileObjectFile, fileObjectDir.getChild("StringUtils.class")); assertEquals(fileObjectDir, fileObjectFile.getParent()); assertSame(fileObjectFile, fileObjectDir.getChild("StringUtils.class")); assertSame(fileObjectDir, fileObjectFile.getParent()); assertTrue(ArrayUtils.contains(fileObjectDir.getChildren(), fileObjectFile)); // getURL assertEquals(urlDir, fileObjectDir.getURL()); assertEquals(urlFile, fileObjectFile.getURL()); } public void testJarFileRootObject() throws IOException { FileSystemManager fs = new FileSystemManager(); URL urlFile = loader.getResource("org/apache/commons/lang/StringUtils.class"); String urlString = urlFile.toString(); int index = urlString.indexOf("!/"); assertTrue(index > 0); String root = urlString.substring(0, index + 2); FileObject rootObject = fs.resolveFile(root); assertTrue(root, rootObject.exists()); assertTrue(rootObject.getChildren().length > 0); assertTrue(rootObject.getChild("org/").exists()); assertTrue(rootObject.getChild("org/") == fs.resolveFile(root + "org/")); } }