summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/dev-fkeys.el8
-rw-r--r--tests/test-dev-fkeys--f4-compile-only.el12
-rw-r--r--tests/test-dev-fkeys--f4-dispatch.el20
-rw-r--r--tests/test-dev-fkeys--f6-test-runner.el15
4 files changed, 51 insertions, 4 deletions
diff --git a/modules/dev-fkeys.el b/modules/dev-fkeys.el
index 9c695674..a6f41adf 100644
--- a/modules/dev-fkeys.el
+++ b/modules/dev-fkeys.el
@@ -113,8 +113,8 @@ Installs a one-shot `compilation-finish-functions' hook to chain the run."
"Route ACTION (a symbol from `cj/--f4-candidates') to its handler.
Signals `user-error' on an unrecognized symbol or nil."
(pcase action
- ('compile-only (projectile-compile-project nil))
- ('run-only (projectile-run-project nil))
+ ('compile-only (projectile-compile-project current-prefix-arg))
+ ('run-only (projectile-run-project current-prefix-arg))
('compile-and-run (cj/--f4-compile-and-run-impl))
('clean-rebuild (cj/--f4-clean-rebuild-impl (cj/--f4-project-root)))
('compile-plain (call-interactively #'compile))
@@ -329,7 +329,7 @@ get a no-op message. Outside any project, falls back to interactive
(let* ((root (cj/--f4-project-root))
(project-type (cj/--detect-project-type root)))
(pcase project-type
- ('compiled (projectile-compile-project nil))
+ ('compiled (projectile-compile-project current-prefix-arg))
('interpreted (message "C-F4: not a compiled language"))
(_ (call-interactively #'compile)))))
@@ -342,7 +342,7 @@ Prompts via `completing-read' between \"All tests\" (delegates to
(let* ((candidates '("All tests" "Current file's tests"))
(label (completing-read "F6: " candidates nil t nil nil (car candidates))))
(pcase label
- ("All tests" (projectile-test-project nil))
+ ("All tests" (projectile-test-project current-prefix-arg))
("Current file's tests"
(cj/--f6-current-file-tests-impl
(buffer-file-name) (cj/--f4-project-root))))))
diff --git a/tests/test-dev-fkeys--f4-compile-only.el b/tests/test-dev-fkeys--f4-compile-only.el
index b0eec367..815aa097 100644
--- a/tests/test-dev-fkeys--f4-compile-only.el
+++ b/tests/test-dev-fkeys--f4-compile-only.el
@@ -36,6 +36,18 @@
(cj/f4-compile-only)
(should (= calls 1))))))
+(ert-deftest test-dev-fkeys-f4-compile-only-propagates-prefix-arg ()
+ "Normal: on a compiled project, `current-prefix-arg' is forwarded to
+projectile-compile-project so `C-u C-F4' forces a re-prompt."
+ (test-dev-fkeys-co--with-project '("go.mod")
+ (let ((seen-arg 'unset)
+ (current-prefix-arg t))
+ (cl-letf (((symbol-function 'cj/--f4-project-root) (lambda () root))
+ ((symbol-function 'projectile-compile-project)
+ (lambda (arg) (setq seen-arg arg))))
+ (cj/f4-compile-only)
+ (should (eq seen-arg t))))))
+
(ert-deftest test-dev-fkeys-f4-compile-only-interpreted-project-skips-compile ()
"Normal: on an interpreted project, projectile-compile-project does not run."
(test-dev-fkeys-co--with-project '("pyproject.toml")
diff --git a/tests/test-dev-fkeys--f4-dispatch.el b/tests/test-dev-fkeys--f4-dispatch.el
index 774daebf..0bf667a7 100644
--- a/tests/test-dev-fkeys--f4-dispatch.el
+++ b/tests/test-dev-fkeys--f4-dispatch.el
@@ -23,6 +23,26 @@
(cj/--f4-dispatch 'compile-only)
(should (= calls 1)))))
+(ert-deftest test-dev-fkeys-dispatch-compile-only-propagates-prefix-arg ()
+ "Normal: 'compile-only forwards `current-prefix-arg' to
+projectile-compile-project so `C-u F4 → Compile' forces a re-prompt."
+ (let ((seen-arg 'unset)
+ (current-prefix-arg t))
+ (cl-letf (((symbol-function 'projectile-compile-project)
+ (lambda (arg) (setq seen-arg arg))))
+ (cj/--f4-dispatch 'compile-only)
+ (should (eq seen-arg t)))))
+
+(ert-deftest test-dev-fkeys-dispatch-run-only-propagates-prefix-arg ()
+ "Normal: 'run-only forwards `current-prefix-arg' to
+projectile-run-project."
+ (let ((seen-arg 'unset)
+ (current-prefix-arg t))
+ (cl-letf (((symbol-function 'projectile-run-project)
+ (lambda (arg) (setq seen-arg arg))))
+ (cj/--f4-dispatch 'run-only)
+ (should (eq seen-arg t)))))
+
(ert-deftest test-dev-fkeys-dispatch-run-only-calls-projectile-run ()
"Normal: 'run-only routes to projectile-run-project."
(let ((calls 0))
diff --git a/tests/test-dev-fkeys--f6-test-runner.el b/tests/test-dev-fkeys--f6-test-runner.el
index 23129539..eb9cec5e 100644
--- a/tests/test-dev-fkeys--f6-test-runner.el
+++ b/tests/test-dev-fkeys--f6-test-runner.el
@@ -49,6 +49,21 @@
(cj/f6-test-runner)
(should (= calls 1)))))
+(ert-deftest test-dev-fkeys-f6-test-runner-all-tests-propagates-prefix-arg ()
+ "Normal: choosing 'All tests' forwards `current-prefix-arg' to
+projectile-test-project so `C-u F6 → All tests' forces a re-prompt."
+ (let ((seen-arg 'unset)
+ (current-prefix-arg t))
+ (cl-letf (((symbol-function 'completing-read)
+ (lambda (&rest _) "All tests"))
+ ((symbol-function 'projectile-test-project)
+ (lambda (arg) (setq seen-arg arg)))
+ ((symbol-function 'cj/--f4-project-root) (lambda () "/p/"))
+ ((symbol-function 'cj/--f6-current-file-tests-impl)
+ (lambda (_f _r) nil)))
+ (cj/f6-test-runner)
+ (should (eq seen-arg t)))))
+
(ert-deftest test-dev-fkeys-f6-test-runner-current-file-routes-to-impl ()
"Normal: choosing 'Current file's tests' invokes the orchestrator with
the buffer file and projectile root.