aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-05 12:39:55 -0500
committerCraig Jennings <c@cjennings.net>2026-05-05 12:39:55 -0500
commit3019a33d391912120a78cad43a49eb34c4a1d044 (patch)
tree4941d154529ce988bbdeb5e1929fa6cdea35f94a /tests
parent26fabb22edfea51e8a686c179ab91d00a2ff0bc3 (diff)
downloadchime-3019a33d391912120a78cad43a49eb34c4a1d044.tar.gz
chime-3019a33d391912120a78cad43a49eb34c4a1d044.zip
refactor!: collapse six filter defcustoms into include/exclude alists
Six per-axis filter variables (keyword/tags/predicate × whitelist/blacklist) were carrying parallel structure for what's really one decision: include events that look like X, exclude events that look like Y. I merged them into two alists, `chime-include-filters' and `chime-exclude-filters', each keyed by axis (`keywords', `tags', `predicates'). Default for `chime-exclude-filters' keeps the same out-of-the-box behavior — done items and declined Google Calendar invites stay filtered: ((predicates . (chime-done-keywords-predicate chime-declined-events-predicate))) Implementation: one shared `chime--filter-predicates' helper that walks the alist and emits a marker-taking predicate per non-empty axis. The public callers — now `chime--apply-include-filters' and `chime--apply-exclude-filters' — wrap that helper with `-orfn'-then-`-filter' and `-orfn'-then-`-remove' respectively. The async-environment regex injection list shrank from six names to two, and the debug config dump in chime-debug.el follows. The terminology shift (whitelist/blacklist → include/exclude) drops loaded language for descriptive intent. The internal helpers and the public function names all moved together. Tests: 700-ish lines across five test files (test-chime-apply-whitelist, test-chime-apply-blacklist, test-chime-whitelist-blacklist-conflicts, test-chime-environment-regex, test-chime-declined-events-predicate) were rewritten to bind the new alists. The dedup-conflict tests still exercise the same precedence rule (exclude wins on overlap). README's filtering section was rewritten end-to-end with new examples. Migration: (setq chime-keyword-whitelist '("TODO")) ;; -> (setq chime-include-filters '((keywords . ("TODO")))) (setq chime-predicate-blacklist '(my-pred)) ;; -> (setq chime-exclude-filters '((predicates . (my-pred)))) This brings the consolidation pass to 37 -> 29 defcustoms, the target from .ai/settings-consolidation.org.
Diffstat (limited to 'tests')
-rw-r--r--tests/test-chime-apply-blacklist.el54
-rw-r--r--tests/test-chime-apply-whitelist.el50
-rw-r--r--tests/test-chime-declined-events-predicate.el12
-rw-r--r--tests/test-chime-environment-regex.el6
-rw-r--r--tests/test-chime-whitelist-blacklist-conflicts.el64
5 files changed, 83 insertions, 103 deletions
diff --git a/tests/test-chime-apply-blacklist.el b/tests/test-chime-apply-blacklist.el
index 036f2a4..df2f317 100644
--- a/tests/test-chime-apply-blacklist.el
+++ b/tests/test-chime-apply-blacklist.el
@@ -1,4 +1,4 @@
-;;; test-chime-apply-blacklist.el --- Tests for chime--apply-blacklist -*- lexical-binding: t; -*-
+;;; test-chime-apply-blacklist.el --- Tests for chime--apply-exclude-filters -*- lexical-binding: t; -*-
;; Copyright (C) 2024-2026 Craig Jennings
@@ -19,7 +19,7 @@
;;; Commentary:
-;; Unit tests for chime--apply-blacklist function.
+;; Unit tests for chime--apply-exclude-filters function.
;; Tests use real org-mode buffers with real org syntax.
;; Tests cover normal cases, boundary cases, and error cases.
@@ -36,16 +36,12 @@
"Setup function run before each test."
(chime-create-test-base-dir)
;; Reset blacklist settings
- (setq chime-keyword-blacklist nil)
- (setq chime-tags-blacklist nil)
- (setq chime-predicate-blacklist nil))
+ (setq chime-exclude-filters nil))
(defun test-chime-apply-blacklist-teardown ()
"Teardown function run after each test."
(chime-delete-test-base-dir)
- (setq chime-keyword-blacklist nil)
- (setq chime-tags-blacklist nil)
- (setq chime-predicate-blacklist nil))
+ (setq chime-exclude-filters nil))
;;; Normal Cases
@@ -53,10 +49,9 @@
"Test that nil blacklist returns all markers unchanged."
(test-chime-apply-blacklist-setup)
(unwind-protect
- (let* ((chime-keyword-blacklist nil)
- (chime-tags-blacklist nil)
+ (let* ((chime-exclude-filters nil)
(markers (list (make-marker) (make-marker) (make-marker)))
- (result (chime--apply-blacklist markers)))
+ (result (chime--apply-exclude-filters markers)))
;; Should return all markers when blacklist is nil
(should (equal (length result) 3)))
(test-chime-apply-blacklist-teardown)))
@@ -76,8 +71,8 @@
(let ((marker2 (point-marker)))
(forward-line 1)
(let ((marker3 (point-marker))
- (chime-keyword-blacklist '("DONE")))
- (let ((result (chime--apply-blacklist (list marker1 marker2 marker3))))
+ (chime-exclude-filters `((keywords . ,'("DONE")))))
+ (let ((result (chime--apply-exclude-filters (list marker1 marker2 marker3))))
;; Should filter out DONE marker
(should (= (length result) 2))
(should (member marker1 result))
@@ -100,8 +95,8 @@
(let ((marker2 (point-marker)))
(forward-line 1)
(let ((marker3 (point-marker))
- (chime-tags-blacklist '("personal")))
- (let ((result (chime--apply-blacklist (list marker1 marker2 marker3))))
+ (chime-exclude-filters `((tags . ,'("personal")))))
+ (let ((result (chime--apply-exclude-filters (list marker1 marker2 marker3))))
;; Should filter out marker with "personal" tag
(should (= (length result) 2))
(should (member marker1 result))
@@ -124,9 +119,8 @@
(let ((marker2 (point-marker)))
(forward-line 1)
(let ((marker3 (point-marker))
- (chime-keyword-blacklist '("DONE"))
- (chime-tags-blacklist '("archive")))
- (let ((result (chime--apply-blacklist (list marker1 marker2 marker3))))
+ (chime-exclude-filters `((keywords . ,'("DONE")) (tags . ,'("archive")))))
+ (let ((result (chime--apply-exclude-filters (list marker1 marker2 marker3))))
;; Should filter out marker2 (DONE) and marker3 (archive tag)
(should (= (length result) 1))
(should (member marker1 result))
@@ -149,8 +143,8 @@
(let ((marker2 (point-marker)))
(forward-line 1)
(let ((marker3 (point-marker))
- (chime-keyword-blacklist '("DONE")))
- (let ((result (chime--apply-blacklist (list marker1 marker2 marker3))))
+ (chime-exclude-filters `((keywords . ,'("DONE")))))
+ (let ((result (chime--apply-exclude-filters (list marker1 marker2 marker3))))
;; Should only keep TODO marker, filter out both DONE markers
(should (= (length result) 1))
(should (member marker1 result)))))))
@@ -162,8 +156,8 @@
"Test that empty markers list returns empty."
(test-chime-apply-blacklist-setup)
(unwind-protect
- (let ((chime-keyword-blacklist '("DONE"))
- (result (chime--apply-blacklist '())))
+ (let ((chime-exclude-filters `((keywords . ,'("DONE"))))
+ (result (chime--apply-exclude-filters '())))
(should (equal result '())))
(test-chime-apply-blacklist-teardown)))
@@ -179,8 +173,8 @@
(let ((marker1 (point-marker)))
(forward-line 1)
(let ((marker2 (point-marker))
- (chime-keyword-blacklist '("DONE")))
- (let ((result (chime--apply-blacklist (list marker1 marker2))))
+ (chime-exclude-filters `((keywords . ,'("DONE")))))
+ (let ((result (chime--apply-exclude-filters (list marker1 marker2))))
(should (= (length result) 1))
(should (member marker1 result))))))
(test-chime-apply-blacklist-teardown)))
@@ -195,8 +189,8 @@
(let ((marker1 (point-marker)))
(insert "* DONE Task 2\n")
(let ((marker2 (point-marker))
- (chime-keyword-blacklist '("DONE")))
- (let ((result (chime--apply-blacklist (list marker1 marker2))))
+ (chime-exclude-filters `((keywords . ,'("DONE")))))
+ (let ((result (chime--apply-exclude-filters (list marker1 marker2))))
(should (equal result '()))))))
(test-chime-apply-blacklist-teardown)))
@@ -210,8 +204,8 @@
(org-mode)
(insert "* Entry without TODO keyword\n")
(let ((marker1 (point-marker))
- (chime-keyword-blacklist '("DONE")))
- (let ((result (chime--apply-blacklist (list marker1))))
+ (chime-exclude-filters `((keywords . ,'("DONE")))))
+ (let ((result (chime--apply-exclude-filters (list marker1))))
;; Should keep marker with nil keyword (not in blacklist)
(should (= (length result) 1)))))
(test-chime-apply-blacklist-teardown)))
@@ -224,8 +218,8 @@
(org-mode)
(insert "* Entry without tags\n")
(let ((marker1 (point-marker))
- (chime-tags-blacklist '("archive")))
- (let ((result (chime--apply-blacklist (list marker1))))
+ (chime-exclude-filters `((tags . ,'("archive")))))
+ (let ((result (chime--apply-exclude-filters (list marker1))))
;; Should keep marker with nil tags (not in blacklist)
(should (= (length result) 1)))))
(test-chime-apply-blacklist-teardown)))
diff --git a/tests/test-chime-apply-whitelist.el b/tests/test-chime-apply-whitelist.el
index e61f3c3..1552ee2 100644
--- a/tests/test-chime-apply-whitelist.el
+++ b/tests/test-chime-apply-whitelist.el
@@ -1,4 +1,4 @@
-;;; test-chime-apply-whitelist.el --- Tests for chime--apply-whitelist -*- lexical-binding: t; -*-
+;;; test-chime-apply-whitelist.el --- Tests for chime--apply-include-filters -*- lexical-binding: t; -*-
;; Copyright (C) 2024-2026 Craig Jennings
@@ -19,7 +19,7 @@
;;; Commentary:
-;; Unit tests for chime--apply-whitelist function.
+;; Unit tests for chime--apply-include-filters function.
;; Tests use real org-mode buffers with real org syntax.
;; Tests cover normal cases, boundary cases, and error cases.
@@ -36,16 +36,12 @@
"Setup function run before each test."
(chime-create-test-base-dir)
;; Reset whitelist settings
- (setq chime-keyword-whitelist nil)
- (setq chime-tags-whitelist nil)
- (setq chime-predicate-whitelist nil))
+ (setq chime-include-filters nil))
(defun test-chime-apply-whitelist-teardown ()
"Teardown function run after each test."
(chime-delete-test-base-dir)
- (setq chime-keyword-whitelist nil)
- (setq chime-tags-whitelist nil)
- (setq chime-predicate-whitelist nil))
+ (setq chime-include-filters nil))
;;; Normal Cases
@@ -53,10 +49,9 @@
"Test that nil whitelist returns all markers unchanged."
(test-chime-apply-whitelist-setup)
(unwind-protect
- (let* ((chime-keyword-whitelist nil)
- (chime-tags-whitelist nil)
+ (let* ((chime-include-filters nil)
(markers (list (make-marker) (make-marker) (make-marker)))
- (result (chime--apply-whitelist markers)))
+ (result (chime--apply-include-filters markers)))
;; Should return all markers when whitelist is nil
(should (equal (length result) 3)))
(test-chime-apply-whitelist-teardown)))
@@ -76,8 +71,8 @@
(let ((marker2 (point-marker)))
(forward-line 1)
(let ((marker3 (point-marker))
- (chime-keyword-whitelist '("TODO")))
- (let ((result (chime--apply-whitelist (list marker1 marker2 marker3))))
+ (chime-include-filters `((keywords . ,'("TODO")))))
+ (let ((result (chime--apply-include-filters (list marker1 marker2 marker3))))
;; Should only keep TODO markers
(should (= (length result) 2))
(should (member marker1 result))
@@ -100,8 +95,8 @@
(let ((marker2 (point-marker)))
(forward-line 1)
(let ((marker3 (point-marker))
- (chime-tags-whitelist '("urgent")))
- (let ((result (chime--apply-whitelist (list marker1 marker2 marker3))))
+ (chime-include-filters `((tags . ,'("urgent")))))
+ (let ((result (chime--apply-include-filters (list marker1 marker2 marker3))))
;; Should only keep markers with "urgent" tag
(should (= (length result) 2))
(should (member marker1 result))
@@ -124,9 +119,8 @@
(let ((marker2 (point-marker)))
(forward-line 1)
(let ((marker3 (point-marker))
- (chime-keyword-whitelist '("TODO"))
- (chime-tags-whitelist '("urgent")))
- (let ((result (chime--apply-whitelist (list marker1 marker2 marker3))))
+ (chime-include-filters `((keywords . ,'("TODO")) (tags . ,'("urgent")))))
+ (let ((result (chime--apply-include-filters (list marker1 marker2 marker3))))
;; Should keep marker1 (TODO) and marker3 (urgent tag)
(should (= (length result) 2))
(should (member marker1 result))
@@ -140,8 +134,8 @@
"Test that empty markers list returns empty."
(test-chime-apply-whitelist-setup)
(unwind-protect
- (let ((chime-keyword-whitelist '("TODO"))
- (result (chime--apply-whitelist '())))
+ (let ((chime-include-filters `((keywords . ,'("TODO"))))
+ (result (chime--apply-include-filters '())))
(should (equal result '())))
(test-chime-apply-whitelist-teardown)))
@@ -157,8 +151,8 @@
(let ((marker1 (point-marker)))
(forward-line 1)
(let ((marker2 (point-marker))
- (chime-keyword-whitelist '("TODO")))
- (let ((result (chime--apply-whitelist (list marker1 marker2))))
+ (chime-include-filters `((keywords . ,'("TODO")))))
+ (let ((result (chime--apply-include-filters (list marker1 marker2))))
(should (= (length result) 1))
(should (member marker1 result))))))
(test-chime-apply-whitelist-teardown)))
@@ -175,8 +169,8 @@
(let ((marker1 (point-marker)))
(forward-line 1)
(let ((marker2 (point-marker))
- (chime-keyword-whitelist '("TODO")))
- (let ((result (chime--apply-whitelist (list marker1 marker2))))
+ (chime-include-filters `((keywords . ,'("TODO")))))
+ (let ((result (chime--apply-include-filters (list marker1 marker2))))
(should (equal result '()))))))
(test-chime-apply-whitelist-teardown)))
@@ -191,8 +185,8 @@
(insert "* Entry without TODO keyword\n")
(goto-char (point-min))
(let ((marker1 (point-marker))
- (chime-keyword-whitelist '("TODO")))
- (let ((result (chime--apply-whitelist (list marker1))))
+ (chime-include-filters `((keywords . ,'("TODO")))))
+ (let ((result (chime--apply-include-filters (list marker1))))
;; Should filter out marker with nil keyword (not in whitelist)
(should (= (length result) 0)))))
(test-chime-apply-whitelist-teardown)))
@@ -206,8 +200,8 @@
(insert "* Entry without tags\n")
(goto-char (point-min))
(let ((marker1 (point-marker))
- (chime-tags-whitelist '("urgent")))
- (let ((result (chime--apply-whitelist (list marker1))))
+ (chime-include-filters `((tags . ,'("urgent")))))
+ (let ((result (chime--apply-include-filters (list marker1))))
;; Should filter out marker with nil tags (not in whitelist)
(should (= (length result) 0)))))
(test-chime-apply-whitelist-teardown)))
diff --git a/tests/test-chime-declined-events-predicate.el b/tests/test-chime-declined-events-predicate.el
index ca25faa..5f8c4b8 100644
--- a/tests/test-chime-declined-events-predicate.el
+++ b/tests/test-chime-declined-events-predicate.el
@@ -144,13 +144,15 @@ than treating it as declined."
(let ((marker (point-marker)))
(should-not (chime-declined-events-predicate marker)))))
-;;;; Integration with the default predicate-blacklist
+;;;; Integration with the default exclude filters
-(ert-deftest test-chime-declined-events-predicate-on-default-blacklist ()
- "Normal: the predicate ships in the default `chime-predicate-blacklist'
-so out-of-the-box installs hide declined events without extra config."
+(ert-deftest test-chime-declined-events-predicate-on-default-exclude-filters ()
+ "Normal: the predicate ships in the default `chime-exclude-filters'
+under the predicates key, so out-of-the-box installs hide declined
+events without extra config."
(should (memq 'chime-declined-events-predicate
- (default-value 'chime-predicate-blacklist))))
+ (alist-get 'predicates
+ (default-value 'chime-exclude-filters)))))
(provide 'test-chime-declined-events-predicate)
;;; test-chime-declined-events-predicate.el ends here
diff --git a/tests/test-chime-environment-regex.el b/tests/test-chime-environment-regex.el
index 2179198..3b67877 100644
--- a/tests/test-chime-environment-regex.el
+++ b/tests/test-chime-environment-regex.el
@@ -34,10 +34,8 @@
(let ((regex (chime--environment-regex))
(chime-additional-environment-regexes nil))
(dolist (var '("org-agenda-files" "load-path" "org-todo-keywords"
- "chime-alert-intervals" "chime-keyword-whitelist"
- "chime-keyword-blacklist" "chime-tags-whitelist"
- "chime-tags-blacklist" "chime-predicate-whitelist"
- "chime-predicate-blacklist"))
+ "chime-alert-intervals"
+ "chime-include-filters" "chime-exclude-filters"))
(should (string-match-p regex var)))))
(ert-deftest test-chime--environment-regex-includes-additional-regexes ()
diff --git a/tests/test-chime-whitelist-blacklist-conflicts.el b/tests/test-chime-whitelist-blacklist-conflicts.el
index f79bffd..5becfe0 100644
--- a/tests/test-chime-whitelist-blacklist-conflicts.el
+++ b/tests/test-chime-whitelist-blacklist-conflicts.el
@@ -39,22 +39,14 @@
"Setup function run before each test."
(chime-create-test-base-dir)
;; Reset all whitelist/blacklist settings
- (setq chime-keyword-whitelist nil)
- (setq chime-tags-whitelist nil)
- (setq chime-predicate-whitelist nil)
- (setq chime-keyword-blacklist nil)
- (setq chime-tags-blacklist nil)
- (setq chime-predicate-blacklist nil))
+ (setq chime-include-filters nil)
+ (setq chime-exclude-filters nil))
(defun test-chime-conflicts-teardown ()
"Teardown function run after each test."
(chime-delete-test-base-dir)
- (setq chime-keyword-whitelist nil)
- (setq chime-tags-whitelist nil)
- (setq chime-predicate-whitelist nil)
- (setq chime-keyword-blacklist nil)
- (setq chime-tags-blacklist nil)
- (setq chime-predicate-blacklist nil))
+ (setq chime-include-filters nil)
+ (setq chime-exclude-filters nil))
;;; Keyword Conflict Tests
@@ -74,11 +66,11 @@ Current behavior: blacklist wins (item is filtered out)."
(let ((marker2 (point-marker)))
(forward-line 1)
(let ((marker3 (point-marker))
- (chime-keyword-whitelist '("TODO" "DONE"))
- (chime-keyword-blacklist '("DONE"))) ; DONE in both lists
+ (chime-include-filters `((keywords . ,'("TODO" "DONE"))))
+ (chime-exclude-filters `((keywords . ,'("DONE"))))) ; DONE in both lists
;; Apply both filters (simulating what happens in chime--gather-timestamps)
- (let* ((after-whitelist (chime--apply-whitelist (list marker1 marker2 marker3)))
- (after-blacklist (chime--apply-blacklist after-whitelist)))
+ (let* ((after-whitelist (chime--apply-include-filters (list marker1 marker2 marker3)))
+ (after-blacklist (chime--apply-exclude-filters after-whitelist)))
;; Whitelist should keep all three (all are TODO or DONE)
(should (= (length after-whitelist) 3))
(should (member marker1 after-whitelist))
@@ -105,10 +97,10 @@ Current behavior: blacklist wins, all items filtered out."
(let ((marker1 (point-marker)))
(forward-line 1)
(let ((marker2 (point-marker))
- (chime-keyword-whitelist '("TODO" "DONE"))
- (chime-keyword-blacklist '("TODO" "DONE")))
- (let* ((after-whitelist (chime--apply-whitelist (list marker1 marker2)))
- (after-blacklist (chime--apply-blacklist after-whitelist)))
+ (chime-include-filters `((keywords . ,'("TODO" "DONE"))))
+ (chime-exclude-filters `((keywords . ,'("TODO" "DONE")))))
+ (let* ((after-whitelist (chime--apply-include-filters (list marker1 marker2)))
+ (after-blacklist (chime--apply-exclude-filters after-whitelist)))
;; Whitelist should keep both
(should (= (length after-whitelist) 2))
;; Blacklist should remove both
@@ -133,10 +125,10 @@ Current behavior: blacklist wins (item is filtered out)."
(let ((marker2 (point-marker)))
(forward-line 1)
(let ((marker3 (point-marker))
- (chime-tags-whitelist '("urgent" "important"))
- (chime-tags-blacklist '("urgent"))) ; urgent in both lists
- (let* ((after-whitelist (chime--apply-whitelist (list marker1 marker2 marker3)))
- (after-blacklist (chime--apply-blacklist after-whitelist)))
+ (chime-include-filters `((tags . ,'("urgent" "important"))))
+ (chime-exclude-filters `((tags . ,'("urgent"))))) ; urgent in both lists
+ (let* ((after-whitelist (chime--apply-include-filters (list marker1 marker2 marker3)))
+ (after-blacklist (chime--apply-exclude-filters after-whitelist)))
;; Whitelist should keep urgent and important (markers 1 and 3)
(should (= (length after-whitelist) 2))
(should (member marker1 after-whitelist))
@@ -163,10 +155,10 @@ Current behavior: blacklist wins (OR logic means tag match filters it out)."
(let ((marker1 (point-marker)))
(forward-line 1)
(let ((marker2 (point-marker))
- (chime-keyword-whitelist '("TODO"))
- (chime-tags-blacklist '("urgent")))
- (let* ((after-whitelist (chime--apply-whitelist (list marker1 marker2)))
- (after-blacklist (chime--apply-blacklist after-whitelist)))
+ (chime-include-filters `((keywords . ,'("TODO"))))
+ (chime-exclude-filters `((tags . ,'("urgent")))))
+ (let* ((after-whitelist (chime--apply-include-filters (list marker1 marker2)))
+ (after-blacklist (chime--apply-exclude-filters after-whitelist)))
;; Whitelist should keep TODO (marker1)
(should (= (length after-whitelist) 1))
(should (member marker1 after-whitelist))
@@ -187,10 +179,10 @@ Current behavior: blacklist wins (OR logic means keyword match filters it out)."
(let ((marker1 (point-marker)))
(forward-line 1)
(let ((marker2 (point-marker))
- (chime-tags-whitelist '("urgent"))
- (chime-keyword-blacklist '("TODO")))
- (let* ((after-whitelist (chime--apply-whitelist (list marker1 marker2)))
- (after-blacklist (chime--apply-blacklist after-whitelist)))
+ (chime-include-filters `((tags . ,'("urgent"))))
+ (chime-exclude-filters `((keywords . ,'("TODO")))))
+ (let* ((after-whitelist (chime--apply-include-filters (list marker1 marker2)))
+ (after-blacklist (chime--apply-exclude-filters after-whitelist)))
;; Whitelist should keep urgent tag (marker1)
(should (= (length after-whitelist) 1))
(should (member marker1 after-whitelist))
@@ -219,10 +211,10 @@ Current behavior: only items with conflicts are filtered out."
(let ((marker3 (point-marker)))
(forward-line 1)
(let ((marker4 (point-marker))
- (chime-keyword-whitelist '("TODO"))
- (chime-tags-blacklist '("urgent")))
- (let* ((after-whitelist (chime--apply-whitelist (list marker1 marker2 marker3 marker4)))
- (after-blacklist (chime--apply-blacklist after-whitelist)))
+ (chime-include-filters `((keywords . ,'("TODO"))))
+ (chime-exclude-filters `((tags . ,'("urgent")))))
+ (let* ((after-whitelist (chime--apply-include-filters (list marker1 marker2 marker3 marker4)))
+ (after-blacklist (chime--apply-exclude-filters after-whitelist)))
;; Whitelist should keep TODO (markers 1, 3, 4)
(should (= (length after-whitelist) 3))
(should (member marker1 after-whitelist))