branch: externals/hyperbole
commit 970a5573f3bde06f80f84183803c15b5e8fefc8c
Merge: 85b31fed86 18ae76fa49
Author: Robert Weiner <r...@gnu.org>
Commit: GitHub <nore...@github.com>

    Merge branch 'rsw' into matsl-rsw-add-top-view-n-overview-tests
---
 ChangeLog          | 15 +++++++++++++++
 hbut.el            | 33 ++++++++++++++++++++++++++++-----
 hui-menu.el        |  4 ++--
 test/hbut-tests.el | 32 +++++++++++++++++++++++++++++++-
 4 files changed, 76 insertions(+), 8 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 80072b9773..af5219e739 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -10,6 +10,21 @@
     (hyrolo-tests--top-level-outline-for-all-file-types): Test top level 
outline.
     (hyrolo-tests--overview-outline-for-all-file-types): Test overview outline.
 
+2024-02-11  Mats Lidell  <ma...@gnu.org>
+
+* test/hbut-tests.el (hbut-tests--ebut-act-calls-hbut-act)
+    (hbut-tests--ibut-act-calls-hbut-act): Add test for new act functions
+    with error cases.
+
+* hui-menu.el (hui-menu-explicit-buttons): Use ebut:act-label.
+
+* hbut.el (ibut:act-label, ebut:act-label): Rename ebut:act and ibut:act
+    since they take a label as arg.
+    (ebut:act, ibut:act): Add new act functions taking a hbut as
+    arg. Allow only to be called with ebut or ibut respectively. If
+    falling back on hbut:current check that it is of the same type as the
+    call.
+
 2024-02-08  Mats Lidell  <ma...@gnu.org>
 
 * test/hyrolo-tests.el: Make hide tests more forgiving about hiding
diff --git a/hbut.el b/hbut.el
index fa09f5dd90..e1884e862e 100644
--- a/hbut.el
+++ b/hbut.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:    18-Sep-91 at 02:57:09
-;; Last-Mod:     21-Jan-24 at 10:31:14 by Bob Weiner
+;; Last-Mod:     11-Feb-24 at 23:43:08 by Mats Lidell
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -122,7 +122,19 @@ indicating the source of any of its Hyperbole buttons.")
   "*Non-nil value saves button data when button source is saved.
 Nil disables saving.")
 
