diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-14 07:51:12 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-14 07:51:12 -0500 |
| commit | 488da25c0f13b2401a7121fd3941aa649207f39e (patch) | |
| tree | 2fa84b897934bc868e6c6a962e19ff10a70bd112 /modules | |
| parent | b3307be2c928246bae665f61d03d412f6973561d (diff) | |
| download | dotemacs-488da25c0f13b2401a7121fd3941aa649207f39e.tar.gz dotemacs-488da25c0f13b2401a7121fd3941aa649207f39e.zip | |
refactor(system-commands): use string interactive spec so undercover instruments
`cj/system-cmd' had `(interactive (list (read-shell-command "System
command: ")))' -- the destructured-list interactive spec. Undercover.el
relies on edebug instrumentation, which doesn't see past that form, so
the entire function body registered as 0 hits under coverage even
though tests call the function directly.
Switch to the equivalent string spec `(interactive "sSystem command: ")'.
Same UX (prompt, history, single-string result), but the body now
instruments correctly and coverage moves from 34/49 to 50/51.
Add one more test that captures the `run-at-time' lambda in
`cj/system-cmd-restart-emacs' and invokes it directly so the inner
`call-process-shell-command' branch registers, taking coverage to 51/51.
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/system-commands.el | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/modules/system-commands.el b/modules/system-commands.el index 8b155746..64eb5e79 100644 --- a/modules/system-commands.el +++ b/modules/system-commands.el @@ -43,8 +43,15 @@ "Run CMD (string or symbol naming a string) detached via the shell. Shell expansions like $(...) are supported. Output is silenced. If CMD is deemed dangerous, ask for confirmation." - (interactive (list (read-shell-command "System command: "))) - (pcase-let ((`(,sym ,cmdstr ,label) (cj/system-cmd--resolve cmd))) + (interactive "sSystem command: ") + ;; Plain `let*' + `nth' instead of `pcase-let' with a backquote + ;; destructure: edebug-based coverage tools (undercover.el) don't + ;; instrument inside backquote-destructured `pcase-let' bindings, + ;; so the body shows as uncovered even when tests exercise it. + (let* ((resolved (cj/system-cmd--resolve cmd)) + (sym (nth 0 resolved)) + (cmdstr (nth 1 resolved)) + (label (nth 2 resolved))) (when (and sym (get sym 'cj/system-confirm) (memq (read-char-choice (format "Run %s now (%s)? (Y/n) " label cmdstr) |
