branch: externals/hyperbole
commit 6c7b8e5afb3536ee046d1a60b46369aa854dd668
Author: Mats Lidell <mats.lid...@lidells.se>
Commit: Mats Lidell <mats.lid...@lidells.se>

    Add helper for generating org files + two tests using the matches
---
 ChangeLog            |  10 ++++
 test/hyrolo-tests.el | 142 +++++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 148 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4969506ca4..d3fd9e3122 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2023-01-02  Mats Lidell  <ma...@gnu.org>
 
+* test/hyrolo-tests.el (hyrolo-tests--level-number)
+    (hyrolo-tests--generate-header-contents-for-tests)
+    (hyrolo-tests--gen-outline): Add helper for constructing org files for
+    tests.
+    (hyrolo-tests--outline-next-visible-header)
+    (hyrolo-tests--tab-through-matches): Add test for working with hyrolo
+    matches.
+
+2023-12-31  Mats Lidell  <ma...@gnu.org>
+
 * test/hyrolo-tests.el (hyrolo-tests--get-file-list-change)
     (hyrolo-tests--get-file-list-wrong-suffice): Add hyrolo tests.
 
diff --git a/test/hyrolo-tests.el b/test/hyrolo-tests.el
index 06b18d9e55..db17adbd95 100644
--- a/test/hyrolo-tests.el
+++ b/test/hyrolo-tests.el
@@ -3,7 +3,7 @@
 ;; Author:       Mats Lidell <ma...@gnu.org>
 ;;
 ;; Orig-Date:    19-Jun-21 at 22:42:00
-;; Last-Mod:     31-Dec-23 at 16:10:00 by Mats Lidell
+;; Last-Mod:      1-Jan-24 at 16:24:40 by Mats Lidell
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -462,9 +462,143 @@ Match a string in the second cell."
 
 (ert-deftest hyrolo-tests--get-file-list-wrong-suffice ()
   "Verify files need to have the proper suffix in hyrolo-file-list."
-  (should-error
-   (let ((hyrolo-file-list (list "file-no-proper-suffix")))
-     ())))
+  (let ((tmp-file (make-temp-file "hypb" nil)))
+    (unwind-protect
+        (should-error
+         (setq hyrolo-file-list (list tmp-file)))
+      (hy-delete-file-and-buffer tmp-file))))
+
+;; Outline movement tests
+(defun hyrolo-tests--level-number (section depth)
+  "Generate the number for the SECTION at DEPTH.
+
+The format is the section followed by the depth given by the
+sequence up to depth starting from 2.
+  Depth 1:        section
+  Depth <depth>:  section.2.3.4..<depth>"
+  (let (result)
+    (dotimes (d depth)
+      (setq result
+            (if (= 0 d)
+                (number-to-string section)
+              (concat result
+                      "."
+                      (number-to-string (+ 1 d))))))
+    result))
+
+(defun hyrolo-tests--generate-header-contents-for-tests (header section body 
depth)
+  "Generate the HEADER and BODY contents for the SECTION with DEPTH."
+  (let (result)
+    (dotimes (d depth)
+      (setq result
+            (concat result
+                    (make-string (1+ d) ?*) " " header " " 
(hyrolo-tests--level-number section (1+ d)) "\n"
+                    body " " (hyrolo-tests--level-number section (1+ d)) 
"\n")))
+    result))
+
+(defun hyrolo-tests--gen-outline (header sections body depth)
+  "Generate an outline structure suitable for hyrolo outline test.
+
+The contents is constructed with an outline HEADER and BODY text.
+Each is repeated in SECTIONS with one set of hierarchical headers
+to the specified DEPTH.
+
+Example:
+   * header 1
+   body 1
+   ** header 2
+   body 1.2
+   [...]
+   * header <sections>
+   body <sections>
+   ** header <sections>.2
+   body <section>.2
+   [...]"
+  (let (result)
+    (dotimes (section sections)
+      (setq result
+            (concat result
+                    (hyrolo-tests--generate-header-contents-for-tests header 
(1+ section) body depth))))
+    result))
+
+(ert-deftest hyrolo-tests--outline-next-visible-header ()
+  "Verify movement to next visible header."
+  (let* ((org-file (make-temp-file "hypb" nil ".org"
+                                   (hyrolo-tests--gen-outline "header" 2 
"body" 2)))
+         (hyrolo-file-list (list org-file)))
+    (unwind-protect
+        (progn
+          (hyrolo-grep "body")
+          (should (string= "*HyRolo*" (buffer-name)))
+
+          ;; Move down
+          (should (looking-at-p "==="))
+          (should (hact 'kbd-key "n"))
+          (should (looking-at-p "^* header 1"))
+          (should (hact 'kbd-key "n"))
+          (should (looking-at-p "^** header 1.2"))
+          (should (hact 'kbd-key "n"))
+          (should (looking-at-p "^* header 2"))
+          (should (hact 'kbd-key "n"))
+          (should (looking-at-p "^** header 2.2"))
+          (should (hact 'kbd-key "n"))
+          (should (eobp))
+
+          ;; Move back up
+          (should (hact 'kbd-key "p"))
+          (should (looking-at-p "^** header 2.2"))
+          (should (hact 'kbd-key "p"))
+          (should (looking-at-p "^* header 2"))
+          (should (hact 'kbd-key "p"))
+          (should (looking-at-p "^** header 1.2"))
+          (should (hact 'kbd-key "p"))
+          (should (looking-at-p "^* header 1"))
+          (should (hact 'kbd-key "p"))
+
+          ;; BUG: This fails in Emacs 29 and 30
+          ;; This is the expected behavior that works in Emacs 27 and 28.
+          ;; (should (looking-at-p "==="))
+          ;; (should (bobp))
+          ;; This is what we get
+          (should (looking-at-p "@loc>"))
+          (should (= 2 (line-number-at-pos))))
+      (kill-buffer "*HyRolo*")
+      (hy-delete-file-and-buffer org-file))))
+
+
+(ert-deftest hyrolo-tests--tab-through-matches ()
+  "Verify movement to next visible header."
+  (let* ((org-file (make-temp-file "hypb" nil ".org"
+                                   (hyrolo-tests--gen-outline "header" 2 
"body" 2)))
+         (hyrolo-file-list (list org-file)))
+    (unwind-protect
+        (progn
+          (hyrolo-grep "body")
+          (should (string= "*HyRolo*" (buffer-name)))
+
+          ;; Search Down
+          (should (looking-at-p "==="))
+          (should (hact 'kbd-key "TAB"))
+          (should (looking-at-p "^body 1$"))
+          (should (hact 'kbd-key "TAB"))
+          (should (looking-at-p "^body 1.2"))
+          (should (hact 'kbd-key "TAB"))
+          (should (looking-at-p "^body 2$"))
+          (should (hact 'kbd-key "TAB"))
+          (should (looking-at-p "^body 2.2"))
+          (should-error (hact 'kbd-key "TAB"))
+          (should (looking-at-p "^body 2.2"))
+
+          ;; Search Up
+          (should (hact 'kbd-key "<backtab>"))
+          (should (looking-at-p "^body 2$"))
+          (should (hact 'kbd-key "<backtab>"))
+          (should (looking-at-p "^body 1.2"))
+          (should (hact 'kbd-key "<backtab>"))
+          (should (looking-at-p "^body 1$"))
+          (should-error (hact 'kbd-key "<backtab>")))
+      (kill-buffer "*HyRolo*")
+      (hy-delete-file-and-buffer org-file))))
 
 (provide 'hyrolo-tests)
 ;;; hyrolo-tests.el ends here

Reply via email to