diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-05 03:10:50 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-05 03:10:50 -0500 |
| commit | 77fe06b0c6f01d1d76bdf503c1b12286ac29aa0a (patch) | |
| tree | df8c6ddbd9f48c2bcc18b4e9ef18bb15ea0280f0 /tests | |
| parent | 720d6597bf6751ee6d75bb224dd468aa2a78d7ee (diff) | |
| download | org-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.el | 33 |
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 |
