| package org.apache.maven.shared.utils.io; |
| |
| import static org.hamcrest.CoreMatchers.containsString; |
| import static org.hamcrest.CoreMatchers.hasItems; |
| import static org.hamcrest.CoreMatchers.is; |
| import static org.hamcrest.CoreMatchers.not; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertThat; |
| import static org.junit.Assert.assertTrue; |
| import static org.junit.Assert.fail; |
| import static org.junit.Assume.assumeFalse; |
| import static org.junit.Assume.assumeThat; |
| import static org.junit.Assume.assumeTrue; |
| |
| import java.io.BufferedOutputStream; |
| import java.io.File; |
| import java.io.FileInputStream; |
| import java.io.FileNotFoundException; |
| import java.io.FileOutputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.OutputStream; |
| import java.net.URL; |
| import java.util.Arrays; |
| import java.util.HashSet; |
| import java.util.List; |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| import org.apache.maven.shared.utils.Os; |
| import org.apache.maven.shared.utils.testhelpers.FileTestHelper; |
| import org.hamcrest.CoreMatchers; |
| import org.junit.Before; |
| import org.junit.Ignore; |
| import org.junit.Rule; |
| import org.junit.Test; |
| import org.junit.rules.TemporaryFolder; |
| import org.junit.rules.TestName; |
| |
| /** |
| * This is used to test FileUtils for correctness. |
| * |
| * @author Peter Donald |
| * @author Matthew Hawthorne |
| * @author Stephen Colebourne |
| * @author Jim Harrington |
| * @version $Id: FileUtilsTestCase.java 1081025 2011-03-13 00:45:10Z niallp $ |
| * @see FileUtils |
| */ |
| public class FileUtilsTest |
| { |
| |
| // Test data |
| |
| @Rule |
| public TemporaryFolder tempFolder = new TemporaryFolder(); |
| |
| @Rule |
| public TestName name = new TestName(); |
| |
| /** |
| * Size of test directory. |
| */ |
| private static final int TEST_DIRECTORY_SIZE = 0; |
| |
| /** |
| * Delay in milliseconds to make sure test for "last modified date" are accurate |
| */ |
| //private static final int LAST_MODIFIED_DELAY = 600; |
| |
| private File testFile1; |
| |
| private File testFile2; |
| |
| private long testFile1Size; |
| |
| private long testFile2Size; |
| |
| /** |
| * @see junit.framework.TestCase#setUp() |
| */ |
| @Before |
| public void setUp() |
| throws Exception |
| { |
| testFile1 = tempFolder.newFile( "file1-test.txt" ); |
| testFile2 = tempFolder.newFile( "file1a-test.txt" ); |
| |
| testFile1Size = (int) testFile1.length(); |
| testFile2Size = (int) testFile2.length(); |
| |
| tempFolder.getRoot().mkdirs(); |
| createFile( testFile1, testFile1Size ); |
| createFile( testFile2, testFile2Size ); |
| FileUtils.deleteDirectory( tempFolder.getRoot() ); |
| tempFolder.getRoot().mkdirs(); |
| createFile( testFile1, testFile1Size ); |
| createFile( testFile2, testFile2Size ); |
| } |
| |
| void createFile( File file, long size ) |
| throws IOException |
| { |
| if ( !file.getParentFile().exists() ) |
| { |
| throw new IOException( "Cannot create file " + file + " as the parent directory does not exist" ); |
| } |
| |
| OutputStream out = null; |
| try |
| { |
| out = new BufferedOutputStream( new FileOutputStream( file ) ); |
| FileTestHelper.generateTestData( out, size ); |
| out.close(); |
| out = null; |
| } |
| finally |
| { |
| IOUtil.close( out ); |
| } |
| } |
| |
| |
| /** |
| * Assert that the content of a file is equal to that in a byte[]. |
| */ |
| void assertEqualContent( byte[] b0, File file ) |
| throws IOException |
| { |
| InputStream is = new java.io.FileInputStream( file ); |
| int count = 0, numRead = 0; |
| byte[] b1 = new byte[b0.length]; |
| try |
| { |
| while ( count < b0.length && numRead >= 0 ) |
| { |
| numRead = is.read( b1, count, b0.length ); |
| count += numRead; |
| } |
| assertThat( "Different number of bytes: ", count, is( b0.length ) ); |
| for ( int i = 0; i < count; i++ ) |
| { |
| assertThat( "byte " + i + " differs", b1[i], is( b0[i] ) ); |
| } |
| } |
| finally |
| { |
| is.close(); |
| } |
| } |
| |
| void deleteFile( File file ) |
| { |
| if ( file.exists() ) |
| { |
| assertThat( "Couldn't delete file: " + file, file.delete(), is( true ) ); |
| } |
| } |
| |
| |
| //----------------------------------------------------------------------- |
| @Test |
| public void toFile1() |
| throws Exception |
| { |
| URL url = new URL( "file", null, "a/b/c/file.txt" ); |
| File file = FileUtils.toFile( url ); |
| assertThat( file.toString(), containsString( "file.txt" ) ); |
| } |
| |
| @Test |
| public void toFile2() |
| throws Exception |
| { |
| URL url = new URL( "file", null, "a/b/c/file%20n%61me%2520.tx%74" ); |
| File file = FileUtils.toFile( url ); |
| assertThat( file.toString(), containsString( "file name%20.txt" ) ); |
| } |
| |
| @Test |
| public void toFile3() |
| throws Exception |
| { |
| assertThat( FileUtils.toFile( null ), CoreMatchers.nullValue() ); |
| assertThat( FileUtils.toFile( new URL( "http://jakarta.apache.org" ) ), CoreMatchers.nullValue() ); |
| } |
| |
| @Test( expected = NumberFormatException.class ) |
| public void toFile4() |
| throws Exception |
| { |
| URL url = new URL( "file", null, "a/b/c/file%%20%me.txt%" ); |
| File file = FileUtils.toFile( url ); |
| assertThat( file.toString(), containsString( "file% %me.txt%" ) ); |
| } |
| |
| /** |
| * IO-252 |
| */ |
| @Test |
| public void toFile5() |
| throws Exception |
| { |
| URL url = new URL( "file", null, "both%20are%20100%20%25%20true" ); |
| File file = FileUtils.toFile( url ); |
| assertThat( file.toString(), is( "both are 100 % true" ) ); |
| } |
| |
| @Test |
| public void toFileUtf8() |
| throws Exception |
| { |
| URL url = new URL( "file", null, "/home/%C3%A4%C3%B6%C3%BC%C3%9F" ); |
| File file = FileUtils.toFile( url ); |
| assertThat( file.toString(), not( containsString( "\u00E4\u00F6\u00FC\u00DF" ) ) ); |
| } |
| |
| // toURLs |
| |
| @Test |
| public void toURLs1() |
| throws Exception |
| { |
| File[] files = new File[]{ new File( tempFolder.getRoot(), "file1.txt" ), new File( tempFolder.getRoot(), "file2.txt" ), |
| new File( tempFolder.getRoot(), "test file.txt" ), }; |
| URL[] urls = FileUtils.toURLs( files ); |
| |
| assertThat( urls.length, is( files.length ) ); |
| assertThat( urls[0].toExternalForm().startsWith( "file:" ), is( true ) ); |
| assertThat( urls[0].toExternalForm().contains( "file1.txt" ), is( true ) ); |
| assertThat( urls[1].toExternalForm().startsWith( "file:" ), is( true ) ); |
| assertThat( urls[1].toExternalForm(), containsString( "file2.txt" ) ); |
| |
| // Test escaped char |
| assertThat( urls[2].toExternalForm().startsWith( "file:" ), is( true ) ); |
| assertThat( urls[2].toExternalForm(), containsString( "test%20file.txt" ) ); |
| } |
| |
| // @Test public void toURLs2() throws Exception { |
| // File[] files = new File[] { |
| // new File(getTestDirectory(), "file1.txt"), |
| // null, |
| // }; |
| // URL[] urls = FileUtils.toURLs(files); |
| // |
| // assertEquals(files.length, urls.length); |
| // assertEquals(true, urls[0].toExternalForm().startsWith("file:")); |
| // assertEquals(true, urls[0].toExternalForm().indexOf("file1.txt") > 0); |
| // assertEquals(null, urls[1]); |
| // } |
| // |
| // @Test public void toURLs3() throws Exception { |
| // File[] files = null; |
| // URL[] urls = FileUtils.toURLs(files); |
| // |
| // assertEquals(0, urls.length); |
| // } |
| |
| // contentEquals |
| |
| @Test |
| public void contentEquals() |
| throws Exception |
| { |
| // Non-existent files |
| File file = new File( tempFolder.getRoot(), name.getMethodName() ); |
| File file2 = new File( tempFolder.getRoot(), name.getMethodName() + "2" ); |
| // both don't exist |
| assertThat( FileUtils.contentEquals( file, file ), is( true ) ); |
| assertThat( FileUtils.contentEquals( file, file2 ), is( true ) ); |
| assertThat( FileUtils.contentEquals( file2, file2 ), is( true ) ); |
| assertThat( FileUtils.contentEquals( file2, file ), is( true ) ); |
| |
| // Directories |
| FileUtils.contentEquals( tempFolder.getRoot(), tempFolder.getRoot() ); |
| |
| // Different files |
| File objFile1 = new File( tempFolder.getRoot(), name.getMethodName() + ".object" ); |
| objFile1.deleteOnExit(); |
| FileUtils.copyURLToFile( getClass().getResource( "/java/lang/Object.class" ), objFile1 ); |
| |
| File objFile1b = new File( tempFolder.getRoot(), name.getMethodName() + ".object2" ); |
| objFile1.deleteOnExit(); |
| FileUtils.copyURLToFile( getClass().getResource( "/java/lang/Object.class" ), objFile1b ); |
| |
| File objFile2 = new File( tempFolder.getRoot(), name.getMethodName() + ".collection" ); |
| objFile2.deleteOnExit(); |
| FileUtils.copyURLToFile( getClass().getResource( "/java/util/Collection.class" ), objFile2 ); |
| |
| assertThat( FileUtils.contentEquals( objFile1, objFile2 ), is( false ) ); |
| assertThat( FileUtils.contentEquals( objFile1b, objFile2 ), is( false ) ); |
| assertThat( FileUtils.contentEquals( objFile1, objFile1b ), is( true ) ); |
| |
| assertThat( FileUtils.contentEquals( objFile1, objFile1 ), is( true ) ); |
| assertThat( FileUtils.contentEquals( objFile1b, objFile1b ), is( true ) ); |
| assertThat( FileUtils.contentEquals( objFile2, objFile2 ), is( true ) ); |
| |
| // Equal files |
| file.createNewFile(); |
| file2.createNewFile(); |
| assertThat( FileUtils.contentEquals( file, file ), is( true ) ); |
| assertThat( FileUtils.contentEquals( file, file2 ), is( true ) ); |
| } |
| |
| // copyURLToFile |
| |
| @Test |
| public void copyURLToFile() |
| throws Exception |
| { |
| // Creates file |
| File file = new File( tempFolder.getRoot(), name.getMethodName() ); |
| file.deleteOnExit(); |
| |
| // Loads resource |
| String resourceName = "/java/lang/Object.class"; |
| FileUtils.copyURLToFile( getClass().getResource( resourceName ), file ); |
| |
| // Tests that resuorce was copied correctly |
| FileInputStream fis = new FileInputStream( file ); |
| try |
| { |
| assertThat( "Content is not equal.", |
| IOUtil.contentEquals( getClass().getResourceAsStream( resourceName ), fis ), is( true ) ); |
| } |
| finally |
| { |
| fis.close(); |
| } |
| //TODO Maybe test copy to itself like for copyFile() |
| } |
| |
| // forceMkdir |
| |
| @Test |
| public void forceMkdir() |
| throws Exception |
| { |
| // Tests with existing directory |
| FileUtils.forceMkdir( tempFolder.getRoot() ); |
| |
| // Creates test file |
| File testFile = new File( tempFolder.getRoot(), name.getMethodName() ); |
| testFile.deleteOnExit(); |
| testFile.createNewFile(); |
| assertThat( "Test file does not exist.", testFile.exists(), is( true ) ); |
| |
| // Tests with existing file |
| try |
| { |
| FileUtils.forceMkdir( testFile ); |
| fail( "Exception expected." ); |
| } |
| catch ( IOException ex ) |
| { |
| } |
| |
| testFile.delete(); |
| |
| // Tests with non-existent directory |
| FileUtils.forceMkdir( testFile ); |
| assertThat( "Directory was not created.", testFile.exists(), is( true ) ); |
| } |
| |
| // sizeOfDirectory |
| |
| @Test |
| public void sizeOfDirectory() |
| throws Exception |
| { |
| File file = new File( tempFolder.getRoot(), name.getMethodName() ); |
| |
| // Non-existent file |
| try |
| { |
| FileUtils.sizeOfDirectory( file ); |
| fail( "Exception expected." ); |
| } |
| catch ( IllegalArgumentException ex ) |
| { |
| } |
| |
| // Creates file |
| file.createNewFile(); |
| file.deleteOnExit(); |
| |
| // Existing file |
| try |
| { |
| FileUtils.sizeOfDirectory( file ); |
| fail( "Exception expected." ); |
| } |
| catch ( IllegalArgumentException ex ) |
| { |
| } |
| |
| // Existing directory |
| file.delete(); |
| file.mkdir(); |
| |
| assertThat( "Unexpected directory size", FileUtils.sizeOfDirectory( file ), is( (long) TEST_DIRECTORY_SIZE ) ); |
| } |
| |
| // copyFile |
| |
| @Test |
| public void copyFile1() |
| throws Exception |
| { |
| File destination = new File( tempFolder.getRoot(), "copy1.txt" ); |
| |
| //Thread.sleep(LAST_MODIFIED_DELAY); |
| //This is to slow things down so we can catch if |
| //the lastModified date is not ok |
| |
| FileUtils.copyFile( testFile1, destination ); |
| assertThat( "Check Exist", destination.exists(), is( true ) ); |
| assertThat( "Check Full copy", destination.length(), is( testFile1Size ) ); |
| /* disabled: Thread.sleep doesn't work reliantly for this case |
| assertTrue("Check last modified date preserved", |
| testFile1.lastModified() == destination.lastModified());*/ |
| } |
| |
| @Test |
| public void copyFileThatIsSymlink() |
| throws Exception |
| { |
| assumeTrue( Java7Support.isAtLeastJava7() ); |
| assumeFalse( Os.isFamily( Os.FAMILY_WINDOWS ) ); |
| |
| File destination = new File( tempFolder.getRoot(), "symCopy.txt" ); |
| |
| File testDir = SymlinkTestSetup.createStandardSymlinkTestDir( new File( "target/test/symlinkCopy" ) ); |
| |
| FileUtils.copyFile( new File( testDir, "symR" ), destination ); |
| assertTrue( Java7Support.isSymLink( destination )); |
| } |
| |
| |
| |
| @Test |
| public void deleteFile() |
| throws Exception |
| { |
| File destination = new File( tempFolder.getRoot(), "copy1.txt" ); |
| FileUtils.copyFile( testFile1, destination ); |
| FileUtils.delete( destination ); |
| assertThat( "Check Exist", destination.exists(), is( false ) ); |
| } |
| |
| @Test(expected = IOException.class) |
| public void deleteFileNofile() |
| throws Exception |
| { |
| File destination = new File( "abc/cde" ); |
| FileUtils.delete( destination ); |
| } |
| |
| @Test |
| public void deleteFileLegacy() |
| throws Exception |
| { |
| File destination = new File( tempFolder.getRoot(), "copy1.txt" ); |
| FileUtils.copyFile( testFile1, destination ); |
| assertTrue( FileUtils.deleteLegacyStyle( destination ) ); |
| } |
| |
| @Test |
| public void deleteFileLegacyNofile() |
| throws Exception |
| { |
| File destination = new File( "abc/cde" ); |
| assertFalse( FileUtils.deleteLegacyStyle( destination ) ); |
| } |
| |
| @Test |
| public void copyFile2() |
| throws Exception |
| { |
| File destination = new File( tempFolder.getRoot(), "copy2.txt" ); |
| |
| //Thread.sleep(LAST_MODIFIED_DELAY); |
| //This is to slow things down so we can catch if |
| //the lastModified date is not ok |
| |
| FileUtils.copyFile( testFile1, destination ); |
| assertThat( "Check Exist", destination.exists(), is( true ) ); |
| assertThat( "Check Full copy", destination.length(), is( testFile2Size ) ); |
| /* disabled: Thread.sleep doesn't work reliably for this case |
| assertTrue("Check last modified date preserved", |
| testFile1.lastModified() == destination.lastModified());*/ |
| } |
| |
| @Test |
| @Ignore( "Commons test case that is failing for plexus" ) |
| public void copyToSelf() |
| throws Exception |
| { |
| File destination = new File( tempFolder.getRoot(), "copy3.txt" ); |
| //Prepare a test file |
| FileUtils.copyFile( testFile1, destination ); |
| |
| FileUtils.copyFile( destination, destination ); |
| } |
| |
| @Test |
| @Ignore( "Commons test case that is failing for plexus" ) |
| public void copyDirectoryToDirectory_NonExistingDest() |
| throws Exception |
| { |
| createFile( testFile1, 1234 ); |
| createFile( testFile2, 4321 ); |
| File srcDir = tempFolder.getRoot(); |
| File subDir = new File( srcDir, "sub" ); |
| subDir.mkdir(); |
| File subFile = new File( subDir, "A.txt" ); |
| FileUtils.fileWrite( subFile, "UTF8", "HELLO WORLD" ); |
| File destDir = new File( System.getProperty( "java.io.tmpdir" ), "tmp-FileUtilsTestCase" ); |
| FileUtils.deleteDirectory( destDir ); |
| File actualDestDir = new File( destDir, srcDir.getName() ); |
| |
| FileUtils.copyDirectory( srcDir, destDir ); |
| |
| assertThat( "Check exists", destDir.exists(), is( true ) ); |
| assertThat( "Check exists", actualDestDir.exists(), is( true ) ); |
| assertThat( "Check size", FileUtils.sizeOfDirectory( actualDestDir ), |
| is( FileUtils.sizeOfDirectory( srcDir ) ) ); |
| assertThat( new File( actualDestDir, "sub/A.txt" ).exists(), is( true ) ); |
| FileUtils.deleteDirectory( destDir ); |
| } |
| |
| @Test |
| @Ignore( "Commons test case that is failing for plexus" ) |
| public void copyDirectoryToNonExistingDest() |
| throws Exception |
| { |
| createFile( testFile1, 1234 ); |
| createFile( testFile2, 4321 ); |
| File srcDir = tempFolder.getRoot(); |
| File subDir = new File( srcDir, "sub" ); |
| subDir.mkdir(); |
| File subFile = new File( subDir, "A.txt" ); |
| FileUtils.fileWrite( subFile, "UTF8", "HELLO WORLD" ); |
| File destDir = new File( System.getProperty( "java.io.tmpdir" ), "tmp-FileUtilsTestCase" ); |
| FileUtils.deleteDirectory( destDir ); |
| |
| FileUtils.copyDirectory( srcDir, destDir ); |
| |
| assertThat( "Check exists", destDir.exists(), is( true ) ); |
| assertThat( "Check size", FileUtils.sizeOfDirectory( destDir ), is( FileUtils.sizeOfDirectory( srcDir ) ) ); |
| assertThat( new File( destDir, "sub/A.txt" ).exists(), is( true ) ); |
| FileUtils.deleteDirectory( destDir ); |
| } |
| |
| @Test |
| @Ignore( "Commons test case that is failing for plexus" ) |
| public void copyDirectoryToExistingDest() |
| throws Exception |
| { |
| createFile( testFile1, 1234 ); |
| createFile( testFile2, 4321 ); |
| File srcDir = tempFolder.getRoot(); |
| File subDir = new File( srcDir, "sub" ); |
| subDir.mkdir(); |
| File subFile = new File( subDir, "A.txt" ); |
| FileUtils.fileWrite( subFile, "UTF8", "HELLO WORLD" ); |
| File destDir = new File( System.getProperty( "java.io.tmpdir" ), "tmp-FileUtilsTestCase" ); |
| FileUtils.deleteDirectory( destDir ); |
| destDir.mkdirs(); |
| |
| FileUtils.copyDirectory( srcDir, destDir ); |
| |
| assertThat( FileUtils.sizeOfDirectory( destDir ), is( FileUtils.sizeOfDirectory( srcDir ) ) ); |
| assertThat( new File( destDir, "sub/A.txt" ).exists(), is( true ) ); |
| } |
| |
| /** |
| * Test for IO-141 |
| */ |
| @Test |
| @Ignore( "Commons test case that is failing for plexus" ) |
| public void copyDirectoryToChild() |
| throws Exception |
| { |
| File grandParentDir = new File( tempFolder.getRoot(), "grandparent" ); |
| File parentDir = new File( grandParentDir, "parent" ); |
| File childDir = new File( parentDir, "child" ); |
| createFilesForTestCopyDirectory( grandParentDir, parentDir, childDir ); |
| |
| long expectedCount = |
| FileUtils.getFileAndDirectoryNames( grandParentDir, null, null, true, true, true, true ).size() |
| + FileUtils.getFileAndDirectoryNames( parentDir, null, null, true, true, true, true ).size(); |
| long expectedSize = FileUtils.sizeOfDirectory( grandParentDir ) + FileUtils.sizeOfDirectory( parentDir ); |
| FileUtils.copyDirectory( parentDir, childDir ); |
| assertThat( |
| 1L * FileUtils.getFileAndDirectoryNames( grandParentDir, null, null, true, true, true, true ).size(), |
| is( expectedCount ) ); |
| assertThat( FileUtils.sizeOfDirectory( grandParentDir ), is( expectedSize ) ); |
| } |
| |
| /** |
| * Test for IO-141 |
| */ |
| @Test |
| @Ignore( "Commons test case that is failing for plexus" ) |
| public void copyDirectoryToGrandChild() |
| throws Exception |
| { |
| File grandParentDir = new File( tempFolder.getRoot(), "grandparent" ); |
| File parentDir = new File( grandParentDir, "parent" ); |
| File childDir = new File( parentDir, "child" ); |
| createFilesForTestCopyDirectory( grandParentDir, parentDir, childDir ); |
| |
| long expectedCount = |
| ( FileUtils.getFileAndDirectoryNames( grandParentDir, null, null, true, true, true, true ).size() * 2 ); |
| long expectedSize = ( FileUtils.sizeOfDirectory( grandParentDir ) * 2 ); |
| FileUtils.copyDirectory( grandParentDir, childDir ); |
| assertThat( |
| 1L * FileUtils.getFileAndDirectoryNames( grandParentDir, null, null, true, true, true, true ).size(), |
| is( expectedCount ) ); |
| assertThat( FileUtils.sizeOfDirectory( grandParentDir ), is( expectedSize ) ); |
| } |
| |
| /** |
| * Test for IO-217 FileUtils.copyDirectoryToDirectory makes infinite loops |
| */ |
| @Test |
| public void copyDirectoryToItself() |
| throws Exception |
| { |
| File dir = new File( tempFolder.getRoot(), "itself" ); |
| dir.mkdirs(); |
| FileUtils.copyDirectory( dir, dir ); |
| assertThat( FileUtils.getFileAndDirectoryNames( dir, null, null, true, true, true, true ).size(), is( 1 ) ); |
| } |
| |
| private void createFilesForTestCopyDirectory( File grandParentDir, File parentDir, File childDir ) |
| throws Exception |
| { |
| File childDir2 = new File( parentDir, "child2" ); |
| File grandChildDir = new File( childDir, "grandChild" ); |
| File grandChild2Dir = new File( childDir2, "grandChild2" ); |
| File file1 = new File( grandParentDir, "file1.txt" ); |
| File file2 = new File( parentDir, "file2.txt" ); |
| File file3 = new File( childDir, "file3.txt" ); |
| File file4 = new File( childDir2, "file4.txt" ); |
| File file5 = new File( grandChildDir, "file5.txt" ); |
| File file6 = new File( grandChild2Dir, "file6.txt" ); |
| FileUtils.deleteDirectory( grandParentDir ); |
| grandChildDir.mkdirs(); |
| grandChild2Dir.mkdirs(); |
| FileUtils.fileWrite( file1, "UTF8", "File 1 in grandparent" ); |
| FileUtils.fileWrite( file2, "UTF8", "File 2 in parent" ); |
| FileUtils.fileWrite( file3, "UTF8", "File 3 in child" ); |
| FileUtils.fileWrite( file4, "UTF8", "File 4 in child2" ); |
| FileUtils.fileWrite( file5, "UTF8", "File 5 in grandChild" ); |
| FileUtils.fileWrite( file6, "UTF8", "File 6 in grandChild2" ); |
| } |
| |
| @Test |
| @Ignore( "Commons test case that is failing for plexus" ) |
| public void copyDirectoryErrors() |
| throws Exception |
| { |
| try |
| { |
| FileUtils.copyDirectory( null, null ); |
| fail(); |
| } |
| catch ( NullPointerException ex ) |
| { |
| } |
| try |
| { |
| FileUtils.copyDirectory( new File( "a" ), null ); |
| fail(); |
| } |
| catch ( NullPointerException ex ) |
| { |
| } |
| try |
| { |
| FileUtils.copyDirectory( null, new File( "a" ) ); |
| fail(); |
| } |
| catch ( NullPointerException ex ) |
| { |
| } |
| try |
| { |
| FileUtils.copyDirectory( new File( "doesnt-exist" ), new File( "a" ) ); |
| fail(); |
| } |
| catch ( IOException ex ) |
| { |
| } |
| try |
| { |
| FileUtils.copyDirectory( testFile1, new File( "a" ) ); |
| fail(); |
| } |
| catch ( IOException ex ) |
| { |
| } |
| try |
| { |
| FileUtils.copyDirectory( tempFolder.getRoot(), testFile1 ); |
| fail(); |
| } |
| catch ( IOException ex ) |
| { |
| } |
| try |
| { |
| FileUtils.copyDirectory( tempFolder.getRoot(), tempFolder.getRoot() ); |
| fail(); |
| } |
| catch ( IOException ex ) |
| { |
| } |
| } |
| |
| // forceDelete |
| |
| @Test |
| public void forceDeleteAFile1() |
| throws Exception |
| { |
| File destination = new File( tempFolder.getRoot(), "copy1.txt" ); |
| destination.createNewFile(); |
| assertThat( "Copy1.txt doesn't exist to delete", destination.exists(), is( true ) ); |
| FileUtils.forceDelete( destination ); |
| assertThat( "Check No Exist", !destination.exists(), is( true ) ); |
| } |
| |
| @Test |
| public void forceDeleteAFile2() |
| throws Exception |
| { |
| File destination = new File( tempFolder.getRoot(), "copy2.txt" ); |
| destination.createNewFile(); |
| assertThat( "Copy2.txt doesn't exist to delete", destination.exists(), is( true ) ); |
| FileUtils.forceDelete( destination ); |
| assertThat( "Check No Exist", !destination.exists(), is( true ) ); |
| } |
| |
| @Test |
| @Ignore( "Commons test case that is failing for plexus" ) |
| public void forceDeleteAFile3() |
| throws Exception |
| { |
| File destination = new File( tempFolder.getRoot(), "no_such_file" ); |
| assertThat( "Check No Exist", !destination.exists(), is( true ) ); |
| try |
| { |
| FileUtils.forceDelete( destination ); |
| fail( "Should generate FileNotFoundException" ); |
| } |
| catch ( FileNotFoundException ignored ) |
| { |
| } |
| } |
| |
| // copyFileToDirectory |
| |
| @Test |
| @Ignore( "Commons test case that is failing for plexus" ) |
| public void copyFile1ToDir() |
| throws Exception |
| { |
| File directory = new File( tempFolder.getRoot(), "subdir" ); |
| if ( !directory.exists() ) |
| { |
| directory.mkdirs(); |
| } |
| File destination = new File( directory, testFile1.getName() ); |
| |
| //Thread.sleep(LAST_MODIFIED_DELAY); |
| //This is to slow things down so we can catch if |
| //the lastModified date is not ok |
| |
| FileUtils.copyFileToDirectory( testFile1, directory ); |
| assertThat( "Check Exist", destination.exists(), is( true ) ); |
| assertThat( "Check Full copy", destination.length(), is( testFile1Size ) ); |
| /* disabled: Thread.sleep doesn't work reliantly for this case |
| assertTrue("Check last modified date preserved", |
| testFile1.lastModified() == destination.lastModified());*/ |
| |
| try |
| { |
| FileUtils.copyFileToDirectory( destination, directory ); |
| fail( "Should not be able to copy a file into the same directory as itself" ); |
| } |
| catch ( IOException ioe ) |
| { |
| //we want that, cannot copy to the same directory as the original file |
| } |
| } |
| |
| @Test |
| public void copyFile2ToDir() |
| throws Exception |
| { |
| File directory = new File( tempFolder.getRoot(), "subdir" ); |
| if ( !directory.exists() ) |
| { |
| directory.mkdirs(); |
| } |
| File destination = new File( directory, testFile1.getName() ); |
| |
| //Thread.sleep(LAST_MODIFIED_DELAY); |
| //This is to slow things down so we can catch if |
| //the lastModified date is not ok |
| |
| FileUtils.copyFileToDirectory( testFile1, directory ); |
| assertThat( "Check Exist", destination.exists(), is( true ) ); |
| assertThat( "Check Full copy", destination.length(), is( testFile2Size ) ); |
| /* disabled: Thread.sleep doesn't work reliantly for this case |
| assertTrue("Check last modified date preserved", |
| testFile1.lastModified() == destination.lastModified());*/ |
| } |
| |
| // forceDelete |
| |
| @Test |
| public void forceDeleteDir() |
| throws Exception |
| { |
| File testDirectory = tempFolder.newFolder( name.getMethodName() ); |
| FileUtils.forceDelete( testDirectory.getParentFile() ); |
| assertThat( "Check No Exist", !testDirectory.getParentFile().exists(), is( true ) ); |
| } |
| |
| /** |
| * Test the FileUtils implementation. |
| */ |
| @Test |
| public void fileUtils() |
| throws Exception |
| { |
| // Loads file from classpath |
| File file1 = new File( tempFolder.getRoot(), "test.txt" ); |
| String filename = file1.getAbsolutePath(); |
| |
| //Create test file on-the-fly (used to be in CVS) |
| OutputStream out = new java.io.FileOutputStream( file1 ); |
| try |
| { |
| out.write( "This is a test".getBytes( "UTF-8" ) ); |
| } |
| finally |
| { |
| out.close(); |
| } |
| |
| File file2 = new File( tempFolder.getRoot(), "test2.txt" ); |
| |
| FileUtils.fileWrite( file2, "UTF-8", filename ); |
| assertThat( file2.exists(), is( true ) ); |
| assertThat( file2.length() > 0, is( true ) ); |
| |
| String file2contents = FileUtils.fileRead( file2, "UTF-8" ); |
| assertThat( "Second file's contents correct", filename.equals( file2contents ), is( true ) ); |
| |
| assertThat( file2.delete(), is( true ) ); |
| |
| String contents = FileUtils.fileRead( new File( filename ), "UTF-8" ); |
| assertThat( "FileUtils.fileRead()", contents.equals( "This is a test" ), is( true ) ); |
| |
| } |
| |
| @Test |
| public void fileReadWithDefaultEncoding() |
| throws Exception |
| { |
| File file = new File( tempFolder.getRoot(), "read.obj" ); |
| FileOutputStream out = new FileOutputStream( file ); |
| byte[] text = "Hello /u1234".getBytes(); |
| out.write( text ); |
| out.close(); |
| |
| String data = FileUtils.fileRead( file ); |
| assertThat( data, is( "Hello /u1234" ) ); |
| } |
| |
| @Test |
| public void fileReadWithEncoding() |
| throws Exception |
| { |
| File file = new File( tempFolder.getRoot(), "read.obj" ); |
| FileOutputStream out = new FileOutputStream( file ); |
| byte[] text = "Hello /u1234".getBytes( "UTF8" ); |
| out.write( text ); |
| out.close(); |
| |
| String data = FileUtils.fileRead( file, "UTF8" ); |
| assertThat( data, is( "Hello /u1234" ) ); |
| } |
| |
| @Test |
| @Ignore( "Commons test case that is failing for plexus" ) |
| public void readLines() |
| throws Exception |
| { |
| File file = FileTestHelper.newFile( tempFolder, "lines.txt" ); |
| try |
| { |
| String[] data = new String[]{ "hello", "/u1234", "", "this is", "some text" }; |
| FileTestHelper.createLineBasedFile( file, data ); |
| |
| List<String> lines = FileUtils.loadFile( file ); |
| assertThat( lines, is( Arrays.asList( data ) ) ); |
| } |
| finally |
| { |
| deleteFile( file ); |
| } |
| } |
| |
| @Test |
| public void writeStringToFile1() |
| throws Exception |
| { |
| File file = new File( tempFolder.getRoot(), "write.txt" ); |
| FileUtils.fileWrite( file, "UTF8", "Hello /u1234" ); |
| byte[] text = "Hello /u1234".getBytes( "UTF8" ); |
| assertEqualContent( text, file ); |
| } |
| |
| @Test |
| public void writeStringToFile2() |
| throws Exception |
| { |
| File file = new File( tempFolder.getRoot(), "write.txt" ); |
| FileUtils.fileWrite( file, null, "Hello /u1234" ); |
| byte[] text = "Hello /u1234".getBytes(); |
| assertEqualContent( text, file ); |
| } |
| |
| @Test |
| public void writeCharSequence1() |
| throws Exception |
| { |
| File file = new File( tempFolder.getRoot(), "write.txt" ); |
| FileUtils.fileWrite( file, "UTF8", "Hello /u1234" ); |
| byte[] text = "Hello /u1234".getBytes( "UTF8" ); |
| assertEqualContent( text, file ); |
| } |
| |
| @Test |
| public void writeCharSequence2() |
| throws Exception |
| { |
| File file = new File( tempFolder.getRoot(), "write.txt" ); |
| FileUtils.fileWrite( file, null, "Hello /u1234" ); |
| byte[] text = "Hello /u1234".getBytes(); |
| assertEqualContent( text, file ); |
| } |
| |
| |
| @Test |
| public void writeStringToFileWithEncoding_WithAppendOptionTrue_ShouldNotDeletePreviousFileLines() |
| throws Exception |
| { |
| File file = FileTestHelper.newFile( tempFolder, "lines.txt" ); |
| FileUtils.fileWrite( file, null, "This line was there before you..." ); |
| |
| FileUtils.fileAppend( file.getAbsolutePath(), "this is brand new data" ); |
| |
| String expected = "This line was there before you..." + "this is brand new data"; |
| String actual = FileUtils.fileRead( file ); |
| assertThat( actual, is( expected ) ); |
| } |
| |
| @Test |
| public void writeStringToFile_WithAppendOptionTrue_ShouldNotDeletePreviousFileLines() |
| throws Exception |
| { |
| File file = FileTestHelper.newFile( tempFolder, "lines.txt" ); |
| FileUtils.fileWrite( file, null, "This line was there before you..." ); |
| |
| FileUtils.fileAppend( file.getAbsolutePath(), "this is brand new data" ); |
| |
| String expected = "This line was there before you..." + "this is brand new data"; |
| String actual = FileUtils.fileRead( file ); |
| assertThat( actual, is( expected ) ); |
| } |
| |
| @Test |
| public void writeStringArrayToFile() |
| throws Exception |
| { |
| File file = new File( tempFolder.getRoot(), "writeArray.txt" ); |
| FileUtils.fileWriteArray( file, new String[]{"line1", "line2", "line3"} ); |
| |
| byte[] text = "line1\nline2\nline3".getBytes( "UTF8" ); |
| assertEqualContent( text, file ); |
| } |
| |
| @Test |
| public void writeStringArrayToFileWithEncoding() |
| throws Exception |
| { |
| File file = new File( tempFolder.getRoot(), "writeArray.txt" ); |
| FileUtils.fileWriteArray( file, "UTF8", new String[]{"line1", "line2", "line3"} ); |
| |
| byte[] text = "line1\nline2\nline3".getBytes( "UTF8" ); |
| assertEqualContent( text, file ); |
| } |
| |
| |
| @Test |
| public void writeWithEncoding_WithAppendOptionTrue_ShouldNotDeletePreviousFileLines() |
| throws Exception |
| { |
| File file = FileTestHelper.newFile( tempFolder, "lines.txt" ); |
| FileUtils.fileWrite( file, "UTF-8", "This line was there before you..." ); |
| |
| FileUtils.fileAppend( file.getAbsolutePath(), "UTF-8", "this is brand new data" ); |
| |
| String expected = "This line was there before you..." + "this is brand new data"; |
| String actual = FileUtils.fileRead( file ); |
| assertThat( actual, is( expected ) ); |
| } |
| |
| @Test |
| public void write_WithAppendOptionTrue_ShouldNotDeletePreviousFileLines() |
| throws Exception |
| { |
| File file = FileTestHelper.newFile( tempFolder, "lines.txt" ); |
| FileUtils.fileWrite( file, null, "This line was there before you..." ); |
| |
| FileUtils.fileAppend( file.getAbsolutePath(), "this is brand new data" ); |
| |
| String expected = "This line was there before you..." + "this is brand new data"; |
| String actual = FileUtils.fileRead( file ); |
| assertThat( actual, is( expected ) ); |
| } |
| |
| @Test( expected = NullPointerException.class ) |
| public void blowUpOnNull() |
| throws IOException |
| { |
| FileUtils.deleteDirectory( (File) null ); |
| } |
| |
| @Test |
| public void deleteQuietlyDir() |
| throws IOException |
| { |
| File testDirectory = new File( tempFolder.getRoot(), "testDeleteQuietlyDir" ); |
| File testFile = new File( testDirectory, "testDeleteQuietlyFile" ); |
| testDirectory.mkdirs(); |
| createFile( testFile, 0 ); |
| |
| assertThat( testDirectory.exists(), is( true ) ); |
| assertThat( testFile.exists(), is( true ) ); |
| FileUtils.deleteDirectory( testDirectory ); |
| assertThat( "Check No Exist", testDirectory.exists(), is( false ) ); |
| assertThat( "Check No Exist", testFile.exists(), is( false ) ); |
| } |
| |
| @Test |
| public void deleteQuietlyFile() |
| throws IOException |
| { |
| File testFile = new File( tempFolder.getRoot(), "testDeleteQuietlyFile" ); |
| createFile( testFile, 0 ); |
| |
| assertThat( testFile.exists(), is( true ) ); |
| FileUtils.deleteDirectory( testFile ); |
| assertThat( "Check No Exist", testFile.exists(), is( false ) ); |
| } |
| |
| @Test |
| public void deleteQuietlyNonExistent() |
| throws IOException |
| { |
| File testFile = new File( tempFolder.getRoot(), "testDeleteQuietlyNonExistent" ); |
| assertThat( testFile.exists(), is( false ) ); |
| |
| FileUtils.deleteDirectory( testFile ); |
| } |
| |
| |
| //// getDefaultExcludes |
| |
| @Test |
| public void getDefaultExcludes() |
| throws Exception |
| { |
| assertThat( Arrays.asList( FileUtils.getDefaultExcludes() ), hasItems( MINIMUM_DEFAULT_EXCLUDES ) ); |
| } |
| |
| |
| //// getDefaultExcludesAsList |
| |
| @Test |
| @SuppressWarnings( "unchecked" ) |
| public void getDefaultExcludesAsList() |
| throws Exception |
| { |
| assertThat( FileUtils.getDefaultExcludesAsList(), hasItems( MINIMUM_DEFAULT_EXCLUDES ) ); |
| } |
| |
| |
| //// getDefaultExcludesAsString |
| |
| @Test |
| public void getDefaultExcludesAsString() |
| throws Exception |
| { |
| assertThat( new HashSet<String>( Arrays.asList( FileUtils.getDefaultExcludesAsString().split( "," ) ) ), |
| hasItems( MINIMUM_DEFAULT_EXCLUDES ) ); |
| } |
| |
| |
| |
| //// dirname(String) |
| |
| @SuppressWarnings("ConstantConditions") |
| @Test( expected = NullPointerException.class ) |
| public void nlowUpOnDirnameNull() |
| throws Exception |
| { |
| FileUtils.dirname( null ); |
| } |
| |
| @Test |
| public void dirnameEmpty() |
| throws Exception |
| { |
| assertThat( FileUtils.dirname( "" ), is( "" ) ); |
| } |
| |
| @Test |
| public void dirnameFilename() |
| throws Exception |
| { |
| assertThat( FileUtils.dirname( "foo.bar.txt" ), is( "" ) ); |
| } |
| |
| @Test |
| //X @ReproducesPlexusBug( "assumes that the path is a local path" ) |
| public void dirnameWindowsRootPathOnUnix() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '/' ) ); |
| assertThat( FileUtils.dirname( "C:\\foo.bar.txt" ), is( "" ) ); |
| } |
| |
| @Test |
| //X @ReproducesPlexusBug( "assumes that the path is a local path" ) |
| public void dirnameWindowsNonRootPathOnUnix() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '/' ) ); |
| assertThat( FileUtils.dirname( "C:\\test\\foo.bar.txt" ), is( "" ) ); |
| } |
| |
| @Test |
| //X @ReproducesPlexusBug( "assumes that the path is a local path" ) |
| public void dirnameUnixRootPathOnWindows() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '\\' ) ); |
| assertThat( FileUtils.dirname( "/foo.bar.txt" ), is( "" ) ); |
| } |
| |
| @Test |
| //X @ReproducesPlexusBug( "assumes that the path is a local path" ) |
| public void dirnameUnixNonRootPathOnWindows() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '\\' ) ); |
| assertThat( FileUtils.dirname( "/test/foo.bar.txt" ), is( "" ) ); |
| } |
| |
| @Test |
| public void dirnameWindowsRootPathOnWindows() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '\\' ) ); |
| assertThat( FileUtils.dirname( "C:\\foo.bar.txt" ), is( "C:" ) ); |
| } |
| |
| @Test |
| public void dirnameWindowsNonRootPathOnWindows() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '\\' ) ); |
| assertThat( FileUtils.dirname( "C:\\test\\foo.bar.txt" ), is( "C:\\test" ) ); |
| } |
| |
| @Test |
| public void dirnameUnixRootPathOnUnix() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '/' ) ); |
| assertThat( FileUtils.dirname( "/foo.bar.txt" ), is( "" ) ); |
| } |
| |
| @Test |
| public void dirnameUnixNonRootPathOnUnix() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '/' ) ); |
| assertThat( FileUtils.dirname( "/test/foo.bar.txt" ), is( "/test" ) ); |
| } |
| |
| //// filename(String) |
| |
| @SuppressWarnings("ConstantConditions") |
| @Test( expected = NullPointerException.class ) |
| public void blowUpOnFilenameNull() |
| throws Exception |
| { |
| FileUtils.filename( null ); |
| } |
| |
| @Test |
| public void filenameEmpty() |
| throws Exception |
| { |
| assertThat( FileUtils.filename( "" ), is( "" ) ); |
| } |
| |
| @Test |
| public void filenameFilename() |
| throws Exception |
| { |
| assertThat( FileUtils.filename( "foo.bar.txt" ), is( "foo.bar.txt" ) ); |
| } |
| |
| @Test |
| //X @ReproducesPlexusBug( "assumes that the path is a local path" ) |
| public void filenameWindowsRootPathOnUnix() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '/' ) ); |
| assertThat( FileUtils.filename( "C:\\foo.bar.txt" ), is( "C:\\foo.bar.txt" ) ); |
| } |
| |
| @Test |
| //X @ReproducesPlexusBug( "assumes that the path is a local path" ) |
| public void filenameWindowsNonRootPathOnUnix() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '/' ) ); |
| assertThat( FileUtils.filename( "C:\\test\\foo.bar.txt" ), is( "C:\\test\\foo.bar.txt" ) ); |
| } |
| |
| @Test |
| //X @ReproducesPlexusBug( "assumes that the path is a local path" ) |
| public void filenameUnixRootPathOnWindows() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '\\' ) ); |
| assertThat( FileUtils.filename( "/foo.bar.txt" ), is( "/foo.bar.txt" ) ); |
| } |
| |
| @Test |
| //X @ReproducesPlexusBug( "assumes that the path is a local path" ) |
| public void filenameUnixNonRootPathOnWindows() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '\\' ) ); |
| assertThat( FileUtils.filename( "/test/foo.bar.txt" ), is( "/test/foo.bar.txt" ) ); |
| } |
| |
| @Test |
| public void filenameWindowsRootPathOnWindows() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '\\' ) ); |
| assertThat( FileUtils.filename( "C:\\foo.bar.txt" ), is( "foo.bar.txt" ) ); |
| } |
| |
| @Test |
| public void filenameWindowsNonRootPathOnWindows() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '\\' ) ); |
| assertThat( FileUtils.filename( "C:\\test\\foo.bar.txt" ), is( "foo.bar.txt" ) ); |
| } |
| |
| @Test |
| public void filenameUnixRootPathOnUnix() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '/' ) ); |
| assertThat( FileUtils.filename( "/foo.bar.txt" ), is( "foo.bar.txt" ) ); |
| } |
| |
| @Test |
| public void filenameUnixNonRootPathOnUnix() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '/' ) ); |
| assertThat( FileUtils.filename( "/test/foo.bar.txt" ), is( "foo.bar.txt" ) ); |
| } |
| |
| //// extension(String) |
| |
| @SuppressWarnings("ConstantConditions") |
| @Test( expected = NullPointerException.class ) |
| public void blowUpOnNullExtension() |
| throws Exception |
| { |
| FileUtils.extension( null ); |
| } |
| |
| @Test |
| public void extensionEmpty() |
| throws Exception |
| { |
| assertThat( FileUtils.extension( "" ), is( "" ) ); |
| } |
| |
| @Test |
| public void extensionFileName() |
| throws Exception |
| { |
| assertThat( FileUtils.extension( "foo.bar.txt" ), is( "txt" ) ); |
| } |
| |
| @Test |
| public void extensionFileNameNoExtension() |
| throws Exception |
| { |
| assertThat( FileUtils.extension( "foo_bar_txt" ), is( "" ) ); |
| } |
| |
| @Test |
| //X @ReproducesPlexusBug( "assumes that the path is a local path" ) |
| public void extensionWindowsRootPathOnUnix() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '/' ) ); |
| assertThat( FileUtils.extension( "C:\\foo.bar.txt" ), is( "txt" ) ); |
| } |
| |
| @Test |
| //X @ReproducesPlexusBug( "assumes that the path is a local path" ) |
| public void extensionWindowsNonRootPathOnUnix() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '/' ) ); |
| assertThat( FileUtils.extension( "C:\\test\\foo.bar.txt" ), is( "txt" ) ); |
| } |
| |
| @Test |
| //X @ReproducesPlexusBug( "assumes that the path is a local path" ) |
| public void extensionUnixRootPathOnWindows() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '\\' ) ); |
| assertThat( FileUtils.extension( "/foo.bar.txt" ), is( "txt" ) ); |
| } |
| |
| @Test |
| //X @ReproducesPlexusBug( "assumes that the path is a local path" ) |
| public void extensionUnixNonRootPathOnWindows() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '\\' ) ); |
| assertThat( FileUtils.extension( "/test/foo.bar.txt" ), is( "txt" ) ); |
| } |
| |
| @Test |
| public void extensionWindowsRootPathOnWindows() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '\\' ) ); |
| assertThat( FileUtils.extension( "C:\\foo.bar.txt" ), is( "txt" ) ); |
| } |
| |
| @Test |
| public void extensionWindowsNonRootPathOnWindows() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '\\' ) ); |
| assertThat( FileUtils.extension( "C:\\test\\foo.bar.txt" ), is( "txt" ) ); |
| } |
| |
| @Test |
| @Ignore("Wait until we can run with assembly 2.5 which will support symlinks properly") |
| public void isASymbolicLink() |
| throws IOException |
| { |
| // This testcase will pass when running under java7 or higher |
| assumeThat( Os.isFamily(Os.FAMILY_WINDOWS), is(false) ); |
| |
| File file = new File( "src/test/resources/symlinks/src/symDir" ); |
| assertTrue(FileUtils.isSymbolicLink(file )); |
| assertTrue(FileUtils.isSymbolicLinkLegacy(file )); |
| } |
| |
| @Test |
| @Ignore("Wait until we can run with assembly 2.5 which will support symlinks properly") |
| public void notASymbolicLink() |
| throws IOException |
| { |
| File file = new File( "src/test/resources/symlinks/src/" ); |
| assertFalse(FileUtils.isSymbolicLink(file )); |
| assertFalse(FileUtils.isSymbolicLinkLegacy(file )); |
| } |
| |
| @Test |
| public void extensionUnixRootPathOnUnix() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '/' ) ); |
| assertThat( FileUtils.extension( "/foo.bar.txt" ), is( "txt" ) ); |
| } |
| |
| @Test |
| public void extensionUnixNonRootPathOnUnix() |
| throws Exception |
| { |
| assumeThat( File.separatorChar, is( '/' ) ); |
| assertThat( FileUtils.extension( "/test/foo.bar.txt" ), is( "txt" ) ); |
| } |
| |
| //// constants for testing |
| |
| private static final String[] MINIMUM_DEFAULT_EXCLUDES = { |
| // Miscellaneous typical temporary files |
| "**/*~", "**/#*#", "**/.#*", "**/%*%", "**/._*", |
| |
| // CVS |
| "**/CVS", "**/CVS/**", "**/.cvsignore", |
| |
| // Subversion |
| "**/.svn", "**/.svn/**", |
| |
| // Arch |
| "**/.arch-ids", "**/.arch-ids/**", |
| |
| //Bazaar |
| "**/.bzr", "**/.bzr/**", |
| |
| //SurroundSCM |
| "**/.MySCMServerInfo", |
| |
| // Mac |
| "**/.DS_Store", |
| |
| // Serena Dimensions Version 10 |
| "**/.metadata", "**/.metadata/**", |
| |
| // Mercurial |
| "**/.hg", "**/.hg/**", |
| |
| // git |
| "**/.git", "**/.git/**", |
| |
| // BitKeeper |
| "**/BitKeeper", "**/BitKeeper/**", "**/ChangeSet", "**/ChangeSet/**", |
| |
| // darcs |
| "**/_darcs", "**/_darcs/**", "**/.darcsrepo", "**/.darcsrepo/**", "**/-darcs-backup*", "**/.darcs-temp-mail" }; |
| |
| } |