From b3437f9b188919e925be82c89381bfa8c7c09594 Mon Sep 17 00:00:00 2001 From: Vedang Manerikar Date: Wed, 31 Dec 2025 13:51:39 +0530 Subject: test: add pdf-roll tests and fix defcustom bug Add automated tests for pdf-roll functionality: - pdf-roll-page-to-pos utility function - pdf-roll-page-at-current-pos with various positions - Customization defaults - Symbol properties - Minor mode keymap existence Fix bug in pdf-roll-margin-color defcustom where the :set function didn't actually set the variable value. --- lisp/pdf-roll.el | 4 ++- test/pdf-roll-test.el | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 test/pdf-roll-test.el diff --git a/lisp/pdf-roll.el b/lisp/pdf-roll.el index e47063b..2cc5d16 100644 --- a/lisp/pdf-roll.el +++ b/lisp/pdf-roll.el @@ -43,7 +43,9 @@ (defcustom pdf-roll-margin-color "gray" "Background color of overlay, i.e. page separation color." :type 'color - :set (lambda (_ color) (put 'pdf-roll-margin 'face `(:background ,color)))) + :set (lambda (sym color) + (set-default sym color) + (put 'pdf-roll-margin 'face `(:background ,color)))) ;;; Variables (defvar pdf-roll--state nil diff --git a/test/pdf-roll-test.el b/test/pdf-roll-test.el new file mode 100644 index 0000000..c4b9544 --- /dev/null +++ b/test/pdf-roll-test.el @@ -0,0 +1,90 @@ +;; -*- lexical-binding: t -*- + +(require 'pdf-roll) +(require 'ert) + +;; Tests for pdf-roll.el - continuous scroll functionality. +;; Many pdf-roll functions require window context, so these tests focus on +;; utility functions and basic mode setup that can be tested in batch mode. + +;;; Utility function tests + +(ert-deftest pdf-roll-page-to-pos-basic () + "Test pdf-roll-page-to-pos returns correct buffer positions." + ;; Page 1 should be at position 1 + (should (= (pdf-roll-page-to-pos 1) 1)) + ;; Page 2 should be at position 5 + (should (= (pdf-roll-page-to-pos 2) 5)) + ;; Page 3 should be at position 9 + (should (= (pdf-roll-page-to-pos 3) 9)) + ;; Page 10 should be at position 37 + (should (= (pdf-roll-page-to-pos 10) 37))) + +(ert-deftest pdf-roll-page-at-current-pos-basic () + "Test pdf-roll-page-at-current-pos returns correct page numbers." + (with-temp-buffer + ;; Position 1 (page 1) + (goto-char 1) + (insert " ") ; Need content at position + (goto-char 1) + (should (= (pdf-roll-page-at-current-pos) 1))) + (with-temp-buffer + ;; Position 5 (page 2) + (insert " X") ; 5 chars, point at 5 is page 2 + (goto-char 5) + (should (= (pdf-roll-page-at-current-pos) 2))) + (with-temp-buffer + ;; Position 9 (page 3) + (insert " X") ; 9 chars + (goto-char 9) + (should (= (pdf-roll-page-at-current-pos) 3)))) + +(ert-deftest pdf-roll-page-at-current-pos-error-on-even () + "Test pdf-roll-page-at-current-pos errors on even positions." + (with-temp-buffer + (insert " ") + (goto-char 2) + (should-error (pdf-roll-page-at-current-pos)))) + +;;; Customization tests + +(ert-deftest pdf-roll-vertical-margin-default () + "Test pdf-roll-vertical-margin has correct default value." + (should (= pdf-roll-vertical-margin 2))) + +(ert-deftest pdf-roll-margin-color-default () + "Test pdf-roll-margin-color has correct default value." + (should (equal pdf-roll-margin-color "gray"))) + +;;; Symbol property tests + +(ert-deftest pdf-roll-symbol-properties () + "Test that pdf-roll symbol has correct properties set." + ;; Display property for placeholder + (should (equal (get 'pdf-roll 'display) '(space :width 25 :height 1000))) + ;; Evaporate property + (should (get 'pdf-roll 'evaporate)) + (should (get 'pdf-roll-margin 'evaporate))) + +;;; Face tests + +(ert-deftest pdf-roll-default-face-exists () + "Test that pdf-roll-default face is defined." + (should (facep 'pdf-roll-default))) + +;;; Minor mode keymap tests + +(ert-deftest pdf-roll-minor-mode-keymap-exists () + "Test that pdf-view-roll-minor-mode-map is defined with remappings." + (should (keymapp pdf-view-roll-minor-mode-map)) + ;; Check that scroll commands are remapped + (should (lookup-key pdf-view-roll-minor-mode-map + [remap pdf-view-previous-line-or-previous-page])) + (should (lookup-key pdf-view-roll-minor-mode-map + [remap pdf-view-next-line-or-next-page]))) + +;;; Provide + +(provide 'pdf-roll-test) + +;;; pdf-roll-test.el ends here -- cgit v1.0