diff options
| author | Bozhidar Batsov <bozhidar@toptal.com> | 2026-04-26 12:29:59 +0100 |
|---|---|---|
| committer | Bozhidar Batsov <bozhidar@toptal.com> | 2026-04-26 12:29:59 +0100 |
| commit | 366049b8f4a14fc1842ae264e6544bdc279308b5 (patch) | |
| tree | 4abafe52213d0fc55f8235cdb7b5b207694fc4cb | |
| parent | ccd8052beb84a889565ffd08a58cf643e2e439f3 (diff) | |
Backfill tests for indexing command dispatch
`projectile-get-ext-command' had no direct test coverage, so the
non-git VCS branches (hg/svn/bzr/darcs/fossil/pijul/sapling/jj) were
relying on indirect coverage that didn't actually exercise the
dispatch. Add a `describe' block that pins each branch.
Also extend the `projectile-dir-files-alien' tests with two cases
that were previously uncovered: the fd path for git (verifying we
don't also call `projectile-git-deleted-files') and the no-VCS
fallback (verifying the generic command is used).
| -rw-r--r-- | test/projectile-test.el | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/test/projectile-test.el b/test/projectile-test.el index 02d65ba..52c3b98 100644 --- a/test/projectile-test.el +++ b/test/projectile-test.el @@ -928,7 +928,25 @@ Just delegates OPERATION and ARGS for all operations except for`shell-command`'. (let ((projectile-git-use-fd nil) (projectile-fd-executable nil)) (projectile-dir-files-alien "/my/root/" 'git)) - (expect 'projectile-project-vcs :not :to-have-been-called))) + (expect 'projectile-project-vcs :not :to-have-been-called)) + (it "uses the fd-based command when fd is configured for git" + (spy-on 'projectile-files-via-ext-command :and-return-value '("a")) + (spy-on 'projectile-get-sub-projects-files :and-return-value nil) + (spy-on 'projectile-git-deleted-files :and-return-value nil) + (let ((projectile-git-use-fd t) + (projectile-fd-executable "fd")) + (projectile-dir-files-alien "/my/root/" 'git) + ;; When fd is on we don't ask git for deleted files. + (expect 'projectile-git-deleted-files :not :to-have-been-called) + (let ((cmd (cadr (spy-calls-args-for 'projectile-files-via-ext-command 0)))) + (expect cmd :to-equal + (concat "fd " projectile-git-fd-args))))) + (it "falls back to the generic command for projects without a VCS" + (spy-on 'projectile-files-via-ext-command :and-return-value '("a.txt")) + (let ((files (projectile-dir-files-alien "/my/root/" 'none))) + (expect files :to-equal '("a.txt")) + (expect (cadr (spy-calls-args-for 'projectile-files-via-ext-command 0)) + :to-equal projectile-generic-command)))) (describe "hybrid indexing" (it "applies projectile-globally-ignored-file-suffixes on top of the alien result" @@ -1200,6 +1218,29 @@ Just delegates OPERATION and ARGS for all operations except for`shell-command`'. (it "returns nil when vcs is not supported" (expect (projectile-get-sub-projects-command 'none) :to-be nil))) +(describe "projectile-get-ext-command" + (it "returns the git command for git" + (let ((projectile-git-use-fd nil) + (projectile-fd-executable nil)) + (expect (projectile-get-ext-command 'git) :to-equal projectile-git-command))) + (it "uses fd for git when fd is configured" + (let ((projectile-git-use-fd t) + (projectile-fd-executable "fd") + (projectile-git-fd-args "-H -0")) + (expect (projectile-get-ext-command 'git) :to-equal "fd -H -0"))) + (it "returns the matching command for each non-git VCS" + (expect (projectile-get-ext-command 'hg) :to-equal projectile-hg-command) + (expect (projectile-get-ext-command 'svn) :to-equal projectile-svn-command) + (expect (projectile-get-ext-command 'bzr) :to-equal projectile-bzr-command) + (expect (projectile-get-ext-command 'darcs) :to-equal projectile-darcs-command) + (expect (projectile-get-ext-command 'fossil) :to-equal projectile-fossil-command) + (expect (projectile-get-ext-command 'pijul) :to-equal projectile-pijul-command) + (expect (projectile-get-ext-command 'sapling) :to-equal projectile-sapling-command) + (expect (projectile-get-ext-command 'jj) :to-equal projectile-jj-command)) + (it "falls back to the generic command for unknown / no VCS" + (expect (projectile-get-ext-command 'none) :to-equal projectile-generic-command) + (expect (projectile-get-ext-command nil) :to-equal projectile-generic-command))) + (describe "projectile-files-via-ext-command" (it "returns nil when command is nil or empty or fails" (expect (projectile-files-via-ext-command "/" "") :not :to-be-truthy) |
