emacs-elpa-diffs
[Top][All Lists]
Advanced

[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))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]