package org.jabref.gui.importer; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import org.jabref.logic.importer.ImportDataTest; import org.jabref.logic.importer.ImportFormatPreferences; import org.jabref.logic.importer.ParserResult; import org.jabref.logic.importer.fileformat.BibtexParser; import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.BibEntry; import org.jabref.testutils.category.GUITests; import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.experimental.categories.Category; import static org.mockito.Mockito.mock; @Category(GUITests.class) public class EntryFromFileCreatorManagerTest { // Needed to initialize ExternalFileTypes @Before public void setUp() { } @Test public void testGetCreator() { EntryFromFileCreatorManager manager = new EntryFromFileCreatorManager(); EntryFromFileCreator creator = manager.getEntryCreator(ImportDataTest.NOT_EXISTING_PDF); Assert.assertNull(creator); creator = manager.getEntryCreator(ImportDataTest.FILE_IN_DATABASE); Assert.assertNotNull(creator); Assert.assertTrue(creator.accept(ImportDataTest.FILE_IN_DATABASE)); } @Test @Ignore public void testAddEntrysFromFiles() throws FileNotFoundException, IOException { try (FileInputStream stream = new FileInputStream(ImportDataTest.UNLINKED_FILES_TEST_BIB); InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) { ParserResult result = new BibtexParser(mock(ImportFormatPreferences.class)).parse(reader); BibDatabase database = result.getDatabase(); List<File> files = new ArrayList<>(); files.add(ImportDataTest.FILE_NOT_IN_DATABASE); files.add(ImportDataTest.NOT_EXISTING_PDF); EntryFromFileCreatorManager manager = new EntryFromFileCreatorManager(); List<String> errors = manager.addEntrysFromFiles(files, database, null, true); /** * One file doesn't exist, so adding it as an entry should lead to an error message. */ Assert.assertEquals(1, errors.size()); boolean file1Found = false; boolean file2Found = false; for (BibEntry entry : database.getEntries()) { String filesInfo = entry.getField("file").get(); if (filesInfo.contains(files.get(0).getName())) { file1Found = true; } if (filesInfo.contains(files.get(1).getName())) { file2Found = true; } } Assert.assertTrue(file1Found); Assert.assertFalse(file2Found); } } }