branch: externals/hyperbole
commit e55d2a7710046e77423ac23558732b639ec7ba6b
Author: Mats Lidell <[email protected]>
Commit: GitHub <[email protected]>
Update and add hywiki tests (#856)
---
ChangeLog | 17 +++++++
hywiki.el | 40 +++++++--------
test/hywiki-tests.el | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 170 insertions(+), 22 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index af4cf18bbc..e88f4f2a1a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2026-02-08 Mats Lidell <[email protected]>
+
+* hywiki.el (hywiki-word-create): Eliminate redundant term.
+ (hywiki-create-page): Let page-file be the name of the
+ file. User-error when page-file is not created.
+ (hywiki-display-referent-type): Remove unreachable error check.
+
+* test/hywiki-tests.el (hywiki-tests--find-page)
+ (hywiki-tests--get-page/wikiword-list, hywiki-tests--org-link-store)
+ (hywiki-tests--create-referent, hywiki-tests--get-buttonize-characters)
+ (hywiki-tests--non-hook-context-p, hywiki-tests--word-create)
+ (hywiki-tests--create-page): New tests.
+ (hywiki-tests--add-referent): Extend test for more coverage.
+ (hywiki-tests--display-referent-type): Error test case.
+ (hywiki-tests--add-global-button): Enable local vars. Avoid prompting
+ user during test.
+
2026-02-07 Bob Weiner <[email protected]>
* test/hywiki-tests.el
(hywiki-tests--verify-removal-of-delimiter-updates-face):
diff --git a/hywiki.el b/hywiki.el
index a118b7a6c8..295a557826 100644
--- a/hywiki.el
+++ b/hywiki.el
@@ -874,20 +874,21 @@ See the Info documentation at \"(hyperbole)HyWiki\".
(defun hywiki-display-referent-type (wikiword referent)
"Display WIKIWORD REFERENT, a cons of (<referent-type> . <referent-value>).
Function used to display is \"hywiki-display-<referent-type>\"."
- (let* ((referent-type (car referent)) ;; a symbol
- (referent-value (cdr referent))
- (display-function (intern-soft (concat "hywiki-display-"
- (symbol-name referent-type)))))
- (when (equal (hywiki-get-singular-wikiword wikiword)
(hywiki-word-at-point))
- ;; Set referent attributes of current implicit button
- (hattr:set 'hbut:current 'referent-type referent-type)
- (hattr:set 'hbut:current 'referent-value referent-value))
- (cond ((fboundp display-function)
- (funcall display-function wikiword referent-value))
- ((symbolp referent-type)
- (error "(hywiki-display-referent-type): No hywiki-display function
for referent type '%s'" referent-type))
- (t
- (error "(hywiki-display-referent-type): Referent type must be a
symbol, not %s" referent-type)))))
+ (let ((referent-type (and (consp referent) (car referent))))
+ (unless (and referent-type (symbolp referent-type))
+ (error "(hywiki-display-referent-type): Referent type must be a symbol,
not: referent-type = %S; referent = %S"
+ referent referent-type))
+ (let* ((referent-value (cdr referent))
+ (display-function (intern-soft (concat "hywiki-display-"
+ (symbol-name
referent-type)))))
+ (when (equal (hywiki-get-singular-wikiword wikiword)
(hywiki-word-at-point))
+ ;; Set referent attributes of current implicit button
+ (hattr:set 'hbut:current 'referent-type referent-type)
+ (hattr:set 'hbut:current 'referent-value referent-value))
+ (cond ((fboundp display-function)
+ (funcall display-function wikiword referent-value))
+ (t
+ (error "(hywiki-display-referent-type): No hywiki-display function
for referent type '%s'" referent-type))))))
(defun hywiki-display-referent (&optional wikiword prompt-flag)
"Display HyWiki WIKIWORD referent or a regular file with WIKIWORD nil.
@@ -1318,11 +1319,11 @@ with the page."
(unless (stringp wikiword)
(setq wikiword (hywiki-word-read-new "Create/Edit HyWikiWord: ")))
(setq hkey-value wikiword)
- (let ((page-file (hywiki-add-page wikiword t)))
+ (let ((page-file (cdr (hywiki-add-page wikiword t))))
(if (or message-flag (called-interactively-p 'interactive))
- (when page-file
- (message "HyWikiWord '%s' page: \"%s\"" wikiword page-file))
- (user-error "(hywiki-create-page): Invalid HyWikiWord: '%s'; must be
capitalized, all alpha" wikiword))
+ (if page-file
+ (message "HyWikiWord '%s' page: \"%s\"" wikiword page-file)
+ (user-error "(hywiki-create-page): Invalid HyWikiWord: '%s'; must be
capitalized, all alpha" wikiword)))
page-file))
(defun hywiki-add-page (page-name &optional force-flag)
@@ -1400,8 +1401,7 @@ referent."
"referent"
"page"))))
current-prefix-arg))
- (if (or (and hywiki-referent-prompt-flag (null arg))
- arg)
+ (if (or arg hywiki-referent-prompt-flag)
(hywiki-create-referent wikiword t)
(hywiki-create-page wikiword t)))
diff --git a/test/hywiki-tests.el b/test/hywiki-tests.el
index 30868e50a2..da5b8de3f7 100644
--- a/test/hywiki-tests.el
+++ b/test/hywiki-tests.el
@@ -1178,7 +1178,12 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(progn
(should-not (hywiki-add-referent "notawikiword" referent))
(should (hywiki-add-referent "WikiWord" referent))
- (should (equal referent (hywiki-get-referent "WikiWord"))))
+ (should (equal referent (hywiki-get-referent "WikiWord")))
+ (should (hywiki-add-referent "WikiPage#section" referent))
+ (should (equal referent (hywiki-get-referent "WikiPage")))
+ (mocklet ((hash-add => nil))
+ (let ((err (should-error (hywiki-add-referent "WikiPage" referent)
:type 'error)))
+ (should (string-match-p "Failed: (hash-add (page . /tmp/a.org)
WikiPage" (cadr err))))))
(hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-activity ()
@@ -1235,7 +1240,8 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(ert-deftest hywiki-tests--add-global-button ()
"Verify `hywiki-add-global-button'."
- (let ((hywiki-directory (make-temp-file "hywiki" t)))
+ (let ((hywiki-directory (make-temp-file "hywiki" t))
+ (enable-local-variables :all))
(unwind-protect
(mocklet ((hargs:read-match => "gbtn"))
(should (equal '(global-button . "gbtn") (hywiki-add-global-button
"WikiWord"))))
@@ -2155,6 +2161,131 @@ expected result."
(list #'hywiki-tags-view t nil bn)))
(should (= (line-number-at-pos) 3))))))
+(ert-deftest hywiki-tests--display-referent-type ()
+ "Verify error case for `hywiki-display-referent-type'."
+ (with-temp-buffer
+ (let ((err (should-error (hywiki-display-referent-type "WikiWord" (cons
'unknown-type 'value)) :type 'error)))
+ (should (string-match-p "No hywiki-display function for referent type
.unknown-type." (cadr err))))))
+
+(ert-deftest hywiki-tests--create-referent ()
+ "Verify `hywiki-create-referent'."
+ (let* ((hywiki-directory (make-temp-file "hywiki" t)))
+ (unwind-protect
+ (progn
+ (mocklet ((hui:menu-act => '(referent)))
+ (should (equal '(referent) (hywiki-create-referent "WikiWord")))
+ (ert-with-message-capture cap
+ (should (hywiki-create-referent "WikiWord" t))
+ (string-match-p "HyWikiWord .WikiWord. referent: (referent)"
cap))
+ (mocklet ((hywiki-word-read-new => "WikiWord"))
+ (should (equal '(referent) (hywiki-create-referent nil)))))
+ (mocklet ((hui:menu-act => nil))
+ (let ((err (should-error (hywiki-create-referent "WikiWord") :type
'user-error)))
+ (should (string-match-p "Invalid HyWikiWord: .WikiWord.; must be
capitalized, all alpha" (cadr err))))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
+
+(ert-deftest hywiki-tests--find-page ()
+ "Verify `hywiki-find-page' runs hook and calls `hywiki-display-page'."
+ (let* (run-hook (hook (lambda () (setq run-hook t))))
+ (unwind-protect
+ (mocklet (((hywiki-display-page "WikiWord") => "WikiWord"))
+ (with-temp-buffer
+ (add-hook 'hywiki-find-page-hook hook)
+ (should (string= "WikiWord" (hywiki-find-page "WikiWord"))))
+ (should run-hook))
+ (remove-hook 'hywiki-find-page-hook hook))))
+
+(ert-deftest hywiki-tests--get-page/wikiword-list ()
+ "Verify `hywiki-get-page-list' and `hywiki-get-wikiword-list'."
+ (let* ((hywiki-directory (make-temp-file "hywiki" t))
+ (wiki-page (cdr (hywiki-add-page "WikiWord"))))
+ (unwind-protect
+ (progn
+ (hywiki-add-find "WikiPage")
+ (should (equal '("WikiWord") (hywiki-get-page-list)))
+ (should (set:equal '("WikiPage" "WikiWord")
(hywiki-get-wikiword-list))))
+ (hy-delete-files-and-buffers (list wiki-page))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
+
+(ert-deftest hywiki-tests--org-link-store ()
+ "Verify storing org links with `hywiki-org-link-store'."
+ (hywiki-tests--preserve-hywiki-mode
+ (insert "WikiWord\n")
+ (goto-char 3)
+ (let ((hywiki-org-link-type-required t))
+ (mocklet (((org-link-store-props
+ :type hywiki-org-link-type
+ :link (concat hywiki-org-link-type ":WikiWord")
+ :description "WikiWord")))
+ (hywiki-org-link-store)))
+ (let (hywiki-org-link-type-required)
+ (mocklet (((org-link-store-props
+ :type hywiki-org-link-type
+ :link "WikiWord"
+ :description "WikiWord")))
+ (hywiki-org-link-store)))))
+
+(ert-deftest hywiki-tests--get-buttonize-characters ()
+ "Verify `hywiki-get-buttonize-characters'."
+ (should (string= "!&+,./;=?@\\^`|~" (hywiki-get-buttonize-characters))))
+
+(ert-deftest hywiki-tests--non-hook-context-p ()
+ "Verify `hywiki-non-hook-context-p'."
+ (ert-info ("General case")
+ (should-not (hywiki-non-hook-context-p)))
+ (ert-info ("Minibuffer active and selected")
+ (mocklet ((minibuffer-window-active-p => t))
+ (should (hywiki-non-hook-context-p))))
+ ;; (ert-info ("Minibuffer active and debugging")
+ ;; (let ((edebug-active t))
+ ;; (mocklet ((active-minibuffer-window => t))
+ ;; (should (hywiki-non-hook-context-p)))))
+ (with-temp-buffer
+ (insert "\"string\"")
+ (goto-char 3)
+ (ert-info ("Fundamental-mode")
+ (fundamental-mode)
+ (should-not (hywiki-non-hook-context-p)))
+ (ert-info ("Prog-mode and point in a string")
+ (python-mode)
+ (should-not (hywiki-non-hook-context-p)))
+ (ert-info ("Highlight all in prog-mode, match current mode")
+ (let ((hywiki-highlight-all-in-prog-modes '(python-mode)))
+ (should-not (hywiki-non-hook-context-p))))
+ (ert-info ("Prog-mode outside string")
+ (goto-char 1)
+ (should (hywiki-non-hook-context-p)))))
+
+(ert-deftest hywiki-tests--create-page ()
+ "Verify `hywiki-create-page'."
+ (mocklet (((hywiki-add-page "WikiWord" t) => '(page . "WikiWord.org")))
+ (should (string= "WikiWord.org" (hywiki-create-page "WikiWord")))
+ (should (string= "WikiWord.org" (hywiki-create-page "WikiWord" t)))
+ (mocklet (((hywiki-word-read-new "Create/Edit HyWikiWord: ") =>
"WikiWord"))
+ (should (string= "WikiWord.org" (hywiki-create-page nil)))
+ (unless noninteractive ;FIXME: Disabled in batch -
called-interactively-p issue?
+ (should (string= "WikiWord.org" (call-interactively
#'hywiki-create-page))))))
+
+ ;; Error case - WikiWord is not created
+ (mocklet (((hywiki-add-page "wikiword" t) => nil))
+ (should-not (hywiki-create-page "wikiword"))
+ (let ((err (should-error (hywiki-create-page "wikiword" t) :type 'error)))
+ (should (string-match-p "(hywiki-create-page): Invalid HyWikiWord:
.wikiword.; must be capitalized, all alpha" (cadr err))))))
+
+(ert-deftest hywiki-tests--word-create ()
+ "Verify `hywiki-word-create'."
+ (mocklet (((hywiki-create-referent "WikiWord" t) => 'referent)
+ (hywiki-create-page not-called))
+ (let ((hywiki-referent-prompt-flag t))
+ (should (equal 'referent (hywiki-word-create "WikiWord")))
+ (should (equal 'referent (hywiki-word-create "WikiWord" t))))
+ (let (hywiki-referent-prompt-flag)
+ (should (equal 'referent (hywiki-word-create "WikiWord" t)))))
+ (mocklet ((hywiki-create-referent not-called)
+ ((hywiki-create-page "WikiWord" t) => 'page))
+ (let (hywiki-referent-prompt-flag)
+ (should (equal 'page (hywiki-word-create "WikiWord"))))))
+
(provide 'hywiki-tests)
;; This file can't be byte-compiled without the `el-mock' package