package org.jabref.logic.importer.fileformat; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.net.URISyntaxException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.List; import java.util.Optional; import org.jabref.logic.importer.ImportFormatPreferences; import org.jabref.logic.util.FileExtensions; import org.jabref.model.entry.BibEntry; import org.junit.Before; import org.junit.Test; import org.mockito.Answers; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; public class EndnoteImporterTest { private EndnoteImporter importer; @Before public void setUp() { importer = new EndnoteImporter(mock(ImportFormatPreferences.class, Answers.RETURNS_DEEP_STUBS)); } @Test public void testGetFormatName() { assertEquals("Refer/Endnote", importer.getName()); } @Test public void testGetCLIId() { assertEquals("refer", importer.getId()); } @Test public void testsGetExtensions() { assertEquals(FileExtensions.ENDNOTE, importer.getExtensions()); } @Test public void testGetDescription() { assertEquals("Importer for the Refer/Endnote format." + " Modified to use article number for pages if pages are missing.", importer.getDescription()); } @Test public void testIsRecognizedFormat() throws IOException, URISyntaxException { List<String> list = Arrays.asList("Endnote.pattern.A.enw", "Endnote.pattern.E.enw", "Endnote.book.example.enw"); for (String str : list) { Path file = Paths.get(EndnoteImporterTest.class.getResource(str).toURI()); assertTrue(importer.isRecognizedFormat(file, StandardCharsets.UTF_8)); } } @Test public void testIsRecognizedFormatReject() throws IOException, URISyntaxException { List<String> list = Arrays.asList("IEEEImport1.txt", "IsiImporterTest1.isi", "IsiImporterTestInspec.isi", "IsiImporterTestWOS.isi", "IsiImporterTestMedline.isi", "RisImporterTest1.ris", "Endnote.pattern.no_enw", "empty.pdf", "annotated.pdf"); for (String str : list) { Path file = Paths.get(EndnoteImporterTest.class.getResource(str).toURI()); assertFalse(importer.isRecognizedFormat(file, Charset.defaultCharset())); } } @Test public void testImportEntries0() throws IOException, URISyntaxException { Path file = Paths.get(EndnoteImporterTest.class.getResource("Endnote.entries.enw").toURI()); List<BibEntry> bibEntries = importer.importDatabase(file, StandardCharsets.UTF_8).getDatabase().getEntries(); assertEquals(5, bibEntries.size()); BibEntry be0 = bibEntries.get(0); assertEquals("misc", be0.getType()); assertEquals(Optional.of("testA0 and testA1"), be0.getField("author")); assertEquals(Optional.of("testE0 and testE1"), be0.getField("editor")); assertEquals(Optional.of("testT"), be0.getField("title")); BibEntry be1 = bibEntries.get(1); assertEquals("misc", be1.getType()); assertEquals(Optional.of("testC"), be1.getField("address")); assertEquals(Optional.of("testB2"), be1.getField("booktitle")); assertEquals(Optional.of("test8"), be1.getField("date")); assertEquals(Optional.of("test7"), be1.getField("edition")); assertEquals(Optional.of("testJ"), be1.getField("journal")); assertEquals(Optional.of("testD"), be1.getField("year")); BibEntry be2 = bibEntries.get(2); assertEquals("article", be2.getType()); assertEquals(Optional.of("testB0"), be2.getField("journal")); BibEntry be3 = bibEntries.get(3); assertEquals("book", be3.getType()); assertEquals(Optional.of("testI0"), be3.getField("publisher")); assertEquals(Optional.of("testB1"), be3.getField("series")); BibEntry be4 = bibEntries.get(4); assertEquals("mastersthesis", be4.getType()); assertEquals(Optional.of("testX"), be4.getField("abstract")); assertEquals(Optional.of("testF"), be4.getField("bibtexkey")); assertEquals(Optional.of("testR"), be4.getField("doi")); assertEquals(Optional.of("testK"), be4.getField("keywords")); assertEquals(Optional.of("testO1"), be4.getField("note")); assertEquals(Optional.of("testN"), be4.getField("number")); assertEquals(Optional.of("testP"), be4.getField("pages")); assertEquals(Optional.of("testI1"), be4.getField("school")); assertEquals(Optional.of("testU"), be4.getField("url")); assertEquals(Optional.of("testV"), be4.getField("volume")); } @Test public void testImportEntries1() throws IOException { String s = "%O Artn\\\\s testO\n%A testA,\n%E testE0, testE1"; List<BibEntry> bibEntries = importer.importDatabase(new BufferedReader(new StringReader(s))).getDatabase() .getEntries(); assertEquals(1, bibEntries.size()); BibEntry be = bibEntries.get(0); assertEquals("misc", be.getType()); assertEquals(Optional.of("testA"), be.getField("author")); assertEquals(Optional.of("testE0, testE1"), be.getField("editor")); assertEquals(Optional.of("testO"), be.getField("pages")); } @Test public void testImportEntriesBookExample() throws IOException, URISyntaxException { Path file = Paths.get(EndnoteImporterTest.class.getResource("Endnote.book.example.enw").toURI()); List<BibEntry> bibEntries = importer.importDatabase(file, StandardCharsets.UTF_8).getDatabase().getEntries(); assertEquals(1, bibEntries.size()); BibEntry be = bibEntries.get(0); assertEquals("book", be.getType()); assertEquals(Optional.of("Heidelberg"), be.getField("address")); assertEquals(Optional.of("Preißel, René and Stachmann, Bjørn"), be.getField("author")); assertEquals(Optional.of("3., aktualisierte und erweiterte Auflage"), be.getField("edition")); assertEquals(Optional.of("Versionsverwaltung"), be.getField("keywords")); assertEquals(Optional.of("XX, 327"), be.getField("pages")); assertEquals(Optional.of("dpunkt.verlag"), be.getField("publisher")); assertEquals(Optional.of("Git : dezentrale Versionsverwaltung im Team : Grundlagen und Workflows"), be.getField("title")); assertEquals(Optional.of("http://d-nb.info/107601965X"), be.getField("url")); assertEquals(Optional.of("2016"), be.getField("year")); } }