branch: externals/org
commit 2b2f3b21c0d9147892942634a546150c2be7c496
Author: ApollonDeParnasse <[email protected]>
Commit: Morgan Smith <[email protected]>
Testing: New org-habit tests
* testing/lisp/test-org-habit.el
(org-test-habit): Fix docstring typo.
(test-org-habit/simple-habit/week)
(test-org-habit/simple-habit/month)
(test-org-habit/bad-habit-bad-repeater): New tests
(test-org-habit/bad-habit-short-repeater)
(test-org-habit/bad-habit-no-scheduled): Add more test cases
---
testing/lisp/test-org-habit.el | 96 +++++++++++++++++++++++++++++++++++++++---
1 file changed, 90 insertions(+), 6 deletions(-)
diff --git a/testing/lisp/test-org-habit.el b/testing/lisp/test-org-habit.el
index 7bd3ee53a22..20f9a452290 100644
--- a/testing/lisp/test-org-habit.el
+++ b/testing/lisp/test-org-habit.el
@@ -122,6 +122,68 @@ SCHEDULED: <2009-10-21 Sat ++2d>
(org-agenda nil "f")
(buffer-string)))))))))
+(ert-deftest test-org-habit/simple-habit/week ()
+ "Test the agenda view for a simple habit."
+ (org-test-with-timezone "UTC0"
+ (org-test-at-time "2026-06-16"
+ (let ((org-agenda-custom-commands
+ org-test-habit-no-fluff-agenda)
+ (org-habit-graph-column 5))
+ (org-test-agenda-with-agenda
+ "* TODO habit
+SCHEDULED: <2026-06-16 Tue +1w>
+:PROPERTIES:
+:STYLE: habit
+:END:
+- State \"DONE\" from \"TODO\" [2026-06-16 Tue]
+- State \"DONE\" from \"TODO\" [2026-06-09 Tue]
+- State \"DONE\" from \"TODO\" [2026-06-02 Tue]
+- State \"DONE\" from \"TODO\" [2026-05-26 Tue]
+- State \"DONE\" from \"TODO\" [2026-05-12 Tue]
+- State \"DONE\" from \"TODO\" [2026-05-05 Tue]
+- State \"DONE\" from \"TODO\" [2026-04-28 Tue]
+- State \"DONE\" from \"TODO\" [2026-04-21 Tue]
+- State \"DONE\" from \"TODO\" [2026-04-14 Tue]
+- State \"DONE\" from \"TODO\" [2026-04-07 Tue]
+- State \"DONE\" from \"TODO\" [2026-03-31 Tue]"
+ (should
+ (string-equal
+ "\nhabit* * * * \n"
+ (progn
+ (org-agenda nil "f")
+ (buffer-string)))))))))
+
+(ert-deftest test-org-habit/simple-habit/month ()
+ "Test the agenda view for a simple habit."
+ ;; Avoid DST when TZ="Europe/Istanbul". See `test-org-habit/dst'.
+ (org-test-with-timezone "UTC0"
+ (org-test-at-time "2026-06-17"
+ (let ((org-agenda-custom-commands
+ org-test-habit-no-fluff-agenda)
+ (org-habit-graph-column 5))
+ (org-test-agenda-with-agenda
+ "* TODO habit
+SCHEDULED: <2026-06-17 Wed .+1m/3m>
+:PROPERTIES:
+:STYLE: habit
+:LAST_REPEAT: [2026-05-17 Mon 00:36]
+:END:
+- State \"DONE\" from \"TODO\" [2026-05-17 Sun]
+- State \"DONE\" from \"TODO\" [2026-04-16 Thu]
+- State \"DONE\" from \"TODO\" [2026-03-17 Tue]
+- State \"DONE\" from \"TODO\" [2026-02-14 Sat]
+- State \"DONE\" from \"TODO\" [2025-12-15 Mon]
+- State \"DONE\" from \"TODO\" [2025-11-15 Sat]
+- State \"DONE\" from \"TODO\" [2025-09-15 Mon]
+- State \"DONE\" from \"TODO\" [2025-08-16 Sat]
+- State \"DONE\" from \"TODO\" [2025-07-16 Wed]"
+ (should
+ (string-equal
+ "\nhabit ! \n"
+ (progn
+ (org-agenda nil "f")
+ (buffer-string)))))))))
+
(ert-deftest test-org-habit/org-extend-today-until ()
"Test habit graph with `org-extend-today-until' set."
:expected-result :failed
@@ -376,16 +438,30 @@ SCHEDULED: <2009-10-17 Sat>
(should-error
(org-agenda nil "a"))))
+(ert-deftest test-org-habit/bad-habit-bad-repeater ()
+ "Test a habit with a bad repeater."
+ (dolist (repeater '("7d" "12w" "3m" ".+7" "+7" "++2"))
+ (org-test-agenda-with-agenda
+ (concat "* TODO bad repeater
+SCHEDULED: <2026-01-21 Wed " repeater ">
+:PROPERTIES:
+:STYLE: habit
+:END:")
+ (should-error
+ (org-agenda nil "a")))))
+
(ert-deftest test-org-habit/bad-habit-short-repeater ()
"Test a habit with a period of less then 1 day."
- (org-test-agenda-with-agenda
- "* TODO repeat period less then 1 day
-SCHEDULED: <2009-10-17 Sat +0d>
+ (dolist (repeater '("+0d" "+0w" "+1h" "+23h"))
+ (org-test-agenda-with-agenda
+ (concat
+ "* TODO repeat period less then 1 day
+SCHEDULED: <2009-10-17 Sat " repeater ">
:PROPERTIES:
:STYLE: habit
-:END:"
- (should-error
- (org-agenda nil "a"))))
+:END:")
+ (should-error
+ (org-agenda nil "a")))))
(ert-deftest test-org-habit/bad-habit-no-scheduled ()
"Test a habit that is not scheduled."
@@ -393,6 +469,14 @@ SCHEDULED: <2009-10-17 Sat +0d>
"* TODO no scheduled <2009-10-17 Sat +1d>
:PROPERTIES:
:STYLE: habit
+:END:"
+ (should-error
+ (org-agenda nil "a")))
+
+ (org-test-agenda-with-agenda
+ "* TODO no scheduled <2026-06-17 Wed 11:59 +1d>
+:PROPERTIES:
+:STYLE: habit
:END:"
(should-error
(org-agenda nil "a"))))