package org.jabref.logic.importer; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Paths; import java.util.Collection; import java.util.Optional; import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.BibEntry; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Answers; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class OpenDatabaseTest { private final Charset defaultEncoding = StandardCharsets.UTF_8; private ImportFormatPreferences importFormatPreferences; private final File bibNoHeader; private final File bibWrongHeader; private final File bibHeader; private final File bibHeaderAndSignature; private final File bibEncodingWithoutNewline; public OpenDatabaseTest() throws URISyntaxException { bibNoHeader = Paths.get(OpenDatabaseTest.class.getResource("headerless.bib").toURI()).toFile(); bibWrongHeader = Paths.get(OpenDatabaseTest.class.getResource("wrong-header.bib").toURI()).toFile(); bibHeader = Paths.get(OpenDatabaseTest.class.getResource("encoding-header.bib").toURI()).toFile(); bibHeaderAndSignature = Paths.get(OpenDatabaseTest.class.getResource("jabref-header.bib").toURI()) .toFile(); bibEncodingWithoutNewline = Paths .get(OpenDatabaseTest.class.getResource("encodingWithoutNewline.bib").toURI()).toFile(); } @Before public void setUp() { importFormatPreferences = mock(ImportFormatPreferences.class, Answers.RETURNS_DEEP_STUBS); when(importFormatPreferences.getEncoding()).thenReturn(StandardCharsets.UTF_8); } @Test public void useFallbackEncodingIfNoHeader() throws IOException { ParserResult result = OpenDatabase.loadDatabase(bibNoHeader, importFormatPreferences); Assert.assertEquals(defaultEncoding, result.getMetaData().getEncoding().get()); } @Test public void useFallbackEncodingIfUnknownHeader() throws IOException { ParserResult result = OpenDatabase.loadDatabase(bibWrongHeader, importFormatPreferences); Assert.assertEquals(defaultEncoding, result.getMetaData().getEncoding().get()); } @Test public void useSpecifiedEncoding() throws IOException { ParserResult result = OpenDatabase.loadDatabase(bibHeader, importFormatPreferences.withEncoding(StandardCharsets.US_ASCII)); Assert.assertEquals(defaultEncoding, result.getMetaData().getEncoding().get()); } @Test public void useSpecifiedEncodingWithSignature() throws IOException { ParserResult result = OpenDatabase.loadDatabase(bibHeaderAndSignature, importFormatPreferences.withEncoding(StandardCharsets.US_ASCII)); Assert.assertEquals(defaultEncoding, result.getMetaData().getEncoding().get()); } @Test public void entriesAreParsedNoHeader() throws IOException { ParserResult result = OpenDatabase.loadDatabase(bibNoHeader, importFormatPreferences); BibDatabase db = result.getDatabase(); // Entry Assert.assertEquals(1, db.getEntryCount()); Assert.assertEquals(Optional.of("2014"), db.getEntryByKey("1").get().getField("year")); } @Test public void entriesAreParsedHeader() throws IOException { ParserResult result = OpenDatabase.loadDatabase(bibHeader, importFormatPreferences); BibDatabase db = result.getDatabase(); // Entry Assert.assertEquals(1, db.getEntryCount()); Assert.assertEquals(Optional.of("2014"), db.getEntryByKey("1").get().getField("year")); } @Test public void entriesAreParsedHeaderAndSignature() throws IOException { ParserResult result = OpenDatabase.loadDatabase(bibHeaderAndSignature, importFormatPreferences); BibDatabase db = result.getDatabase(); // Entry Assert.assertEquals(1, db.getEntryCount()); Assert.assertEquals(Optional.of("2014"), db.getEntryByKey("1").get().getField("year")); } /** * Test for #669 */ @Test public void correctlyParseEncodingWithoutNewline() throws IOException { ParserResult result = OpenDatabase.loadDatabase(bibEncodingWithoutNewline, importFormatPreferences); Assert.assertEquals(StandardCharsets.US_ASCII, result.getMetaData().getEncoding().get()); BibDatabase db = result.getDatabase(); Assert.assertEquals(Optional.of("testPreamble"), db.getPreamble()); Collection<BibEntry> entries = db.getEntries(); Assert.assertEquals(1, entries.size()); BibEntry entry = entries.iterator().next(); Assert.assertEquals(Optional.of("testArticle"), entry.getCiteKeyOptional()); } }