summaryrefslogtreecommitdiff
path: root/test/pdf-info-test.el
diff options
context:
space:
mode:
authorAndreas Politz <politza@hochschule-trier.de>2017-09-12 15:42:59 +0200
committerAndreas Politz <politza@hochschule-trier.de>2017-09-12 16:11:21 +0200
commit8041fff63d092bc88765089c8a6dbc3b288f9fa0 (patch)
treecdb52ba6013497d0b9cee6ec3d6fff49ecdf8736 /test/pdf-info-test.el
parente699e3f0889394cbb7679bc1d5c430f8e0d766b1 (diff)
Merge pull request 174
Diffstat (limited to 'test/pdf-info-test.el')
-rw-r--r--test/pdf-info-test.el254
1 files changed, 254 insertions, 0 deletions
diff --git a/test/pdf-info-test.el b/test/pdf-info-test.el
new file mode 100644
index 0000000..a8f9de9
--- /dev/null
+++ b/test/pdf-info-test.el
@@ -0,0 +1,254 @@
+;; -*- lexical-binding: t -*-
+
+(ert-deftest pdf-info-open/close ()
+ (pdf-test-with-test-pdf
+ (should-not (pdf-info-open))
+ (should (pdf-info-close)))
+ (pdf-test-with-encrypted-pdf
+ (should-error (pdf-info-open nil "Invalid Password"))
+ (should-not (pdf-info-open nil "pdftool"))))
+
+(ert-deftest pdf-info-metadata ()
+ (pdf-test-with-test-pdf
+ (should (cl-every (lambda (elt)
+ (and (consp elt)
+ (symbolp (car elt))))
+ (pdf-info-metadata)))))
+
+(ert-deftest pdf-info-search-string ()
+ (pdf-test-with-test-pdf
+ (let (matches)
+ (should (setq matches (pdf-info-search-string "PDF Tools")))
+ (should (= 2 (length matches)))
+ (should (cl-every (lambda (m)
+ (let-alist m
+ (and (stringp .text)
+ (cl-every 'pdf-test-relative-edges-p .edges)
+ (= 1 .page))))
+ matches)))))
+
+
+(ert-deftest pdf-info-search-regexp ()
+ (pdf-test-with-test-pdf
+ (let (case-fold-search matches)
+ (should (setq matches (pdf-info-search-regexp "PDF Tools")))
+ (should (= 2 (length matches)))
+ (should (cl-every (lambda (m)
+ (let-alist m
+ (and (stringp .text)
+ (cl-every 'pdf-test-relative-edges-p .edges)
+ (= 1 .page))))
+ matches)))))
+
+(ert-deftest pdf-info-pagelinks ()
+ (pdf-test-with-test-pdf
+ (let ((links (pdf-info-pagelinks 3)))
+ (should (= 2 (length links)))
+ (should (cl-every 'pdf-test-relative-edges-p
+ (mapcar (apply-partially 'alist-get 'edges)
+ links)))
+ (should (equal (mapcar (apply-partially 'alist-get 'type) links)
+ '(goto-dest uri)))
+ (should (equal (mapcar (apply-partially 'alist-get 'uri)
+ links)
+ '(nil "http://www.gnu.org")))
+ (should (equal (mapcar (apply-partially 'alist-get 'page)
+ links)
+ '(1 nil))))))
+
+(ert-deftest pdf-info-number-of-pages ()
+ (pdf-test-with-test-pdf
+ (should (= 6 (pdf-info-number-of-pages)))))
+
+(ert-deftest pdf-info-outline ()
+ (pdf-test-with-test-pdf
+ (let ((outline (pdf-info-outline)))
+ (should (= 7 (length outline)))
+ (should (equal (mapcar (apply-partially 'alist-get 'depth) outline)
+ '(1 1 1 1 1 2 3)))
+ (should (cl-every (lambda (elt)
+ (eq (alist-get 'type elt)
+ 'goto-dest))
+ outline)))))
+
+(ert-deftest pdf-info-gettext ()
+ (pdf-test-with-test-pdf
+ (should (string-match "PDF Tools\\(?:.\\|\n\\)*in memory"
+ (pdf-info-gettext 1 '(0 0 1 1))))))
+
+(ert-deftest pdf-info-getselection ()
+ (pdf-test-with-test-pdf
+ (should (consp (pdf-info-getselection 1 '(0 0 1 1))))
+ (should (cl-every 'pdf-test-relative-edges-p
+ (pdf-info-getselection 1 '(0 0 1 1))))))
+
+(ert-deftest pdf-info-textregions ()
+ (pdf-test-with-test-pdf
+ (should (consp (pdf-info-textregions 1)))))
+
+(ert-deftest pdf-info-pagesize ()
+ (pdf-test-with-test-pdf
+ (should (cl-every (lambda (size)
+ (and (consp size)
+ (natnump (car size))
+ (natnump (cdr size))))
+ (list (pdf-info-pagesize 1))))))
+
+(ert-deftest pdf-info-quit ()
+ (pdf-test-with-test-pdf
+ (pdf-info-quit)
+ (let (pdf-info-restart-process-p)
+ (should-error (pdf-info-open)))
+ (let ((pdf-info-restart-process-p t))
+ (pdf-info-open)
+ (should (pdf-info-close)))))
+
+(ert-deftest pdf-info-getannots ()
+ (skip-unless (pdf-info-writable-annotations-p))
+ (pdf-test-with-test-pdf
+ (when (memq 'markup-annotations
+ (pdf-info-features))
+ (cl-labels ((alists-get (alists key)
+ (mapcar (lambda (alist)
+ (cdr (assoc key alist)))
+ alists)))
+ (let (annots)
+ (should (= 5 (length (setq annots (cl-remove-if
+ (lambda (elt)
+ (memq (cdr (assq 'type elt))
+ '(file link)))
+ (pdf-info-getannots))))))
+ (should (equal (alists-get annots 'page)
+ '(2 2 2 2 2)))
+ (should (equal (sort (copy-sequence (alists-get annots 'type)) 'string-lessp)
+ (sort (copy-sequence
+ '(text strike-out highlight underline squiggly))
+ 'string-lessp)))
+ (should (equal (alists-get annots 'color)
+ '("#ff0000" "#ff0000" "#ff0000"
+ "#ff0000" "#ff0000")))
+ (should (cl-every 'pdf-test-relative-edges-p
+ (alists-get annots 'edges))))))))
+
+(ert-deftest pdf-info-getannot ()
+ (skip-unless (pdf-info-writable-annotations-p))
+ (pdf-test-with-test-pdf
+ (let* ((text-annot (car
+ (cl-remove-if-not (lambda (elt)
+ (eq (cdr (assq 'type elt)) 'text))
+ (pdf-info-getannots))))
+ (key (cdr (assq 'id text-annot))))
+ (should (consp text-annot))
+ (should (symbolp key))
+ (should key)
+ (should (equal (cl-sort text-annot 'string-lessp :key 'car)
+ (cl-sort (pdf-info-getannot key)
+ 'string-lessp :key 'car))))))
+
+(ert-deftest pdf-info-addannot ()
+ (skip-unless (pdf-info-writable-annotations-p))
+ (pdf-test-with-test-pdf
+ (let (annot)
+ (should (consp (setq annot
+ (pdf-info-addannot 1 '(0 0 1 1) 'text))))
+ (should (eq 1 (cdr (assq 'page annot))))
+ (should (eq 'text (cdr (assq 'type annot))))
+ (should (equal "" (cdr (assq 'contents annot)))))))
+
+(ert-deftest pdf-info-delannot ()
+ (skip-unless (pdf-info-writable-annotations-p))
+ (pdf-test-with-test-pdf
+ (let ((nannots (length (pdf-info-getannots)))
+ annots)
+ (push (pdf-info-addannot 1 '(0 0 1 1) 'text)
+ annots)
+ (when (memq 'markup-annotations
+ (pdf-info-features))
+ (push (pdf-info-addannot 1 '(0 0 1 1) 'squiggly '(0 0 1 1)) annots)
+ (push (pdf-info-addannot 1 '(0 0 1 1) 'highlight '(0 0 1 1)) annots)
+ (push (pdf-info-addannot 1 '(0 0 1 1) 'underline '(0 0 1 1)) annots)
+ (push (pdf-info-addannot 1 '(0 0 1 1) 'strike-out '(0 0 1 1)) annots))
+ (dolist (a annots)
+ (pdf-info-delannot (cdr (assq 'id a))))
+ (should (= nannots (length (pdf-info-getannots)))))))
+
+(ert-deftest pdf-info-mvannot ()
+ (skip-unless (pdf-info-writable-annotations-p))
+ (pdf-test-with-test-pdf
+ (let ((edges '(0.25 0.25 1.0 1.0))
+ (id (cdr (assq 'id (car (pdf-info-getannots))))))
+ (pdf-info-mvannot id edges)
+ (should (equal (cdr (assq 'edges (pdf-info-getannot id)))
+ edges)))))
+
+(ert-deftest pdf-info-editannot ()
+ (skip-unless (pdf-info-writable-annotations-p))
+ (pdf-test-with-test-pdf
+ (let ((color "#ffa500")
+ (id (cdr (assq 'id (car (pdf-info-getannots))))))
+ (should (and id (symbolp id)))
+ (pdf-info-editannot id `((color . ,color)))
+ (should (equal (cdr (assq 'color (pdf-info-getannot id)))
+ color)))))
+
+(ert-deftest pdf-info-save ()
+ (skip-unless (pdf-info-writable-annotations-p))
+ (pdf-test-with-test-pdf
+ (dolist (id (mapcar (lambda (a)
+ (cdr (assq 'id a)))
+ (pdf-info-getannots)))
+ (pdf-info-delannot id))
+ (let (tempfile)
+ (unwind-protect
+ (progn
+ (setq tempfile (pdf-info-save))
+ (should (file-exists-p tempfile))
+ (should (= 0 (length (pdf-info-getannots nil tempfile)))))
+ (when (file-exists-p tempfile)
+ (delete-file tempfile))))))
+
+(ert-deftest pdf-info-check-epdfinfo ()
+ (should (progn (pdf-info-check-epdfinfo) t))
+ (should-error
+ (let (pdf-info-epdfinfo-program)
+ (pdf-info-check-epdfinfo)))
+ (should-error
+ (let ((pdf-info-epdfinfo-program 42))
+ (pdf-info-check-epdfinfo)))
+ (should-error
+ (let ((pdf-info-epdfinfo-program
+ (make-temp-name "pdf-info")))
+ (pdf-info-check-epdfinfo))))
+
+;; FIXME: Write me.
+;; (ert-deftest pdf-info-getattachment-from-annot ()
+;; (pdf-test-with-test-pdf
+;; ))
+
+;; (ert-deftest pdf-info-getattachments ()
+;; (pdf-test-with-test-pdf
+;; ))
+
+;; (ert-deftest pdf-info-synctex-forward-search ()
+;; (pdf-test-with-test-pdf
+;; ))
+
+;; (ert-deftest pdf-info-synctex-backward-search ()
+;; (pdf-test-with-test-pdf
+;; ))
+
+;; (ert-deftest pdf-info-renderpage ()
+;; (pdf-test-with-test-pdf
+;; ))
+
+;; (ert-deftest pdf-info-renderpage-text-regions ()
+;; (pdf-test-with-test-pdf
+;; ))
+
+;; (ert-deftest pdf-info-renderpage-highlight ()
+;; (pdf-test-with-test-pdf
+;; ))
+
+;; (ert-deftest pdf-info-boundingbox ()
+;; (pdf-test-with-test-pdf
+;; ))