diff options
| author | Craig Jennings <c@cjennings.net> | 2026-06-30 01:00:33 -0400 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-06-30 01:00:33 -0400 |
| commit | 4a94ab09163cd3b9f4838b253ed1adcdbb8645e1 (patch) | |
| tree | 013e44a4a158a8c0ca716a03e8e18dc117e4fa58 /tests/test-nov-reading--palette.el | |
| parent | 3d10aea548fb9ec0515ea4c0ac5bb26ff7a2266c (diff) | |
| download | dotemacs-4a94ab09163cd3b9f4838b253ed1adcdbb8645e1.tar.gz dotemacs-4a94ab09163cd3b9f4838b253ed1adcdbb8645e1.zip | |
feat(nov-reading): persist font size, add per-palette structural faces
Font size now carries across books and sessions. The +/-/= keys write the text-scale offset to data/nov-reading-text-scale and the offset is restored when a book opens, so a size I set sticks instead of resetting to the base height on every reopen. The = key returns to the base height and persists that reset.
Each palette grows from a single bg/fg face into a bundle: :face plus optional :heading and :link. When a palette is active, its heading and link faces remap shr's h1-h6 and link faces buffer-local, so the EPUB hierarchy reads in the palette's accent. The remap stays buffer-local to the nov buffer, so HTML mail and eww keep the theme's normal shr colors.
Diffstat (limited to 'tests/test-nov-reading--palette.el')
| -rw-r--r-- | tests/test-nov-reading--palette.el | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/tests/test-nov-reading--palette.el b/tests/test-nov-reading--palette.el index 164ec75f..b34ea2ca 100644 --- a/tests/test-nov-reading--palette.el +++ b/tests/test-nov-reading--palette.el @@ -13,28 +13,60 @@ (require 'nov-reading) (declare-function cj/nov--reading-palette-face "nov-reading" (name)) +(declare-function cj/nov--reading-palette-plist "nov-reading" (name)) (declare-function cj/nov--next-reading-palette "nov-reading" (current names)) (defvar cj/nov-reading-palettes) +;; Each palette entry is a property list: :face supplies bg/fg, :heading and +;; :link recolor shr's heading/link faces. Structural keys are optional. +(defconst test-nov-reading--palettes + '(("sepia" :face cj/nov-reading-sepia + :heading cj/nov-reading-sepia-heading + :link cj/nov-reading-sepia-link) + ("dark" :face cj/nov-reading-dark)) + "Bundle-shaped palette fixture: sepia carries structural faces, dark omits them.") + ;;; ----------------------- cj/nov--reading-palette-face ----------------------- (ert-deftest test-nov-reading-palette-face-known () - "Normal: a known palette name resolves to its face." - (let ((cj/nov-reading-palettes '(("sepia" . cj/nov-reading-sepia) - ("dark" . cj/nov-reading-dark)))) + "Normal: a known palette name resolves to its :face." + (let ((cj/nov-reading-palettes test-nov-reading--palettes)) (should (eq (cj/nov--reading-palette-face "sepia") 'cj/nov-reading-sepia)) (should (eq (cj/nov--reading-palette-face "dark") 'cj/nov-reading-dark)))) (ert-deftest test-nov-reading-palette-face-unknown () "Error: an unknown name resolves to nil." - (let ((cj/nov-reading-palettes '(("sepia" . cj/nov-reading-sepia)))) + (let ((cj/nov-reading-palettes test-nov-reading--palettes)) (should-not (cj/nov--reading-palette-face "nope")))) (ert-deftest test-nov-reading-palette-face-nil () "Boundary: a nil name resolves to nil." - (let ((cj/nov-reading-palettes '(("sepia" . cj/nov-reading-sepia)))) + (let ((cj/nov-reading-palettes test-nov-reading--palettes)) (should-not (cj/nov--reading-palette-face nil)))) +;;; ---------------------- cj/nov--reading-palette-plist ----------------------- + +(ert-deftest test-nov-reading-palette-plist-structural-faces () + "Normal: a palette's :heading and :link faces are retrievable from its plist." + (let ((cj/nov-reading-palettes test-nov-reading--palettes)) + (should (eq (plist-get (cj/nov--reading-palette-plist "sepia") :heading) + 'cj/nov-reading-sepia-heading)) + (should (eq (plist-get (cj/nov--reading-palette-plist "sepia") :link) + 'cj/nov-reading-sepia-link)))) + +(ert-deftest test-nov-reading-palette-plist-omitted-structural () + "Boundary: a palette that omits structural keys yields nil for them." + (let ((cj/nov-reading-palettes test-nov-reading--palettes)) + (should (eq (plist-get (cj/nov--reading-palette-plist "dark") :face) + 'cj/nov-reading-dark)) + (should-not (plist-get (cj/nov--reading-palette-plist "dark") :heading)) + (should-not (plist-get (cj/nov--reading-palette-plist "dark") :link)))) + +(ert-deftest test-nov-reading-palette-plist-unknown () + "Error: an unknown palette name yields a nil plist." + (let ((cj/nov-reading-palettes test-nov-reading--palettes)) + (should-not (cj/nov--reading-palette-plist "nope")))) + ;;; ----------------------- cj/nov--next-reading-palette ----------------------- (ert-deftest test-nov-reading-next-palette-advances () |
