From 5dc62ff085797d06dc661fbeed9cd0f0a8f18469 Mon Sep 17 00:00:00 2001 From: Tom Craig Date: Sun, 16 Aug 2020 13:36:36 -0700 Subject: [PATCH] Add tests for pdfs --- tests/__init__.py | 0 ...on Architecture for the World Wide Web.pdf | Bin 0 -> 48273 bytes tests/pdfs/__init__.py | 0 tests/pdfs/test_pdfs.py | 42 ++++++++++++++++++ 4 files changed, 42 insertions(+) create mode 100644 tests/__init__.py create mode 100644 tests/pdfs/Information Architecture for the World Wide Web.pdf create mode 100644 tests/pdfs/__init__.py create mode 100644 tests/pdfs/test_pdfs.py diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/pdfs/Information Architecture for the World Wide Web.pdf b/tests/pdfs/Information Architecture for the World Wide Web.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4c699427293c308fc2dbe5042e0d209d2a8ef159 GIT binary patch literal 48273 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 literal 0 HcmV?d00001 diff --git a/tests/pdfs/__init__.py b/tests/pdfs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/pdfs/test_pdfs.py b/tests/pdfs/test_pdfs.py new file mode 100644 index 0000000..afc35d9 --- /dev/null +++ b/tests/pdfs/test_pdfs.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 + +import inspect +from pathlib import Path +import tempfile + +from my.pdfs import get_annots, annotated_pdfs + + +ROOT = Path(__file__).parent.absolute() +EXPECTED_HIGHLIGHTS = set(['Since 1994, when we first began organizing web sites, we have enjoyed a rare opportunity to participate in the birth of a new discipline. ', + 'And yet, unlearn we must, ', + '', + ]) + +def test_get_annots(): + """ + Test get_annots, with a real PDF file + get_annots should return a list of three Annotation objects + """ + annotations = get_annots(Path(ROOT / 'Information Architecture for the World Wide Web.pdf')) + assert len(annotations) == 3 + assert set([a.highlight for a in annotations]) == EXPECTED_HIGHLIGHTS + + +def test_annotated_pdfs_with_filelist(): + """ + Test annotated_pdfs, with a real PDF file + annotated_pdfs should return a list of one Pdf object, with three Annotations + """ + filelist = [Path(ROOT / 'Information Architecture for the World Wide Web.pdf')] + annotations_generator = annotated_pdfs(filelist=filelist, roots=None) + + assert inspect.isgeneratorfunction(annotated_pdfs) + + highlights_from_pdfs = [] + + for pdf_object in list(annotations_generator): + highlights_from_pdfs.extend([a.highlight for a in pdf_object.annotations]) + + assert len(highlights_from_pdfs) == 3 + assert set(highlights_from_pdfs) == EXPECTED_HIGHLIGHTS