aboutsummaryrefslogtreecommitdiff
path: root/tests/check-deps.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/check-deps.el')
-rw-r--r--tests/check-deps.el43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/check-deps.el b/tests/check-deps.el
new file mode 100644
index 0000000..55aaae6
--- /dev/null
+++ b/tests/check-deps.el
@@ -0,0 +1,43 @@
+;;; check-deps.el --- Verify test dependencies are loadable -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2026 Craig Jennings
+
+;;; Commentary:
+
+;; Loaded by tests/Makefile's check-deps target after eask has prepared the
+;; test environment. Keep dependency discovery inside Emacs so package.el,
+;; package-vc, Eask, Nix, and pre-populated load-path setups all work the same
+;; way: a dependency is available if Emacs can require it.
+;;
+;; DUET has no third-party runtime dependencies yet; cl-lib is the one feature
+;; the core leans on (cl-defstruct lands in Phase 2). The dev tooling
+;; (undercover, elisp-lint, package-lint) is verified by the targets that use
+;; it, not here.
+
+;;; Code:
+
+(when noninteractive
+ (package-initialize))
+
+(defconst duet-check-deps-required-features
+ '(cl-lib)
+ "Features required by the duet test suite.")
+
+(defun duet-check-deps--missing-features ()
+ "Return required test features that cannot be loaded."
+ (let (missing)
+ (dolist (feature duet-check-deps-required-features (nreverse missing))
+ (unless (require feature nil t)
+ (push feature missing)))))
+
+(let ((missing (duet-check-deps--missing-features)))
+ (if missing
+ (progn
+ (message "Missing Emacs Lisp test dependencies: %s"
+ (mapconcat #'symbol-name missing ", "))
+ (message "Run `make setup' from the project root, or make these features available on load-path.")
+ (kill-emacs 1))
+ (message "Required Emacs Lisp dependencies are loadable: %s"
+ (mapconcat #'symbol-name duet-check-deps-required-features ", "))))
+
+;;; check-deps.el ends here