package org.jabref.logic.importer.fileformat;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.jabref.logic.bibtex.BibEntryAssert;
import org.jabref.model.entry.BibEntry;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class BibTeXMLImporterTestFiles {
private static final Pattern PATTERN = Pattern.compile("\\D*[0123456789]");
private BibTeXMLImporter bibtexmlImporter;
@Parameter
public Path importFile;
@Before
public void setUp() {
bibtexmlImporter = new BibTeXMLImporter();
}
@Parameters(name = "{0}")
public static List<Path> files() throws Exception {
try (Stream<Path> stream = Files.list(Paths.get(BibTeXMLImporterTest.class.getResource("").toURI()))) {
return stream.filter(n -> n.getFileName().toString().startsWith("BibTeXMLImporterTest")
&& n.getFileName().toString().endsWith(".xml")).collect(Collectors.toList());
}
}
@Test
public void testIsRecognizedFormat() throws IOException {
Assert.assertTrue(bibtexmlImporter.isRecognizedFormat(importFile, StandardCharsets.UTF_8));
}
@Test
public void testImportEntries() throws IOException {
List<BibEntry> bibtexmlEntries = bibtexmlImporter.importDatabase(importFile, StandardCharsets.UTF_8)
.getDatabase().getEntries();
String bibFileName = importFile.getFileName().toString().replace(".xml", ".bib");
while (PATTERN.matcher(bibFileName).find()) {
bibFileName = bibFileName.replaceFirst("[0123456789]", "");
}
if (bibtexmlEntries.isEmpty()) {
Assert.assertEquals(Collections.emptyList(), bibtexmlEntries);
} else {
BibEntryAssert.assertEquals(BibTeXMLImporterTest.class, bibFileName, bibtexmlEntries);
}
}
}