From be2f8dada59744be2faa3e62ffb97f6beaae592a Mon Sep 17 00:00:00 2001 From: Hugo Thunnissen Date: Sat, 17 Aug 2024 00:11:27 +0200 Subject: [PATCH] Add test for phpinspect-fix-imports --- phpinspect-imports.el | 4 +-- test/phpinspect-test-env.el | 22 +++++++++---- test/phpinspect-test.el | 1 + test/test-imports.el | 65 +++++++++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 test/test-imports.el diff --git a/phpinspect-imports.el b/phpinspect-imports.el index 81ba8ba..83b658c 100644 --- a/phpinspect-imports.el +++ b/phpinspect-imports.el @@ -199,9 +199,7 @@ that there are import (\"use\") statements for them." tree nil (phpinspect-buffer-location-resolver buffer))) (classes (alist-get 'classes index)) (imports (alist-get 'imports index)) - (project (phpinspect--cache-get-project-create - (phpinspect--get-or-create-global-cache) - (phpinspect-current-project-root))) + (project (phpinspect-buffer-project buffer)) (used-types (alist-get 'used-types index))) (phpinspect-add-use-statements-for-missing-types diff --git a/test/phpinspect-test-env.el b/test/phpinspect-test-env.el index becfc1d..393d0a9 100644 --- a/test/phpinspect-test-env.el +++ b/test/phpinspect-test-env.el @@ -10,16 +10,26 @@ (phpinspect-ensure-worker) (phpinspect-purge-cache) -(defun phpinspect--make-dummy-project () - (phpinspect--make-project - :fs (phpinspect-make-virtual-fs) - :autoload (phpinspect-make-autoloader) - :worker 'nil-worker)) - (defvar phpinspect-test-directory (file-name-directory (macroexp-file-name)) "Directory that phpinspect tests reside in.") +(defun phpinspect--make-dummy-project (&optional fs project-root) + (setq fs (or fs (phpinspect-make-virtual-fs)) + project-root (or project-root "could never be a real project root")) + + (let ((project (phpinspect--make-project + :root project-root + :fs fs + :autoload (phpinspect-make-autoloader + :fs fs + :project-root-resolver (lambda () project-root)) + :worker 'nil-worker))) + (setf (phpinspect-autoloader-file-indexer (phpinspect-project-autoload project)) + (phpinspect-project-make-file-indexer project)) + + project)) + (defvar phpinspect-test-php-file-directory (expand-file-name "fixtures" phpinspect-test-directory) diff --git a/test/phpinspect-test.el b/test/phpinspect-test.el index 3a6c275..4e8c42c 100644 --- a/test/phpinspect-test.el +++ b/test/phpinspect-test.el @@ -398,6 +398,7 @@ class Thing (load-file (concat phpinspect-test-directory "/test-toc.el")) (load-file (concat phpinspect-test-directory "/test-meta.el")) (load-file (concat phpinspect-test-directory "/test-resolve.el")) +(load-file (concat phpinspect-test-directory "/test-imports.el")) (provide 'phpinspect-test) diff --git a/test/test-imports.el b/test/test-imports.el new file mode 100644 index 0000000..8e0e364 --- /dev/null +++ b/test/test-imports.el @@ -0,0 +1,65 @@ +; test-autoload.el --- Unit tests for phpinspect.el -*- lexical-binding: t; -*- + +(require 'ert) +(require 'phpinspect-pipeline) +(require 'phpinspect-resolve) +(require 'phpinspect-imports) +(require 'phpinspect) +(require 'phpinspect-test-env + (expand-file-name "phpinspect-test-env.el" + (file-name-directory (macroexp-file-name)))) + +(defun phpinspect--make-dummy-composer-project () + (let ((fs (phpinspect-make-virtual-fs))) + (phpinspect-virtual-fs-set-file + fs + "/project/root/composer.json" + "{ \"autoload\": { \"psr-4\": {\"App\\\\\": [\"src/\", \"lib\"]}}}") + + (phpinspect-virtual-fs-set-file fs "/project/root/src/Foo.php" "") + (phpinspect-virtual-fs-set-file fs "/project/root/src/Bar.php" "") + + (let* ((project (phpinspect--make-dummy-project fs "/project/root")) + (autoload (phpinspect-project-autoload project)) + result error) + + (phpinspect-autoloader-refresh autoload (lambda (res err) + (setq result res error err))) + + (while (not (or result error)) + (thread-yield)) + + project))) + +(ert-deftest phpinspect-fix-imports-single-namespaced-class () + (let ((project (phpinspect--make-dummy-composer-project))) + (with-temp-buffer + (let* ((buffer (phpinspect-make-buffer :buffer (current-buffer) + :-project project))) + + (insert "