package org.springframework.roo.support.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.junit.Test; import org.springframework.roo.support.util.loader.Loader; /** * Unit test of {@link FileUtils} * * @author Andrew Swan * @since 1.2.0 */ public class FileUtilsTest { private static final String MISSING_FILE = "no-such-file.txt"; private static final String TEST_FILE = "sub" + File.separator + "file-utils-test.txt"; private void assertFirstDirectory(final String path, final String expectedFirstDirectory) { // Invoke final String firstDirectory = FileUtils.getFirstDirectory(path); // Check assertEquals(expectedFirstDirectory, firstDirectory); } @Test public void testBackOneDirectory() { assertEquals( "foo" + File.separator + "bar", FileUtils.backOneDirectory("foo" + File.separator + "bar" + File.separator + "baz" + File.separator)); } @Test public void testEnsureTrailingSeparatorForEmptyPath() { assertEquals(File.separator, FileUtils.ensureTrailingSeparator("")); } @Test(expected = NullPointerException.class) public void testEnsureTrailingSeparatorForNullPath() { FileUtils.ensureTrailingSeparator(null); } @Test public void testEnsureTrailingSeparatorForPathWithNoTrailingSeparator() { final String path = "foo"; assertEquals(path + File.separator, FileUtils.ensureTrailingSeparator(path)); } @Test public void testEnsureTrailingSeparatorForPathWithOneTrailingSeparator() { final String path = "foo" + File.separator; assertEquals(path, FileUtils.ensureTrailingSeparator(path)); } @Test public void testEnsureTrailingSeparatorFromPathWithMultipleTrailingSeparators() { final String path = "foo" + StringUtils.repeat(File.separator, 3); assertEquals("foo" + File.separator, FileUtils.ensureTrailingSeparator(path)); } @Test(expected = IllegalStateException.class) public void testGetCanonicalPathForInvalidFile() throws Exception { // Set up final File invalidFile = mock(File.class); when(invalidFile.getCanonicalPath()).thenThrow(new IOException("dummy")); // Invoke FileUtils.getCanonicalPath(invalidFile); } @Test public void testGetCanonicalPathForNullFile() { assertNull(FileUtils.getCanonicalPath(null)); } @Test public void testGetCanonicalPathForValidFile() throws Exception { // Set up final File validFile = mock(File.class); final String canonicalPath = "the_path"; when(validFile.getCanonicalPath()).thenReturn(canonicalPath); // Invoke final String actualPath = FileUtils.getCanonicalPath(validFile); // Check assertEquals(canonicalPath, actualPath); } @Test public void testGetFileSeparatorAsRegex() throws Exception { // Set up final String regex = FileUtils.getFileSeparatorAsRegex(); final String currentDirectory = new File(FileUtils.CURRENT_DIRECTORY).getCanonicalPath(); // Invoke final String[] pathElements = currentDirectory.split(regex); // Check assertTrue(pathElements.length > 0); } @Test public void testGetFirstDirectoryOfExistingDirectory() throws Exception { // Set up final URL url = Loader.class.getResource(TEST_FILE); final File file = org.apache.commons.io.FileUtils.toFile(url); final String directory = file.getParent(); // Invoke final String firstDirectory = FileUtils.getFirstDirectory(directory); // Check assertTrue(firstDirectory.endsWith("sub")); } @Test public void testGetFirstDirectoryOfExistingFile() { assertFirstDirectory(TEST_FILE, "sub"); } @Test public void testGetInputStreamOfFileInSubDirectory() throws Exception { // Invoke final InputStream inputStream = FileUtils.getInputStream(Loader.class, TEST_FILE); // Check final String contents = IOUtils.toString(inputStream); assertEquals("This file is required for FileUtilsTest.", contents); } @Test(expected = NullPointerException.class) public void testGetInputStreamOfInvalidFile() throws Exception { FileUtils.getInputStream(Loader.class, MISSING_FILE); } @Test public void testGetPath() { assertEquals("/org/springframework/roo/support/util/loader/sub/file-utils-test.txt", FileUtils.getPath(Loader.class, "sub/file-utils-test.txt")); } @Test public void testGetSystemDependentPathFromMultipleElements() { final String expectedPath = "foo" + File.separator + "bar"; assertEquals(expectedPath, FileUtils.getSystemDependentPath("foo", "bar")); } @Test(expected = IllegalArgumentException.class) public void testGetSystemDependentPathFromNoElements() { FileUtils.getSystemDependentPath(); } @Test(expected = NullPointerException.class) public void testGetSystemDependentPathFromNullArray() { FileUtils.getSystemDependentPath((String[]) null); } @Test public void testGetSystemDependentPathFromOneElement() { assertEquals("foo", FileUtils.getSystemDependentPath("foo")); } }