package org.jabref.logic.pdf;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.Optional;
import org.jabref.model.pdf.FileAnnotation;
import org.jabref.model.pdf.FileAnnotationType;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class PdfAnnotationImporterTest {
private final AnnotationImporter importer = new PdfAnnotationImporter();
@Test
public void noAnnotationsWriteProtected() {
assertEquals(Collections.emptyList(), importer.importAnnotations(Paths.get("src/test/resources/pdfs/write-protected.pdf")));
}
@Test
public void noAnnotationsEncrypted() {
assertEquals(Collections.emptyList(), importer.importAnnotations(Paths.get("src/test/resources/pdfs/encrypted.pdf")));
}
@Test
public void twoAnnotationsThesisExample() {
assertEquals(2, importer.importAnnotations(Paths.get("src/test/resources/pdfs/thesis-example.pdf")).size());
}
@Test
public void noAnnotationsMinimal() {
assertEquals(Collections.emptyList(), importer.importAnnotations(Paths.get("src/test/resources/pdfs/minimal.pdf")));
}
@Test
public void inlineNoteMinimal() {
final FileAnnotation expected = new FileAnnotation("Linus Dietz", LocalDateTime.of(2017, 3, 12, 20, 25), 1,
"inline note annotation", FileAnnotationType.FREETEXT, Optional.empty());
assertEquals(Collections.singletonList(expected),
importer.importAnnotations(Paths.get("src/test/resources/pdfs/minimal-inlinenote.pdf")));
}
@Test
public void popupNoteMinimal() {
final FileAnnotation expected = new FileAnnotation("Linus Dietz", LocalDateTime.of(2017, 3, 12, 20, 17, 24), 1,
"A simple pop-up note", FileAnnotationType.TEXT, Optional.empty());
assertEquals(Collections.singletonList(expected),
importer.importAnnotations(Paths.get("src/test/resources/pdfs/minimal-popup.pdf")));
}
@Test
public void highlightNoNoteMinimal() {
final FileAnnotation expectedLinkedAnnotation = new FileAnnotation("Linus Dietz", LocalDateTime.of(2017, 3, 12, 20, 28, 39), 1,
"", FileAnnotationType.HIGHLIGHT, Optional.empty());
final FileAnnotation expected = new FileAnnotation("Linus Dietz", LocalDateTime.of(2017, 3, 12, 20, 28, 39), 1,
"World", FileAnnotationType.HIGHLIGHT, Optional.of(expectedLinkedAnnotation));
assertEquals(Collections.singletonList(expected),
importer.importAnnotations(Paths.get("src/test/resources/pdfs/minimal-highlight-no-note.pdf")));
}
@Test
public void highlightWithNoteMinimal() {
final FileAnnotation expectedLinkedAnnotation = new FileAnnotation("Linus Dietz", LocalDateTime.of(2017, 3, 12, 20, 32, 2), 1,
"linked note to highlight", FileAnnotationType.HIGHLIGHT, Optional.empty());
final FileAnnotation expected = new FileAnnotation("Linus Dietz", LocalDateTime.of(2017, 3, 12, 20, 32, 2), 1,
"World", FileAnnotationType.HIGHLIGHT, Optional.of(expectedLinkedAnnotation));
assertEquals(Collections.singletonList(expected),
importer.importAnnotations(Paths.get("src/test/resources/pdfs/minimal-highlight-with-note.pdf")));
}
@Test
public void underlineWithNoteMinimal() {
final FileAnnotation expectedLinkedAnnotation = new FileAnnotation("Linus Dietz", LocalDateTime.of(2017, 3, 12, 20, 36, 9), 1,
"underlined", FileAnnotationType.UNDERLINE, Optional.empty());
final FileAnnotation expected = new FileAnnotation("Linus Dietz", LocalDateTime.of(2017, 3, 12, 20, 36, 9), 1,
"Hello", FileAnnotationType.UNDERLINE, Optional.of(expectedLinkedAnnotation));
assertEquals(Collections.singletonList(expected),
importer.importAnnotations(Paths.get("src/test/resources/pdfs/minimal-underline.pdf")));
}
@Test
public void polygonNoNoteMinimal() {
final FileAnnotation expected = new FileAnnotation("Linus Dietz", LocalDateTime.of(2017, 3, 16, 9, 21, 1), 1,
"polygon annotation", FileAnnotationType.POLYGON, Optional.empty());
assertEquals(Collections.singletonList(expected),
importer.importAnnotations(Paths.get("src/test/resources/pdfs/minimal-polygon.pdf")));
}
}