diff options
| -rw-r--r-- | projectile.el | 44 | ||||
| -rw-r--r-- | test/projectile-test.el | 65 |
2 files changed, 102 insertions, 7 deletions
diff --git a/projectile.el b/projectile.el index 995df72..8bcb396 100644 --- a/projectile.el +++ b/projectile.el @@ -822,6 +822,31 @@ If the value is nil, there is no limit to the opend buffers count." :type 'integer :package-version '(projectile . "2.2.0")) +(defvar projectile-project-test-suffix nil + "Use this variable to override the current project's test-suffix property. +It takes precedence over the test-suffix for the project type when set. +Should be set via .dir-locals.el.") + +(defvar projectile-project-test-prefix nil + "Use this variable to override the current project's test-prefix property. +It takes precedence over the test-prefix for the project type when set. +Should be set via .dir-locals.el.") + +(defvar projectile-project-related-files-fn nil + "Use this variable to override the current project's related-files-fn property. +It takes precedence over the related-files-fn attribute for the project type +when set. Should be set via .dir-locals.el.") + +(defvar projectile-project-src-dir nil + "Use this variable to override the current project's src-dir property. +It takes precedence over the src-dir for the project type when set. +Should be set via .dir-locals.el.") + +(defvar projectile-project-test-dir nil + "Use this variable to override the current project's test-dir property. +It takes precedence over the test-dir for the project type when set. +Should be set via .dir-locals.el.") + ;;; Version information @@ -3652,25 +3677,30 @@ Fallback to DEFAULT-VALUE for missing attributes." (defun projectile-test-prefix (project-type) "Find default test files prefix based on PROJECT-TYPE." - (projectile-project-type-attribute project-type 'test-prefix)) + (or projectile-project-test-prefix + (projectile-project-type-attribute project-type 'test-prefix))) (defun projectile-test-suffix (project-type) "Find default test files suffix based on PROJECT-TYPE." - (projectile-project-type-attribute project-type 'test-suffix)) + (or projectile-project-test-suffix + (projectile-project-type-attribute project-type 'test-suffix))) (defun projectile-related-files-fn (project-type) "Find relative file based on PROJECT-TYPE." - (projectile-project-type-attribute project-type 'related-files-fn)) + (or projectile-project-related-files-fn + (projectile-project-type-attribute project-type 'related-files-fn))) (defun projectile-src-directory (project-type) "Find default src directory based on PROJECT-TYPE." - (projectile-project-type-attribute - project-type 'src-dir projectile-default-src-directory)) + (or projectile-project-src-dir + (projectile-project-type-attribute + project-type 'src-dir projectile-default-src-directory))) (defun projectile-test-directory (project-type) "Find default test directory based on PROJECT-TYPE." - (projectile-project-type-attribute - project-type 'test-dir projectile-default-test-directory)) + (or projectile-project-test-dir + (projectile-project-type-attribute + project-type 'test-dir projectile-default-test-directory))) (defun projectile-dirname-matching-count (a b) "Count matching dirnames ascending file paths in A and B." diff --git a/test/projectile-test.el b/test/projectile-test.el index 1e7a2dd..875b01e 100644 --- a/test/projectile-test.el +++ b/test/projectile-test.el @@ -2045,6 +2045,71 @@ projectile-process-current-project-buffers-current to have similar behaviour" (projectile--get-command-history projectile-project-root)) :to-equal '("bar" "foo"))))) +(describe "projectile-test-prefix" + :var ((mock-projectile-project-types + '((foo test-prefix "Test")))) + (it "gets set test-prefix" + (let ((projectile-project-types mock-projectile-project-types) + (projectile-project-type 'foo)) + (expect (projectile-test-prefix'foo) :to-equal "Test"))) + (it "uses local override" + (let ((projectile-project-types mock-projectile-project-types) + (projectile-project-type 'foo) + (projectile-project-test-prefix "Spec")) + (expect (projectile-test-prefix 'foo) :to-equal "Spec")))) + +(describe "projectile-test-suffix" + :var ((mock-projectile-project-types + '((foo test-suffix "Test")))) + (it "gets set test-suffix" + (let ((projectile-project-types mock-projectile-project-types) + (projectile-project-type 'foo)) + (expect (projectile-test-suffix'foo) :to-equal "Test"))) + (it "uses local override" + (let ((projectile-project-types mock-projectile-project-types) + (projectile-project-type 'foo) + (projectile-project-test-suffix "Spec")) + (expect (projectile-test-suffix 'foo) :to-equal "Spec")))) + +(describe "projectile-related-files-fn" + :var ((mock-projectile-project-types + '((foo related-files-fn ignore)))) + (it "gets set related-files-fn" + (let ((projectile-project-types mock-projectile-project-types) + (projectile-project-type 'foo)) + (expect (projectile-related-files-fn 'foo) :to-equal #'ignore))) + (it "uses local override" + (let ((projectile-project-types mock-projectile-project-types) + (projectile-project-type 'foo) + (projectile-project-related-files-fn #'identity)) + (expect (projectile-related-files-fn 'foo) :to-equal #'identity)))) + +(describe "projectile-test-directory" + :var ((mock-projectile-project-types + '((foo test-dir "test")))) + (it "gets set test directory" + (let ((projectile-project-types mock-projectile-project-types) + (projectile-project-type 'foo)) + (expect (projectile-test-directory 'foo) :to-equal "test"))) + (it "uses local override" + (let ((projectile-project-types mock-projectile-project-types) + (projectile-project-type 'foo) + (projectile-project-test-dir "other")) + (expect (projectile-test-directory 'foo) :to-equal "other")))) + +(describe "projectile-src-directory" + :var ((mock-projectile-project-types + '((foo src-dir "src")))) + (it "gets set src directory" + (let ((projectile-project-types mock-projectile-project-types) + (projectile-project-type 'foo)) + (expect (projectile-src-directory 'foo) :to-equal "src"))) + (it "uses local override" + (let ((projectile-project-types mock-projectile-project-types) + (projectile-project-type 'foo) + (projectile-project-src-dir "other")) + (expect (projectile-src-directory 'foo) :to-equal "other")))) + ;; A bunch of tests that make sure Projectile commands handle ;; gracefully the case of being run outside of a project. (assert-friendly-error-when-no-project projectile-project-info) |
