package org.jabref.logic.util.io; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import org.jabref.BibtexTestData; import org.jabref.logic.bibtex.FieldContentParserPreferences; import org.jabref.logic.importer.ImportFormatPreferences; import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.BibEntry; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class CiteKeyBasedFileFinderTest { @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); private BibEntry entry; private Path rootDir; @Mock private ImportFormatPreferences prefs; @Before public void setUp() throws IOException { when(prefs.getFieldContentParserPreferences()).thenReturn(new FieldContentParserPreferences()); BibDatabase database = BibtexTestData.getBibtexDatabase(prefs); entry = database.getEntries().iterator().next(); rootDir = temporaryFolder.getRoot().toPath(); Path subDir = Files.createDirectory(rootDir.resolve("Organization Science")); Path pdfSubDir = Files.createDirectory(rootDir.resolve("pdfs")); Files.createFile(subDir.resolve("HipKro03 - Hello.pdf")); Files.createFile(rootDir.resolve("HipKro03 - Hello.pdf")); Path pdfSubSubDir = Files.createDirectory(pdfSubDir.resolve("sub")); Files.createFile(pdfSubSubDir.resolve("HipKro03-sub.pdf")); Files.createDirectory(rootDir.resolve("2002")); Path dir2003 = Files.createDirectory(rootDir.resolve("2003")); Files.createFile(dir2003.resolve("Paper by HipKro03.pdf")); Path dirTest = Files.createDirectory(rootDir.resolve("test")); Files.createFile(dirTest.resolve(".TEST")); Files.createFile(dirTest.resolve("TEST[")); Files.createFile(dirTest.resolve("TE.ST")); Files.createFile(dirTest.resolve("foo.dat")); Path graphicsDir = Files.createDirectory(rootDir.resolve("graphicsDir")); Path graphicsSubDir = Files.createDirectories(graphicsDir.resolve("subDir")); Files.createFile(graphicsSubDir.resolve("HipKro03test.jpg")); Files.createFile(graphicsSubDir.resolve("HipKro03test.png")); } @Test public void testFindAssociatedFiles() { List<String> extensions = Arrays.asList("jpg", "pdf"); List<Path> dirs = Arrays.asList(rootDir.resolve("graphicsDir"), rootDir.resolve("pdfs")); FileFinder fileFinder = new CiteKeyBasedFileFinder(false); List<Path> results = fileFinder.findAssociatedFiles(entry, dirs, extensions); Path jpgFile = rootDir.resolve(Paths.get("graphicsDir", "subDir", "HipKro03test.jpg")); Path pdfFile = rootDir.resolve(Paths.get("pdfs", "sub", "HipKro03-sub.pdf")); assertEquals(Arrays.asList(jpgFile, pdfFile), results.stream().sorted().collect(Collectors.toList())); } @Test public void findFilesByExtensionInNonExistingDirectoryFindsNothing() { List<String> extensions = Arrays.asList("jpg", "pdf"); List<Path> dirs = Collections.singletonList(rootDir.resolve("asdfasdf/asdfasdf")); CiteKeyBasedFileFinder fileFinder = new CiteKeyBasedFileFinder(false); Set<Path> results = fileFinder.findFilesByExtension(dirs, extensions); assertEquals(Collections.emptySet(), results); } @Test(expected = NullPointerException.class) public void findFilesByExtensionWithNullThrowsException() { CiteKeyBasedFileFinder fileFinder = new CiteKeyBasedFileFinder(false); fileFinder.findFilesByExtension(Collections.emptyList(), null); } }