[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 97b6600 119/135: Additional tests and minor cleanup
From: |
Ian Dunn |
Subject: |
[elpa] master 97b6600 119/135: Additional tests and minor cleanup |
Date: |
Mon, 17 Feb 2020 10:53:04 -0500 (EST) |
branch: master
commit 97b6600954bf6589c9972282d303a05c3803f521
Author: Ian Dunn <address@hidden>
Commit: Ian Dunn <address@hidden>
Additional tests and minor cleanup
* org-edna.el: Added some section headers.
* org-edna-tests.el (org-edna-doc-test/ancestors-cache):
(org-edna-doc-test/descendants-cache):
(org-edna-doc-test/laundry-cache):
(org-edna-doc-test/nightly-cache): Added tests for run-through with cache.
---
org-edna-tests.el | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
org-edna.el | 7 ++-
2 files changed, 174 insertions(+), 4 deletions(-)
diff --git a/org-edna-tests.el b/org-edna-tests.el
index da8e437..5b0b1e0 100644
--- a/org-edna-tests.el
+++ b/org-edna-tests.el
@@ -3,9 +3,6 @@
;; Copyright (C) 2017-2018 Free Software Foundation, Inc.
;; Author: Ian Dunn <address@hidden>
-;; Keywords: convenience, text, org
-;; Version: 1.0
-;; Package-Requires: ((emacs "25.1") (seq "2.19") (org "8.0"))
;; This file is NOT part of GNU Emacs.
@@ -1646,6 +1643,39 @@ This avoids org-id digging into its internal database."
(org-edna-test-mark-todo heading1-pom heading3-pom heading4-pom
heading5-pom))))
(org-edna-test-restore-test-file))))
+(ert-deftest org-edna-doc-test/ancestors-cache ()
+ (let* ((start-heading (org-edna-find-test-heading
"24a0c3bb-7e69-4e9e-bb98-5aba2ff17bb1"))
+ (org-todo-keywords '((sequence "TODO" "|" "DONE")))
+ ;; Only block based on Edna
+ (org-blocker-hook 'org-edna-blocker-function)
+ ;; Enable cache
+ (org-edna-finder-use-cache t))
+ (unwind-protect
+ (org-with-point-at start-heading
+ (save-restriction
+ ;; Only allow operating on the current tree
+ (org-narrow-to-subtree)
+ ;; Show the entire subtree
+ (outline-show-all)
+ (let* ((heading1-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (heading2-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (heading3-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (heading4-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (heading5-pom (progn (org-next-visible-heading 1)
(point-marker))))
+ ;; Verify that we can't change the TODO state to DONE
+ (should (org-edna-test-check-block heading5-pom "Initial state
of heading 5"))
+ ;; Change the state at 4 to DONE
+ (org-edna-test-change-todo-state heading4-pom "DONE")
+ ;; Verify that ALL ancestors need to be changed
+ (should (org-edna-test-check-block heading5-pom "Heading 5 after
parent changed"))
+ (org-edna-test-mark-done heading1-pom heading3-pom)
+ ;; Only need 1, 3, and 4 to change 5
+ (should (not (org-edna-test-check-block heading5-pom
+ "Heading 5 after all
parents changed")))
+ ;; Change the state back to TODO on all of them
+ (org-edna-test-mark-todo heading1-pom heading3-pom heading4-pom
heading5-pom))))
+ (org-edna-test-restore-test-file))))
+
(ert-deftest org-edna-doc-test/descendants ()
(let* ((start-heading (org-edna-find-test-heading
"cc18dc74-00e8-4081-b46f-e36800041fe7"))
(org-todo-keywords '((sequence "TODO" "|" "DONE")))
@@ -1682,6 +1712,44 @@ This avoids org-id digging into its internal database."
(should (not (org-edna-test-check-block heading1-pom "Heading 1
after changing 5"))))))
(org-edna-test-restore-test-file))))
+(ert-deftest org-edna-doc-test/descendants-cache ()
+ (let* ((start-heading (org-edna-find-test-heading
"cc18dc74-00e8-4081-b46f-e36800041fe7"))
+ (org-todo-keywords '((sequence "TODO" "|" "DONE")))
+ ;; Only block based on Edna
+ (org-blocker-hook 'org-edna-blocker-function)
+ ;; Enable cache
+ (org-edna-finder-use-cache t))
+ (unwind-protect
+ (org-with-point-at start-heading
+ (save-restriction
+ ;; Only allow operating on the current tree
+ (org-narrow-to-subtree)
+ ;; Show the entire subtree
+ (outline-show-all)
+ (let* ((heading1-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (heading2-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (heading3-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (heading4-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (heading5-pom (progn (org-next-visible-heading 1)
(point-marker))))
+ (should (org-edna-test-check-block heading1-pom "Heading 1
initial state"))
+ ;; Change the state at 2 to DONE
+ (org-edna-test-mark-done heading2-pom)
+ ;; Verify that ALL descendants need to be changed
+ (should (org-edna-test-check-block heading1-pom "Heading 1 after
changing 2"))
+ ;; Try 3
+ (org-edna-test-mark-done heading3-pom)
+ ;; Verify that ALL descendants need to be changed
+ (should (org-edna-test-check-block heading1-pom "Heading 1 after
changing 3"))
+ ;; Try 4
+ (org-edna-test-mark-done heading4-pom)
+ ;; Verify that ALL descendants need to be changed
+ (should (org-edna-test-check-block heading1-pom "Heading 1 after
changing 4"))
+ ;; Try 5
+ (org-edna-test-mark-done heading5-pom)
+ ;; Verify that ALL descendants need to be changed
+ (should (not (org-edna-test-check-block heading1-pom "Heading 1
after changing 5"))))))
+ (org-edna-test-restore-test-file))))
+
(ert-deftest org-edna-doc-test/laundry ()
"Test for the \"laundry\" example in the documentation."
(cl-letf* (((symbol-function 'current-time) (lambda () org-edna-test-time))
@@ -1733,6 +1801,62 @@ This avoids org-id digging into its internal database."
;; Change the test file back to its original state.
(org-edna-test-restore-test-file))))))
+(ert-deftest org-edna-doc-test/laundry-cache ()
+ "Test for the \"laundry\" example in the documentation.
+
+This version enables cache, ensuring that the repeated calls to
+the relative finders all still work while cache is enabled."
+ (cl-letf* (((symbol-function 'current-time) (lambda () org-edna-test-time))
+ (start-heading (org-edna-find-test-heading
"e57ce099-9f37-47f4-a6bb-61a84eb1fbbe"))
+ (org-todo-keywords '((sequence "TODO" "|" "DONE")))
+ ;; Only block based on Edna
+ (org-blocker-hook 'org-edna-blocker-function)
+ ;; Only trigger based on Edna
+ (org-trigger-hook 'org-edna-trigger-function)
+ ;; Enable cache
+ (org-edna-finder-use-cache t))
+ (org-with-point-at start-heading
+ (save-restriction
+ ;; Only allow operating on the current tree
+ (org-narrow-to-subtree)
+ ;; Show the entire subtree
+ (outline-show-all)
+ (unwind-protect
+ (let* ((heading1-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (heading2-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (heading3-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (heading4-pom (progn (org-next-visible-heading 1)
(point-marker))))
+ ;; Verify that headings 2, 3, and 4 are all blocked
+ (should (org-edna-test-check-block heading2-pom
+ "Initial attempt to change
heading 2"))
+ (should (org-edna-test-check-block heading3-pom
+ "Initial attempt to change
heading 3"))
+ (should (org-edna-test-check-block heading4-pom
+ "Initial attempt to change
heading 4"))
+ ;; Mark heading 1 as DONE
+ (should (not (org-edna-test-check-block heading1-pom
+ "Set heading 1 to DONE")))
+ ;; Only heading 2 should have a scheduled time
+ (should (string-equal (org-entry-get heading2-pom "SCHEDULED")
+ "<2000-01-15 Sat 01:00>"))
+ (should (not (org-entry-get heading3-pom "SCHEDULED")))
+ (should (not (org-entry-get heading4-pom "SCHEDULED")))
+ ;; The others should still be blocked.
+ (should (org-edna-test-check-block heading3-pom
+ "Second attempt to change
heading 3"))
+ (should (org-edna-test-check-block heading4-pom
+ "Second attempt to change
heading 4"))
+ ;; Try changing heading 2
+ (should (not (org-edna-test-check-block heading2-pom
+ "Set heading 2 to DONE")))
+ (should (string-equal (org-entry-get heading3-pom "SCHEDULED")
+ "<2000-01-16 Sun 09:00>"))
+ ;; 4 should still be blocked
+ (should (org-edna-test-check-block heading4-pom
+ "Second attempt to change
heading 4")))
+ ;; Change the test file back to its original state.
+ (org-edna-test-restore-test-file))))))
+
(ert-deftest org-edna-doc-test/nightly ()
(cl-letf* (((symbol-function 'current-time) (lambda () org-edna-test-time))
(start-heading (org-edna-find-test-heading
"8b6d9820-d943-4622-85c9-4a346e033453"))
@@ -1772,6 +1896,47 @@ This avoids org-id digging into its internal database."
;; Change the test file back to its original state.
(org-edna-test-restore-test-file))))))
+(ert-deftest org-edna-doc-test/nightly-cache ()
+ (cl-letf* (((symbol-function 'current-time) (lambda () org-edna-test-time))
+ (start-heading (org-edna-find-test-heading
"8b6d9820-d943-4622-85c9-4a346e033453"))
+ ;; Only use the test file in the agenda
+ (org-agenda-files `(,org-edna-test-file))
+ (org-todo-keywords '((sequence "TODO" "|" "DONE")))
+ ;; Only block based on Edna
+ (org-blocker-hook 'org-edna-blocker-function)
+ ;; Only trigger based on Edna
+ (org-trigger-hook 'org-edna-trigger-function)
+ ;; Enable cache
+ (org-edna-finder-use-cache t))
+ (org-with-point-at start-heading
+ (save-restriction
+ ;; Only allow operating on the current tree
+ (org-narrow-to-subtree)
+ ;; Show the entire subtree
+ (outline-show-all)
+ (unwind-protect
+ (let* ((nightly-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (lunch-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (door-pom (progn (org-next-visible-heading 1)
(point-marker)))
+ (dog-pom (progn (org-next-visible-heading 1)
(point-marker))))
+ ;; Verify that Nightly is blocked
+ (should (org-edna-test-check-block nightly-pom "Initial Nightly
Check"))
+ ;; Check off Lunch, and verify that nightly is still blocked
+ (org-edna-test-mark-done lunch-pom)
+ (should (org-edna-test-check-block nightly-pom "Nightly after
Lunch"))
+ ;; Check off Door, and verify that nightly is still blocked
+ (org-edna-test-mark-done door-pom)
+ (should (org-edna-test-check-block nightly-pom "Nightly after
Door"))
+ ;; Check off Dog. This should trigger the others.
+ (org-edna-test-mark-done dog-pom)
+ (should (org-edna-test-compare-todos lunch-pom "TODO" "Lunch
after Nightly Trigger"))
+ (should (org-edna-test-compare-todos door-pom "TODO" "Door after
Nightly Trigger"))
+ (should (org-edna-test-compare-todos dog-pom "TODO" "Dog after
Nightly Trigger"))
+ (should (string-equal (org-entry-get nightly-pom "DEADLINE")
+ "<2000-01-16 Sun +1d>")))
+ ;; Change the test file back to its original state.
+ (org-edna-test-restore-test-file))))))
+
(ert-deftest org-edna-doc-test/daily ()
(cl-letf* (((symbol-function 'current-time) (lambda () org-edna-test-time))
(start-heading (org-edna-find-test-heading
"630805bb-a864-4cdc-9a6f-0f126e887c66"))
diff --git a/org-edna.el b/org-edna.el
index 3247989..102dd06 100644
--- a/org-edna.el
+++ b/org-edna.el
@@ -583,6 +583,7 @@ following reasons:
(org-edna--add-to-finder-cache func-sym args)))))
+;;; Interactive Functions
(defmacro org-edna-run (change-plist &rest body)
"Run a TODO state change.
@@ -655,6 +656,7 @@ Remove Edna's workers from `org-trigger-hook' and
(remove-hook 'org-blocker-hook 'org-edna-blocker-function))
+;;; Finders
;; Tag Finder
(defun org-edna-finder/match (match-spec &optional scope skip)
@@ -1256,6 +1258,7 @@ which ones will and won't work."
(list (point-min-marker))))
+;;; Actions
;; Set TODO state
(defun org-edna-action/todo! (_last-entry new-state)
@@ -1882,6 +1885,7 @@ Does nothing if the source heading has no property
PROPERTY."
(org-entry-put nil property old-prop)))
+;;; Conditions
;; For most conditions, we return true if condition is true and neg is false,
or
;; if condition is false and neg is true:
@@ -1985,6 +1989,7 @@ starting from target's position."
(format "%s %s in %s" (if neg "Did Not Find" "Found") match
(buffer-name)))))
+;;; Consideration
(defun org-edna-handle-consideration (consideration blocks)
"Handle consideration CONSIDERATION.
@@ -2034,7 +2039,6 @@ same as \"consider\"."
first-block))))))
-
;;; Popout editing
(defvar org-edna-edit-original-marker nil)
@@ -2278,6 +2282,7 @@ Displays help for KEYWORD in the Help buffer."
(princ doc))))
+;;; Bug Reports
(declare-function lm-report-bug "lisp-mnt" (topic))
- [elpa] master 7d30f60 088/135: Catch non-existent timestamps in planning action, (continued)
- [elpa] master 7d30f60 088/135: Catch non-existent timestamps in planning action, Ian Dunn, 2020/02/17
- [elpa] master d0f7e21 085/135: Added two new forms for setting planning information, Ian Dunn, 2020/02/17
- [elpa] master f45f911 115/135: Mention consider in opening of Consideration section, Ian Dunn, 2020/02/17
- [elpa] master c4d1298 099/135: Added new forms for set-property! and fixed up build system, Ian Dunn, 2020/02/17
- [elpa] master 5cacf20 078/135: Updated documentation, Ian Dunn, 2020/02/17
- [elpa] master bad787d 128/135: Bumped version, Ian Dunn, 2020/02/17
- [elpa] master 6869846 130/135: Merged fix., Ian Dunn, 2020/02/17
- [elpa] master c50f484 106/135: Implemented finder cache, Ian Dunn, 2020/02/17
- [elpa] master 4142fb8 108/135: Updated tests for new form expansion, Ian Dunn, 2020/02/17
- [elpa] master 2354cde 118/135: Fixed up description of set-effort!., Ian Dunn, 2020/02/17
- [elpa] master 97b6600 119/135: Additional tests and minor cleanup,
Ian Dunn <=
- [elpa] master 94edf14 120/135: Added timestamp sorting to relatives finder, Ian Dunn, 2020/02/17
- [elpa] master 1b05e1e 131/135: Fixed failing tests, Ian Dunn, 2020/02/17
- [elpa] master 3647cf7 095/135: Overhauled parsing method, and added conditional blocks, Ian Dunn, 2020/02/17
- [elpa] master 6e1f5fb 087/135: Fixed bug in planning action, Ian Dunn, 2020/02/17
- [elpa] master 2e8b7eb 094/135: Don't export special strings for documentation, Ian Dunn, 2020/02/17
- [elpa] master a3183b2 105/135: Bumped version, Ian Dunn, 2020/02/17
- [elpa] master a2da465 107/135: Bumped version, Ian Dunn, 2020/02/17
- [elpa] master b72cb7b 101/135: Cleaned up Changelog some more, Ian Dunn, 2020/02/17
- [elpa] master 6b3923b 110/135: Added tests for cache, Ian Dunn, 2020/02/17
- [elpa] master 4c8058f 129/135: Step down should not include the headline itself when it has no children., Ian Dunn, 2020/02/17