-(defun    ebut:act (label)
+(defun    ebut:act (&optional ebut)
+  "Perform action for optional explicit Hyperbole button symbol EBUT.
+Default is the symbol hbut:current."
+  (interactive (list (hbut:get (hargs:read-match "Activate labeled Hyperbole 
button: "
+                                                (ebut:alist)
+                                                nil t nil 'ebut))))
+  (unless ebut
+    (setq ebut 'hbut:current))
+  (if (ebut:is-p ebut)
+      (hbut:act ebut)
+    (error "(ebut:act): Expected an ebut but got a but of type %s" (hattr:get 
ebut 'categ))))
+
+(defun    ebut:act-label (label)
   "Activate Hyperbole explicit button with LABEL from the current buffer."
   (interactive (list (hargs:read-match "Activate explicit button labeled: "
                                       (ebut:alist)
@@ -131,7 +143,7 @@ Nil disables saving.")
         (but (ebut:get lbl-key)))
     (if but
        (hbut:act but)
-      (error "(ebut:act): No explicit button labeled: %s" label))))
+      (error "(ebut:act-label): No explicit button labeled: %s" label))))
 
 (defun    ebut:alist (&optional file)
   "Return alist of ebuts in FILE or the current buffer.
@@ -1692,8 +1704,19 @@ Keys in optional KEY-SRC or the current buffer."
 ;;; ibut class - Implicit Hyperbole Buttons
 ;;; ========================================================================
 
+(defun    ibut:act (&optional ibut)
+  "Perform action for optional implicit Hyperbole button symbol IBUT.
+Default is the symbol hbut:current."
+  (interactive (list (hbut:get (hargs:read-match "Activate labeled Hyperbole 
button: "
+                                                (ibut:alist)
+                                                nil t nil 'ibut))))
+  (unless ibut
+    (setq ibut 'hbut:current))
+  (if (ibut:is-p ibut)
+      (hbut:act ibut)
+    (error "(ebut:act): Expected an ibut but got a but of type %s" (hattr:get 
ibut 'categ))))
 
-(defun    ibut:act (label)
+(defun    ibut:act-label (label)
   "Activate Hyperbole implicit button with <[LABEL]> from the current buffer."
   (interactive (list (hargs:read-match "Activate implicit button labeled: "
                                       (ibut:alist)
@@ -1702,7 +1725,7 @@ Keys in optional KEY-SRC or the current buffer."
         (but (ibut:get lbl-key)))
     (if but
        (hbut:act but)
-      (error "(ibut:act): No implicit button labeled: %s" label))))
+      (error "(ibut:act-label): No implicit button labeled: %s" label))))
 
 (defun    ibut:alist (&optional file)
   "Return alist of labeled ibuts in FILE or the current buffer.
diff --git a/hui-menu.el b/hui-menu.el
index 7d3bd8abbd..650cb07c61 100644
--- a/hui-menu.el
+++ b/hui-menu.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:    28-Oct-94 at 10:59:44
-;; Last-Mod:     21-Jan-24 at 10:31:58 by Bob Weiner
+;; Last-Mod:      2-Feb-24 at 21:41:16 by Mats Lidell
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -110,7 +110,7 @@ BROWSER-OPTION marks current active menu option as 
selected."
                                 (not hui-menu-order-explicit-buttons))
                           :style toggle :selected 
hui-menu-order-explicit-buttons]
                          "Activate:")
-                       (mapcar (lambda (label) (vector label `(ebut:act 
,label) t))
+                       (mapcar (lambda (label) (vector label `(ebut:act-label 
,label) t))
                                (if hui-menu-order-explicit-buttons
                                    (sort labels #'string-lessp)
                                  labels))
diff --git a/test/hbut-tests.el b/test/hbut-tests.el
index 80d34eb95f..f8a6574bb2 100644
--- a/test/hbut-tests.el
+++ b/test/hbut-tests.el
@@ -3,7 +3,7 @@
 ;; Author:       Mats Lidell <ma...@gnu.org>
 ;;
 ;; Orig-Date:    30-may-21 at 09:33:00
-;; Last-Mod:     20-Jan-24 at 15:43:50 by Mats Lidell
+;; Last-Mod:     11-Feb-24 at 23:35:14 by Mats Lidell
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -738,6 +738,36 @@ See #10 for the proper way to add an ibutton name.
       (hbut-tests:should-match-tmp-folder buf-str)
       (should (null (hattr:get 'hbut:current 'name))))))
 
+(ert-deftest hbut-tests--ebut-act-calls-hbut-act ()
+  "Verify `ebut:act' calls `hbut:act'."
+  (mocklet (((hbut:act 'button) => t)
+            ((ebut:is-p 'button) => t))
+    (should (ebut:act 'button)))
+  (mocklet (((hbut:act 'hbut:current) => t)
+            ((ebut:is-p 'hbut:current) => t))
+    (should (ebut:act)))
+  (mocklet ((ebut:is-p => nil))
+    (should-error (ebut:act 'button))
+    (should-error (ebut:act)))
+  (progn
+    (hattr:clear 'hbut:current)
+    (should-error (ebut:act))))
+
+(ert-deftest hbut-tests--ibut-act-calls-hbut-act ()
+  "Verify `ibut:act' calls `hbut:act'."
+  (mocklet (((hbut:act 'button) => t)
+            ((ibut:is-p 'button) => t))
+    (should (ibut:act 'button)))
+  (mocklet (((hbut:act 'hbut:current) => t)
+            ((ibut:is-p 'hbut:current) => t))
+    (should (ibut:act)))
+  (mocklet ((ibut:is-p => nil))
+    (should-error (ibut:act 'button))
+    (should-error (ibut:act)))
+  (progn
+    (hattr:clear 'hbut:current)
+    (should-error (ibut:act))))
+
 ;; This file can't be byte-compiled without the `el-mock' package (because of
 ;; the use of the `with-mock' macro), which is not a dependency of Hyperbole.
 ;;  Local Variables:

Reply via email to