diff options
| author | Bozhidar Batsov <bozhidar@batsov.dev> | 2026-02-28 10:13:27 +0200 |
|---|---|---|
| committer | Bozhidar Batsov <bozhidar@batsov.dev> | 2026-02-28 10:22:31 +0200 |
| commit | 3f26b63df2c38f24259f51e44f9825bf9dde4a29 (patch) | |
| tree | a7823f7fc04231fa95b2f34bededb06eb5674928 /test | |
| parent | d52c8bcbdea20bfaaadd7e81f3b0041741047278 (diff) | |
Add tests for round 2 codebase fixes
- Test that projectile-update-project-type resets cache with 'equal test
- Test safe-local-variable predicates for project settings variables
- Test that projectile-project-type passes project-root through to
detect-project-type
Diffstat (limited to 'test')
| -rw-r--r-- | test/projectile-test.el | 58 |
1 files changed, 53 insertions, 5 deletions
diff --git a/test/projectile-test.el b/test/projectile-test.el index ce36e69..6b63d63 100644 --- a/test/projectile-test.el +++ b/test/projectile-test.el @@ -315,7 +315,15 @@ Just delegates OPERATION and ARGS for all operations except for`shell-command`'. (let ((projectile-project-types '((bar marker-files ("foo"))))) (expect (projectile-update-project-type 'bar :precedence 'invalid-symbol) - :to-throw)))) + :to-throw))) + (it "resets project type cache with correct :test" + (let ((projectile-project-types '((foo marker-files ("foo")))) + (projectile-project-type-cache (make-hash-table :test 'equal))) + (puthash "/path/to/project" 'foo projectile-project-type-cache) + (projectile-update-project-type 'foo :compile "make") + ;; Cache should have been reset but still use 'equal test + (puthash "/path/to/project" 'foo projectile-project-type-cache) + (expect (gethash "/path/to/project" projectile-project-type-cache) :to-equal 'foo)))) (describe "projectile-project-type" :var ((dir default-directory)) @@ -334,10 +342,14 @@ Just delegates OPERATION and ARGS for all operations except for`shell-command`'. (it "has no effect when DIR is passed" (projectile-test-with-sandbox (let ((projectile-project-type 'python-poetry)) - (expect (projectile-project-type dir) :to-equal 'emacs-eldev)))))) - - - + (expect (projectile-project-type dir) :to-equal 'emacs-eldev))))) + (it "passes project-root to detect-project-type to avoid redundant resolution" + (projectile-test-with-sandbox + (let ((projectile-project-type-cache (make-hash-table :test 'equal))) + (spy-on 'projectile-detect-project-type :and-call-through) + (projectile-project-type dir) + (expect 'projectile-detect-project-type + :to-have-been-called-with dir (projectile-project-root dir)))))) (describe "projectile-ignored-directory-p" (it "checks if directory should be ignored" @@ -378,6 +390,42 @@ Just delegates OPERATION and ARGS for all operations except for`shell-command`'. (let ((pred (get 'projectile-globally-ignored-files 'safe-local-variable))) (expect (funcall pred "not-a-list") :not :to-be-truthy)))) +(describe "safe-local-variable predicates for project settings" + (it "accepts strings for string-valued project settings" + (dolist (var '(projectile-project-test-suffix + projectile-project-test-prefix + projectile-project-src-dir + projectile-project-test-dir + projectile-project-configure-cmd + projectile-project-compilation-cmd + projectile-project-compilation-dir + projectile-project-test-cmd + projectile-project-install-cmd + projectile-project-package-cmd + projectile-project-run-cmd)) + (expect (funcall (get var 'safe-local-variable) "some-value") :to-be-truthy))) + (it "rejects non-strings for string-valued project settings" + (dolist (var '(projectile-project-test-suffix + projectile-project-compilation-cmd + projectile-project-run-cmd)) + (expect (funcall (get var 'safe-local-variable) 123) :not :to-be-truthy) + (expect (funcall (get var 'safe-local-variable) '("list")) :not :to-be-truthy))) + (it "accepts booleans for projectile-project-enable-cmd-caching" + (let ((pred (get 'projectile-project-enable-cmd-caching 'safe-local-variable))) + (expect (funcall pred t) :to-be-truthy) + (expect (funcall pred nil) :to-be-truthy))) + (it "rejects non-booleans for projectile-project-enable-cmd-caching" + (let ((pred (get 'projectile-project-enable-cmd-caching 'safe-local-variable))) + (expect (funcall pred "yes") :not :to-be-truthy) + (expect (funcall pred 1) :not :to-be-truthy))) + (it "accepts symbols for projectile-project-type" + (let ((pred (get 'projectile-project-type 'safe-local-variable))) + (expect (funcall pred 'maven) :to-be-truthy) + (expect (funcall pred 'generic) :to-be-truthy))) + (it "rejects non-symbols for projectile-project-type" + (let ((pred (get 'projectile-project-type 'safe-local-variable))) + (expect (funcall pred "maven") :not :to-be-truthy)))) + (describe "projectile-ignored-files" (it "returns list of ignored files" (spy-on 'projectile-project-root :and-return-value "/path/to/project") |
