From 3a846506399dc12ab219bfa8047947c122dd1d04 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Tue, 28 Apr 2026 18:08:09 -0500 Subject: test: add Wiktionary fixture loader helper Append `gloss-test--load-wiktionary-fixture' to tests/testutil-gloss.el. It takes a fixture name (e.g. "anaphora") and returns the raw JSON body from tests/fixtures/wiktionary-NAME.json, or signals `error' with the full path when the file isn't there. The helper resolves the fixtures directory from a `defconst' captured at load time. That way it works the same whether a test file requires testutil-gloss directly or pulls it in transitively through `make test'. Three ERT cases under tests/test-testutil-gloss--load-wiktionary-fixture.el cover Normal (anaphora loads as a non-empty JSON string), Boundary (the smallest fixture, 404, loads), and Error (a missing fixture raises with the path embedded in the message). Verified with `make test': 35 passed, 0 unexpected. --- ...test-testutil-gloss--load-wiktionary-fixture.el | 37 ++++++++++++++++++++++ tests/testutil-gloss.el | 17 ++++++++++ 2 files changed, 54 insertions(+) create mode 100644 tests/test-testutil-gloss--load-wiktionary-fixture.el diff --git a/tests/test-testutil-gloss--load-wiktionary-fixture.el b/tests/test-testutil-gloss--load-wiktionary-fixture.el new file mode 100644 index 0000000..daf24af --- /dev/null +++ b/tests/test-testutil-gloss--load-wiktionary-fixture.el @@ -0,0 +1,37 @@ +;;; test-testutil-gloss--load-wiktionary-fixture.el --- Tests for fixture loader -*- lexical-binding: t -*- + +;; SPDX-License-Identifier: GPL-3.0-or-later + +;;; Commentary: +;; Tests for `gloss-test--load-wiktionary-fixture' covering +;; Normal/Boundary/Error cases. + +;;; Code: + +(require 'ert) +(require 'testutil-gloss) + +(ert-deftest test-testutil-gloss-load-wiktionary-fixture-existing-returns-string () + "Normal: an existing fixture loads as a non-empty JSON string." + (let ((body (gloss-test--load-wiktionary-fixture "anaphora"))) + (should (stringp body)) + (should (> (length body) 0)) + (should (string-prefix-p "{" body)))) + +(ert-deftest test-testutil-gloss-load-wiktionary-fixture-smallest-fixture-loads () + "Boundary: the 404 error-body fixture (smallest) loads as a string." + (let ((body (gloss-test--load-wiktionary-fixture "404"))) + (should (stringp body)) + (should (> (length body) 0)) + (should (string-match-p "404" body)))) + +(ert-deftest test-testutil-gloss-load-wiktionary-fixture-missing-raises-error () + "Error: a missing fixture signals `error' with the path in the message." + (let* ((name "does-not-exist-xyzzy") + (err (should-error (gloss-test--load-wiktionary-fixture name) + :type 'error))) + (should (string-match-p (format "wiktionary-%s\\.json" name) + (error-message-string err))))) + +(provide 'test-testutil-gloss--load-wiktionary-fixture) +;;; test-testutil-gloss--load-wiktionary-fixture.el ends here diff --git a/tests/testutil-gloss.el b/tests/testutil-gloss.el index 7510765..36ba7ef 100644 --- a/tests/testutil-gloss.el +++ b/tests/testutil-gloss.el @@ -76,5 +76,22 @@ any visiting buffer if BODY created them." (when (file-exists-p gloss-file) (delete-file gloss-file))))) +(defconst gloss-test--testutil-dir + (file-name-directory (or load-file-name buffer-file-name default-directory)) + "Directory of this testutil file; used to locate fixtures.") + +(defun gloss-test--load-wiktionary-fixture (name) + "Return the raw JSON body of fixture `wiktionary-NAME.json' as a string. +NAME is the fixture name without the `wiktionary-' prefix or `.json' +suffix (e.g. \"anaphora\"). Fixtures live in tests/fixtures/ alongside +this file. Signal `error' with the full path if the file is missing." + (let ((path (expand-file-name (format "fixtures/wiktionary-%s.json" name) + gloss-test--testutil-dir))) + (unless (file-exists-p path) + (error "Wiktionary fixture not found: %s" path)) + (with-temp-buffer + (insert-file-contents path) + (buffer-string)))) + (provide 'testutil-gloss) ;;; testutil-gloss.el ends here -- cgit v1.2.3