/*
* Copyright (c) 2002 Cunningham & Cunningham, Inc.
* Copyright (c) 2009-2015 by Jochen Wierum & Cologne Intelligence
*
* This file is part of FitGoodies.
*
* FitGoodies is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* FitGoodies is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with FitGoodies. If not, see <http://www.gnu.org/licenses/>.
*/
package de.cologneintelligence.fitgoodies.file;
import de.cologneintelligence.fitgoodies.testsupport.FitGoodiesTestCase;
import de.cologneintelligence.fitgoodies.util.DependencyManager;
import org.junit.Test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.argThat;
import static org.mockito.Mockito.when;
public class FileSelectorTest extends FitGoodiesTestCase {
@Test
public void testFindFiles() throws Exception {
File directory = mockDirectory("file1\\.txt", "file1.txt");
FileSelector fs = new FileSelector(directory, "file1\\.txt");
assertThat(fs.getUniqueFile().getName(), is(equalTo("file1.txt")));
}
@Test
public void testFindFilesRegex() throws Exception {
File directory = mockDirectory("file[26]\\.txt", "file2.txt");
FileSelector fs = new FileSelector(directory, "file[26]\\.txt");
assertThat(fs.getUniqueFile().getName(), is(equalTo("file2.txt")));
}
@Test(expected = FilenameNotUniqueException.class)
public void testUniqueNameErrorHandling1() throws Exception {
File directory = mockDirectory("file[23]\\.txt",
"file2.txt",
"file3.txt");
FileSelector fs = new FileSelector(directory, "file[23]\\.txt");
fs.getUniqueFile();
}
@Test(expected = FilenameNotUniqueException.class)
public void testUniqueNameErrorHandling2() throws Exception {
File directory = mockDirectory(".*", "a", "b");
FileSelector fs = new FileSelector(directory, ".*");
fs.getUniqueFile();
}
@Test(expected = FileNotFoundException.class)
public void testNotFoundErrorHandling1() throws Exception {
File directory = mockDirectory("xyz");
FileSelector fs = new FileSelector(directory, "xyz");
fs.getFirstFile();
}
@Test(expected = FileNotFoundException.class)
public void testNotFoundErrorHandling2() throws Exception {
File directory = mockDirectory("xyz");
FileSelector fs = new FileSelector(directory, "xyz");
fs.getUniqueFile();
}
@Test
public void testNotFoundErrorHandling3() throws Exception {
File directory = mockDirectory("");
when(directory.listFiles(argThat(any(FilenameFilter.class)))).thenReturn(null);
FileSelector fs = new FileSelector(directory, "");
assertThat(fs.getFiles().length, is(0));
}
@Test
public void testGetLastFile() throws FileNotFoundException {
File directory = mockDirectory(".*",
"file1.txt",
"file2.txt",
"noext",
"subdir/ignored");
FileFixtureHelper helper = DependencyManager.getOrCreate(FileFixtureHelper.class);
helper.setEncoding("utf-8");
helper.setPattern(".*");
helper.setDirectory(directory);
FileSelector fs = helper.getSelector();
assertThat(fs.getLastFile().getName(), is(equalTo("noext")));
}
@Test(expected = FileNotFoundException.class)
public void testGetLastFileWithErrors() throws FileNotFoundException {
File directory = mockDirectory("nofile");
FileFixtureHelper helper = DependencyManager.getOrCreate(FileFixtureHelper.class);
helper.setEncoding("utf-8");
helper.setPattern("nofile");
helper.setDirectory(directory);
FileSelector fs = helper.getSelector();
fs.getLastFile();
}
@Test
public void testFirstFile1() throws FileNotFoundException {
File directory = mockDirectory(".*",
"file1.txt",
"file2.txt");
FileSelector fs = new FileSelector(directory, ".*");
assertThat(fs.getFirstFile().getName(), is(equalTo("file1.txt")));
assertThat(fs.getFirstFile().getName(), is(equalTo("file1.txt")));
}
@Test
public void testFirstFile2() throws FileNotFoundException {
File directory = mockDirectory(".*\\.bat",
"f.txt.bat",
"f2.txt.bat");
FileSelector fs = new FileSelector(directory, ".*\\.bat");
assertThat(fs.getFirstFile().getName(), is(equalTo("f.txt.bat")));
assertThat(fs.getFirstFile().getName(), is(equalTo("f.txt.bat")));
}
@Test
public void testFiles() throws FileNotFoundException {
final String pattern = ".*\\.txt";
File directory = mockDirectory(pattern,
"file1.txt",
"file2.txt",
"file3.txt");
FileSelector fs = new FileSelector(directory, pattern);
File[] f = fs.getFiles();
assertThat(f.length, is(equalTo(3)));
assertThat(f[0].getName(), is(equalTo("file1.txt")));
assertThat(f[2].getName(), is(equalTo("file3.txt")));
}
}