aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-05 03:10:50 -0500
committerCraig Jennings <c@cjennings.net>2026-05-05 03:10:50 -0500
commit77fe06b0c6f01d1d76bdf503c1b12286ac29aa0a (patch)
treedf8c6ddbd9f48c2bcc18b4e9ef18bb15ea0280f0 /tests
parent720d6597bf6751ee6d75bb224dd468aa2a78d7ee (diff)
downloadorg-drill-77fe06b0c6f01d1d76bdf503c1b12286ac29aa0a.tar.gz
org-drill-77fe06b0c6f01d1d76bdf503c1b12286ac29aa0a.zip
build: add make coverage target via undercover
I want to track test coverage as I work through the upstream issue backlog, so I added an undercover-based flow that mirrors how `make test-unit` already runs each file in its own Cask Emacs process. The Makefile gets `make coverage` and `make coverage-clean`. A new helper at `tests/run-coverage-file.el` instruments `org-drill.el` before the source is loaded. Undercover merges per-file results into a single simplecov JSON at `.coverage/simplecov.json`. I added `undercover` as a Cask development dep and `.coverage/` to `.gitignore` so the report stays local. I also renamed `make install` to `make setup`. The old name read like "deploy the package onto my system," but the target only installs Cask deps into the local `.cask/` directory. `setup` is closer to what it actually does, and all the internal `: install` prerequisites move with it. Baseline at this commit is 10.8% (208/1928 lines on org-drill.el).
Diffstat (limited to 'tests')
-rw-r--r--tests/run-coverage-file.el33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/run-coverage-file.el b/tests/run-coverage-file.el
new file mode 100644
index 0000000..e328a3f
--- /dev/null
+++ b/tests/run-coverage-file.el
@@ -0,0 +1,33 @@
+;;; run-coverage-file.el --- Undercover setup for per-file coverage runs -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; Loaded by `make coverage' before each test file runs, BEFORE
+;; org-drill.el is loaded. Instrumenting must happen first so the
+;; subsequent `(require 'org-drill)' or `-l org-drill.el' picks up the
+;; instrumented source.
+;;
+;; Coverage data is merged across per-file invocations into a single
+;; simplecov JSON at .coverage/simplecov.json.
+
+;;; Code:
+
+(unless (require 'undercover nil t)
+ (message "")
+ (message "ERROR: undercover not installed.")
+ (message "Add `undercover' to Cask as a development dep, then run `make setup'.")
+ (message "")
+ (kill-emacs 1))
+
+;; Force coverage collection in non-CI environments. Must be set after
+;; loading undercover because the library's top-level form
+;; `(setq undercover-force-coverage (getenv "UNDERCOVER_FORCE"))' would
+;; otherwise overwrite the value.
+(setq undercover-force-coverage t)
+
+(undercover "org-drill.el"
+ (:report-format 'simplecov)
+ (:report-file ".coverage/simplecov.json")
+ (:merge-report t)
+ (:send-report nil))
+
+;;; run-coverage-file.el ends here