package org.jabref.gui.importer.fetcher;
import java.io.IOException;
import java.util.Optional;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.jabref.logic.importer.util.OAI2Handler;
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 org.xml.sax.SAXException;
/**
* Test for OAI2-Handler and Fetcher.
*
* @author Ulrich Stärk
* @author Christian Kopf
* @author Christopher Oezbek
*/
@Category(GUITests.class)
public class OAI2HandlerFetcherTest {
protected OAI2Handler handler;
protected BibEntry be;
protected SAXParserFactory parserFactory;
protected SAXParser saxParser;
@Before
public void setUp() throws ParserConfigurationException, SAXException {
parserFactory = SAXParserFactory.newInstance();
saxParser = parserFactory.newSAXParser();
be = new BibEntry("article");
handler = new OAI2Handler(be);
}
@Test
public void testCorrectLineBreaks() {
Assert.assertEquals("Test this", OAI2Handler.correctLineBreaks("Test\nthis"));
Assert.assertEquals("Test this", OAI2Handler.correctLineBreaks("Test \n this"));
Assert.assertEquals("Test\nthis", OAI2Handler.correctLineBreaks("Test\n\nthis"));
Assert.assertEquals("Test\nthis", OAI2Handler.correctLineBreaks("Test\n \nthis"));
Assert.assertEquals("Test\nthis", OAI2Handler.correctLineBreaks(" Test \n \n this "));
}
@Test
public void testParse() throws Throwable {
try {
saxParser.parse(this.getClass().getResourceAsStream("oai2.xml"), handler);
Assert.assertEquals(Optional.of("hep-ph/0408155"), be.getField("eprint"));
Assert.assertEquals(Optional.of("G. F. Giudice and A. Riotto and A. Zaffaroni and J. López-Peña"),
be.getField("author"));
Assert.assertEquals(Optional.of("Nucl.Phys. B"), be.getField("journal"));
Assert.assertEquals(Optional.of("710"), be.getField("volume"));
Assert.assertEquals(Optional.of("2005"), be.getField("year"));
Assert.assertEquals(Optional.of("511-525"), be.getField("pages"));
// Citekey is only generated if the user says so in the import
// inspection dialog.
Assert.assertEquals(Optional.empty(), be.getCiteKeyOptional());
Assert.assertEquals(Optional.of("Heavy Particles from Inflation"), be.getField("title"));
Assert.assertTrue(be.getField("abstract").isPresent());
Assert.assertEquals(Optional.of("23 pages"), be.getField("comments"));
Assert.assertEquals(Optional.of("CERN-PH-TH/2004-151"), be.getField("reportno"));
} catch (SAXException e) {
throw e.getException();
}
}
@Test
public void testOai22xml() throws SAXException, IOException {
saxParser.parse(this.getClass().getResourceAsStream("oai22.xml"), handler);
Assert.assertEquals(Optional.of("2005"), be.getField("year"));
}
@Test
public void testOai23xml() throws SAXException, IOException {
saxParser.parse(this.getClass().getResourceAsStream("oai23.xml"), handler);
Assert.assertEquals(Optional.of("Javier López Peña and Gabriel Navarro"), be.getField("author"));
}
@Test
public void testUrlConstructor() {
OAI2Fetcher fetcher = new OAI2Fetcher();
Assert.assertEquals(
"http://export.arxiv.org/oai2?verb=GetRecord&identifier=oai%3AarXiv.org%3Ahep-ph%2F0408155&metadataPrefix=arXiv",
fetcher.constructUrl("hep-ph/0408155"));
Assert.assertEquals(
"http://export.arxiv.org/oai2?verb=GetRecord&identifier=oai%3AarXiv.org%3Amath%2F0612188&metadataPrefix=arXiv",
fetcher.constructUrl("math/0612188"));
}
@Test
public void testFixKey() {
Assert.assertEquals("", OAI2Fetcher.fixKey(""));
Assert.assertEquals("test", OAI2Fetcher.fixKey("test"));
Assert.assertEquals("math/0601001", OAI2Fetcher.fixKey("math.RA/0601001"));
Assert.assertEquals("math/0601001", OAI2Fetcher.fixKey("math.QA/0601001"));
Assert.assertEquals("hep-ph/0408155", OAI2Fetcher.fixKey("hep-ph/0408155"));
Assert.assertEquals("0709.3040v1", OAI2Fetcher.fixKey("arXiv:0709.3040v1"));
Assert.assertEquals("", OAI2Fetcher.fixKey("arXiv:"));
}
@Test
@Ignore
public void testOnline() throws InterruptedException, IOException, SAXException {
{
OAI2Fetcher fetcher = new OAI2Fetcher();
be = fetcher.importOai2Entry("math.RA/0612188");
Assert.assertNotNull(be);
Assert.assertEquals(Optional.of("math/0612188"), be.getField("eprint"));
Assert.assertEquals(Optional.of("On the classification and properties of noncommutative duplicates"),
be.getField("title"));
Assert.assertEquals(Optional.of("Javier López Peña and Gabriel Navarro"), be.getField("author"));
Assert.assertEquals(Optional.of("2007"), be.getField("year"));
Thread.sleep(20000);
}
{
OAI2Fetcher fetcher = new OAI2Fetcher();
be = fetcher.importOai2Entry("astro-ph/0702080");
Assert.assertNotNull(be);
Assert.assertEquals(Optional.of("astro-ph/0702080"), be.getField("eprint"));
Assert.assertEquals(
Optional.of(
"Magnetized Hypermassive Neutron Star Collapse: a candidate central engine for short-hard GRBs"),
be.getField("title"));
Thread.sleep(20000);
}
{
OAI2Fetcher fetcher = new OAI2Fetcher();
be = fetcher.importOai2Entry("math.QA/0601001");
Assert.assertNotNull(be);
Assert.assertEquals(Optional.of("math/0601001"), be.getField("eprint"));
Thread.sleep(20000);
}
{
OAI2Fetcher fetcher = new OAI2Fetcher();
be = fetcher.importOai2Entry("hep-ph/0408155");
Assert.assertNotNull(be);
Assert.assertEquals(Optional.of("hep-ph/0408155"), be.getField("eprint"));
Thread.sleep(20000);
}
OAI2Fetcher fetcher = new OAI2Fetcher();
be = fetcher.importOai2Entry("0709.3040");
Assert.assertNotNull(be);
Assert.assertEquals(Optional.of("2007"), be.getField("year"));
Assert.assertEquals(Optional.of("#sep#"), be.getField("month"));
}
}