package org.jabref.logic.importer.fileformat; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; 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.Optional; import org.jabref.logic.bibtex.BibEntryAssert; import org.jabref.logic.util.FileExtensions; import org.jabref.model.entry.BibEntry; import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class OvidImporterTest { private OvidImporter importer; @Before public void setUp() { importer = new OvidImporter(); } @Test public void testGetFormatName() { Assert.assertEquals("Ovid", importer.getName()); } @Test public void testGetCLIId() { Assert.assertEquals("ovid", importer.getId()); } @Test public void testsGetExtensions() { Assert.assertEquals(FileExtensions.OVID, importer.getExtensions()); } @Test public void testGetDescription() { Assert.assertEquals("Imports an Ovid file.", importer.getDescription()); } @Test public void testIsRecognizedFormatAccept() throws IOException, URISyntaxException { List<String> list = Arrays.asList("OvidImporterTest1.txt", "OvidImporterTest3.txt", "OvidImporterTest4.txt", "OvidImporterTest5.txt", "OvidImporterTest6.txt", "OvidImporterTest7.txt"); for (String str : list) { Path file = Paths.get(OvidImporter.class.getResource(str).toURI()); Assert.assertTrue(importer.isRecognizedFormat(file, StandardCharsets.UTF_8)); } } @Test public void testIsRecognizedFormatRejected() throws IOException, URISyntaxException { List<String> list = Arrays.asList("Empty.txt", "OvidImporterTest2.txt"); for (String str : list) { Path file = Paths.get(OvidImporter.class.getResource(str).toURI()); Assert.assertFalse(importer.isRecognizedFormat(file, StandardCharsets.UTF_8)); } } @Test public void testImportEmpty() throws IOException, URISyntaxException { Path file = Paths.get(OvidImporter.class.getResource("Empty.txt").toURI()); List<BibEntry> entries = importer.importDatabase(file, StandardCharsets.UTF_8).getDatabase().getEntries(); Assert.assertEquals(Collections.emptyList(), entries); } @Test public void testImportEntries1() throws IOException, URISyntaxException { Path file = Paths.get(OvidImporter.class.getResource("OvidImporterTest1.txt").toURI()); List<BibEntry> entries = importer.importDatabase(file, StandardCharsets.UTF_8).getDatabase().getEntries(); Assert.assertEquals(5, entries.size()); BibEntry entry = entries.get(0); Assert.assertEquals("misc", entry.getType()); Assert.assertEquals(Optional.of("Mustermann and Musterfrau"), entry.getField("author")); Assert.assertEquals(Optional.of("Short abstract"), entry.getField("abstract")); Assert.assertEquals(Optional.of("Musterbuch"), entry.getField("title")); Assert.assertEquals(Optional.of("Einleitung"), entry.getField("chaptertitle")); entry = entries.get(1); Assert.assertEquals("inproceedings", entry.getType()); Assert.assertEquals(Optional.of("Max"), entry.getField("editor")); Assert.assertEquals(Optional.of("Max the Editor"), entry.getField("title")); Assert.assertEquals(Optional.of("Very Long Title"), entry.getField("journal")); Assert.assertEquals(Optional.of("28"), entry.getField("volume")); Assert.assertEquals(Optional.of("2"), entry.getField("issue")); Assert.assertEquals(Optional.of("2015"), entry.getField("year")); Assert.assertEquals(Optional.of("103--106"), entry.getField("pages")); entry = entries.get(2); Assert.assertEquals("incollection", entry.getType()); Assert.assertEquals(Optional.of("Max"), entry.getField("author")); Assert.assertEquals(Optional.of("Test"), entry.getField("title")); Assert.assertEquals(Optional.of("Very Long Title"), entry.getField("journal")); Assert.assertEquals(Optional.of("28"), entry.getField("volume")); Assert.assertEquals(Optional.of("2"), entry.getField("issue")); Assert.assertEquals(Optional.of("April"), entry.getField("month")); Assert.assertEquals(Optional.of("2015"), entry.getField("year")); Assert.assertEquals(Optional.of("103--106"), entry.getField("pages")); entry = entries.get(3); Assert.assertEquals("book", entry.getType()); Assert.assertEquals(Optional.of("Max"), entry.getField("author")); Assert.assertEquals(Optional.of("2015"), entry.getField("year")); Assert.assertEquals(Optional.of("Editor"), entry.getField("editor")); Assert.assertEquals(Optional.of("Very Long Title"), entry.getField("booktitle")); Assert.assertEquals(Optional.of("103--106"), entry.getField("pages")); Assert.assertEquals(Optional.of("Address"), entry.getField("address")); Assert.assertEquals(Optional.of("Publisher"), entry.getField("publisher")); entry = entries.get(4); Assert.assertEquals("article", entry.getType()); Assert.assertEquals(Optional.of("2014"), entry.getField("year")); Assert.assertEquals(Optional.of("58"), entry.getField("pages")); Assert.assertEquals(Optional.of("Test"), entry.getField("address")); Assert.assertEquals(Optional.empty(), entry.getField("title")); Assert.assertEquals(Optional.of("TestPublisher"), entry.getField("publisher")); } @Test public void testImportEntries2() throws IOException, URISyntaxException { Path file = Paths.get(OvidImporter.class.getResource("OvidImporterTest2.txt").toURI()); List<BibEntry> entries = importer.importDatabase(file, StandardCharsets.UTF_8).getDatabase().getEntries(); Assert.assertEquals(Collections.emptyList(), entries); } @Test public void testImportSingleEntries() throws IOException, URISyntaxException { for (int n = 3; n <= 7; n++) { Path file = Paths.get(OvidImporter.class.getResource("OvidImporterTest" + n + ".txt").toURI()); try (InputStream nis = OvidImporter.class.getResourceAsStream("OvidImporterTestBib" + n + ".bib")) { List<BibEntry> entries = importer.importDatabase(file, StandardCharsets.UTF_8).getDatabase() .getEntries(); Assert.assertNotNull(entries); Assert.assertEquals(1, entries.size()); BibEntryAssert.assertEquals(nis, entries.get(0)); } } } }