diff options
| author | Craig Jennings <c@cjennings.net> | 2026-01-26 01:18:09 -0600 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-01-26 01:18:09 -0600 |
| commit | 75c01e5027c0304e80097239c59f978fce94e73d (patch) | |
| tree | e87bd446a19511c8aeb2ddb619397fa6cf006642 | |
| parent | 51418d3b375f5223b98a3b7865ab428886e5acbc (diff) | |
test(theme): add comprehensive tests for dupre-theme
29 ERT tests covering:
- Palette existence and color format validation
- Semantic color resolution (dupre-get-color)
- dupre-with-colors macro binding
- Theme loading and face attributes
- Org-mode, diff, UI, and error/warning faces
Tests skip gracefully for optional packages (vertico, rainbow-delimiters).
| -rw-r--r-- | tests/test-dupre-theme.el | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/tests/test-dupre-theme.el b/tests/test-dupre-theme.el new file mode 100644 index 00000000..d044cd80 --- /dev/null +++ b/tests/test-dupre-theme.el @@ -0,0 +1,208 @@ +;;; test-dupre-theme.el --- Tests for dupre-theme -*- lexical-binding: t -*- + +;;; Commentary: + +;; ERT tests for the dupre-theme. + +;;; Code: + +(require 'ert) + +;; Add themes directory to load-path and custom-theme-load-path +(let ((themes-dir (expand-file-name "../themes" (file-name-directory (or load-file-name buffer-file-name))))) + (add-to-list 'load-path themes-dir) + (add-to-list 'custom-theme-load-path themes-dir)) + +(require 'dupre-palette) + +;;; Palette tests + +(ert-deftest dupre-palette-exists () + "Palette constant should be defined." + (should (boundp 'dupre-palette)) + (should (listp dupre-palette))) + +(ert-deftest dupre-palette-has-base-colors () + "Palette should contain essential base colors." + (should (assq 'bg dupre-palette)) + (should (assq 'fg dupre-palette)) + (should (assq 'bg+1 dupre-palette)) + (should (assq 'bg+2 dupre-palette))) + +(ert-deftest dupre-palette-has-accent-colors () + "Palette should contain accent colors." + (should (assq 'yellow dupre-palette)) + (should (assq 'blue dupre-palette)) + (should (assq 'green dupre-palette)) + (should (assq 'red dupre-palette))) + +(ert-deftest dupre-palette-colors-are-hex () + "All palette colors should be valid hex strings." + (dolist (entry dupre-palette) + (let ((color (cadr entry))) + (should (stringp color)) + (should (string-match-p "^#[0-9a-fA-F]\\{6\\}$" color))))) + +(ert-deftest dupre-get-color-base () + "dupre-get-color should retrieve base colors." + (should (string= (dupre-get-color 'bg) "#151311")) + (should (string= (dupre-get-color 'fg) "#f0fef0")) + (should (string= (dupre-get-color 'yellow) "#d7af5f"))) + +(ert-deftest dupre-get-color-semantic () + "dupre-get-color should resolve semantic mappings." + (should (string= (dupre-get-color 'accent) (dupre-get-color 'yellow))) + (should (string= (dupre-get-color 'err) (dupre-get-color 'intense-red))) + (should (string= (dupre-get-color 'success) (dupre-get-color 'green)))) + +(ert-deftest dupre-get-color-unknown-errors () + "dupre-get-color should error on unknown colors." + (should-error (dupre-get-color 'nonexistent-color))) + +(ert-deftest dupre-with-colors-binds-values () + "dupre-with-colors should bind palette colors as variables." + (dupre-with-colors + (should (string= bg "#151311")) + (should (string= fg "#f0fef0")) + (should (string= yellow "#d7af5f")) + (should (string= blue "#67809c")))) + +(ert-deftest dupre-with-colors-binds-semantic () + "dupre-with-colors should bind semantic colors resolved to values." + (dupre-with-colors + (should (string= accent "#d7af5f")) + (should (string= err "#ff2a00")) + (should (string= success "#a4ac64")))) + +;;; Theme loading tests + +(ert-deftest dupre-theme-loads () + "Theme should load without errors." + (load-theme 'dupre t) + (should (memq 'dupre custom-enabled-themes))) + +(ert-deftest dupre-theme-default-face () + "dupre-theme should set the default face correctly." + (load-theme 'dupre t) + (let ((bg (face-attribute 'default :background)) + (fg (face-attribute 'default :foreground))) + (should (string= bg "#151311")) + (should (string= fg "#f0fef0")))) + +(ert-deftest dupre-theme-comment-face-italic () + "Comments should be rendered in italic slant." + (load-theme 'dupre t) + (should (eq (face-attribute 'font-lock-comment-face :slant) 'italic))) + +(ert-deftest dupre-theme-keyword-face () + "Keywords should use blue color." + (load-theme 'dupre t) + (should (string= (face-attribute 'font-lock-keyword-face :foreground) "#67809c"))) + +(ert-deftest dupre-theme-string-face () + "Strings should use green color." + (load-theme 'dupre t) + (should (string= (face-attribute 'font-lock-string-face :foreground) "#a4ac64"))) + +(ert-deftest dupre-theme-function-face () + "Functions should use terracotta color." + (load-theme 'dupre t) + (should (string= (face-attribute 'font-lock-function-name-face :foreground) "#a7502d"))) + +;;; Org-mode face tests (require org to be loaded) +;; Note: org-level-N faces use :inherit dupre-heading-N +;; We verify inheritance is set up correctly by checking the inherit attribute + +(ert-deftest dupre-theme-org-level-1 () + "Org level 1 should inherit from dupre-heading-1." + (require 'org) + (load-theme 'dupre t) + ;; Verify the inheritance relationship is set + (should (eq (face-attribute 'org-level-1 :inherit) 'dupre-heading-1))) + +(ert-deftest dupre-theme-org-level-2 () + "Org level 2 should inherit from dupre-heading-2." + (require 'org) + (load-theme 'dupre t) + ;; Verify the inheritance relationship is set + (should (eq (face-attribute 'org-level-2 :inherit) 'dupre-heading-2))) + +(ert-deftest dupre-theme-org-todo () + "Org TODO should use intense-red." + (require 'org) + (load-theme 'dupre t) + (should (string= (face-attribute 'org-todo :foreground) "#ff2a00"))) + +(ert-deftest dupre-theme-org-done () + "Org DONE should use green." + (require 'org) + (load-theme 'dupre t) + (should (string= (face-attribute 'org-done :foreground) "#a4ac64"))) + +;;; Diff face tests (require diff-mode to be loaded) + +(ert-deftest dupre-theme-diff-added () + "Diff added should use green foreground." + (require 'diff-mode) + (load-theme 'dupre t) + (should (string= (face-attribute 'diff-added :foreground) "#a4ac64"))) + +(ert-deftest dupre-theme-diff-removed () + "Diff removed should use red foreground." + (require 'diff-mode) + (load-theme 'dupre t) + (should (string= (face-attribute 'diff-removed :foreground) "#d47c59"))) + +;;; UI face tests + +(ert-deftest dupre-theme-mode-line () + "Mode line should have correct background." + (load-theme 'dupre t) + (should (string= (face-attribute 'mode-line :background) "#474544"))) + +(ert-deftest dupre-theme-region () + "Region should use bg+2 as background." + (load-theme 'dupre t) + (should (string= (face-attribute 'region :background) "#474544"))) + +;;; Vertico face tests (skip if vertico not available) + +(ert-deftest dupre-theme-vertico-current () + "Vertico current should use bg+2 background." + (skip-unless (require 'vertico nil t)) + (load-theme 'dupre t) + (should (string= (face-attribute 'vertico-current :background) "#474544"))) + +;;; Rainbow-delimiters tests (skip if package not available) + +(ert-deftest dupre-theme-rainbow-depth-1 () + "Rainbow depth 1 should use yellow." + (skip-unless (require 'rainbow-delimiters nil t)) + (load-theme 'dupre t) + (should (string= (face-attribute 'rainbow-delimiters-depth-1-face :foreground) "#d7af5f"))) + +(ert-deftest dupre-theme-rainbow-depth-2 () + "Rainbow depth 2 should use blue." + (skip-unless (require 'rainbow-delimiters nil t)) + (load-theme 'dupre t) + (should (string= (face-attribute 'rainbow-delimiters-depth-2-face :foreground) "#67809c"))) + +;;; Error/warning face tests + +(ert-deftest dupre-theme-error-face () + "Error face should use intense-red." + (load-theme 'dupre t) + (should (string= (face-attribute 'error :foreground) "#ff2a00"))) + +(ert-deftest dupre-theme-warning-face () + "Warning face should use yellow+1." + (load-theme 'dupre t) + (should (string= (face-attribute 'warning :foreground) "#ffd75f"))) + +(ert-deftest dupre-theme-success-face () + "Success face should use green." + (load-theme 'dupre t) + (should (string= (face-attribute 'success :foreground) "#a4ac64"))) + +(provide 'test-dupre-theme) +;;; test-dupre-theme.el ends here |
