package nl.siegmann.epublib.fileset; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import junit.framework.TestCase; import nl.siegmann.epublib.domain.Book; import org.apache.commons.io.IOUtils; import org.apache.commons.vfs.FileObject; import org.apache.commons.vfs.FileSystemManager; import org.apache.commons.vfs.NameScope; import org.apache.commons.vfs.VFS; public class FilesetBookCreatorTest extends TestCase { public void test1() { try { FileObject dir = createDirWithSourceFiles(); Book book = FilesetBookCreator.createBookFromDirectory(dir); assertEquals(5, book.getSpine().size()); assertEquals(5, book.getTableOfContents().size()); } catch(Exception e) { e.printStackTrace(); assertTrue(false); } } public void test2() { try { FileObject dir = createDirWithSourceFiles(); // this file should be ignored copyInputStreamToFileObject(new ByteArrayInputStream("hi".getBytes()), dir, "foo.nonsense"); Book book = FilesetBookCreator.createBookFromDirectory(dir); assertEquals(5, book.getSpine().size()); assertEquals(5, book.getTableOfContents().size()); } catch(Exception e) { e.printStackTrace(); assertTrue(false); } } private FileObject createDirWithSourceFiles() throws IOException { FileSystemManager fsManager = VFS.getManager(); FileObject dir = fsManager.resolveFile("ram://fileset_test_dir"); dir.createFolder(); String[] sourceFiles = new String[] { "book1.css", "chapter1.html", "chapter2_1.html", "chapter2.html", "chapter3.html", "cover.html", "flowers_320x240.jpg", "cover.png" }; String testSourcesDir = "/book1"; for (String filename: sourceFiles) { String sourceFileName = testSourcesDir + "/" + filename; copyResourceToFileObject(sourceFileName, dir, filename); } return dir; } private void copyResourceToFileObject(String resourceUrl, FileObject targetDir, String targetFilename) throws IOException { InputStream inputStream = this.getClass().getResourceAsStream(resourceUrl); copyInputStreamToFileObject(inputStream, targetDir, targetFilename); } private void copyInputStreamToFileObject(InputStream inputStream, FileObject targetDir, String targetFilename) throws IOException { FileObject targetFile = targetDir.resolveFile(targetFilename, NameScope.DESCENDENT); targetFile.createFile(); IOUtils.copy(inputStream, targetFile.getContent().getOutputStream()); targetFile.getContent().close(); } }