diff options
| author | Craig Jennings <c@cjennings.net> | 2026-04-29 23:59:30 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-04-29 23:59:30 -0500 |
| commit | 735ecf082273c0cba2f5c5dd25876e2ccd83b0f7 (patch) | |
| tree | 5cdaca8277f0d2397682d4279fd5fbaa2e8e3162 /tests/test-gloss-display--pick-definition.el | |
| parent | 01b75599a500d6276a962b47744166abb25d846c (diff) | |
| download | gloss-735ecf082273c0cba2f5c5dd25876e2ccd83b0f7.tar.gz gloss-735ecf082273c0cba2f5c5dd25876e2ccd83b0f7.zip | |
test: add gloss-display test suite (red phase)
Four test files covering the gloss-display public API and pure helpers.
All 23 tests fail at this commit because the implementation is still a
stub. Format-candidate gets full N/B/E coverage. Render-entry gets the
pure-helper treatment. Pick-definition mocks completing-read at the
boundary. Show-entry has a single smoke test.
Diffstat (limited to 'tests/test-gloss-display--pick-definition.el')
| -rw-r--r-- | tests/test-gloss-display--pick-definition.el | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/tests/test-gloss-display--pick-definition.el b/tests/test-gloss-display--pick-definition.el new file mode 100644 index 0000000..0c11fe1 --- /dev/null +++ b/tests/test-gloss-display--pick-definition.el @@ -0,0 +1,85 @@ +;;; test-gloss-display--pick-definition.el --- Tests for gloss-display-pick-definition -*- lexical-binding: t -*- + +;; SPDX-License-Identifier: GPL-3.0-or-later + +;;; Commentary: +;; Tests for `gloss-display-pick-definition' covering Normal/Boundary/Error +;; cases. The picker mocks `completing-read' at the boundary; the function +;; under test is responsible for building the alist of formatted-string -> +;; plist and mapping the user's choice back to the chosen plist. + +;;; Code: + +(require 'ert) +(require 'cl-lib) +(require 'gloss-display) + +(defmacro gloss-test--with-completing-read (return-value &rest body) + "Run BODY with `completing-read' mocked to return RETURN-VALUE. +If RETURN-VALUE is the symbol `quit', simulate the user pressing C-g +by signalling `quit' inside the mock." + (declare (indent 1) (debug t)) + `(cl-letf (((symbol-function 'completing-read) + (lambda (&rest _args) + ,(if (eq return-value 'quit) + '(signal 'quit nil) + return-value)))) + ,@body)) + +(ert-deftest test-gloss-display-pick-definition-normal-pick-first-of-three () + "Normal: choosing the first row returns the first definition plist." + (let* ((def1 '(:source wiktionary :text "First sense.")) + (def2 '(:source wiktionary :text "Second sense.")) + (def3 '(:source wiktionary :text "Third sense.")) + (defs (list def1 def2 def3)) + (chosen-row (gloss-display--format-candidate def1))) + (gloss-test--with-completing-read chosen-row + (should (equal (gloss-display-pick-definition "term" defs) def1))))) + +(ert-deftest test-gloss-display-pick-definition-normal-pick-middle-of-three () + "Normal: choosing the middle row returns the middle definition plist." + (let* ((def1 '(:source wiktionary :text "First sense.")) + (def2 '(:source wiktionary :text "Second sense.")) + (def3 '(:source wiktionary :text "Third sense.")) + (defs (list def1 def2 def3)) + (chosen-row (gloss-display--format-candidate def2))) + (gloss-test--with-completing-read chosen-row + (should (equal (gloss-display-pick-definition "term" defs) def2))))) + +(ert-deftest test-gloss-display-pick-definition-boundary-single-definition () + "Boundary: a single-definition list still returns that plist." + (let* ((def '(:source wiktionary :text "Only sense.")) + (chosen-row (gloss-display--format-candidate def))) + (gloss-test--with-completing-read chosen-row + (should (equal (gloss-display-pick-definition "term" (list def)) + def))))) + +(ert-deftest test-gloss-display-pick-definition-boundary-empty-list () + "Boundary: an empty definition list returns nil without prompting." + (let ((completing-read-called nil)) + (cl-letf (((symbol-function 'completing-read) + (lambda (&rest _args) + (setq completing-read-called t) ""))) + (should-not (gloss-display-pick-definition "term" nil)) + (should-not completing-read-called)))) + +(ert-deftest test-gloss-display-pick-definition-error-quit-returns-nil () + "Error: C-g during the picker (quit signal) returns nil, not propagate." + (let ((def '(:source wiktionary :text "Only sense."))) + (gloss-test--with-completing-read quit + (should-not (gloss-display-pick-definition "term" (list def)))))) + +(ert-deftest test-gloss-display-pick-definition-prompt-mentions-term () + "Normal: the completing-read prompt names the term being disambiguated." + (let* ((captured-prompt nil) + (def '(:source wiktionary :text "Only sense.")) + (chosen-row (gloss-display--format-candidate def))) + (cl-letf (((symbol-function 'completing-read) + (lambda (prompt &rest _args) + (setq captured-prompt prompt) + chosen-row))) + (gloss-display-pick-definition "anaphora" (list def)) + (should (string-match-p "anaphora" captured-prompt))))) + +(provide 'test-gloss-display--pick-definition) +;;; test-gloss-display--pick-definition.el ends here |
