diff --git a/README.md b/README.md index a0a0ac1..0d12536 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,6 @@ composer require okapi/code-transformer - [Limitations](#limitations) - [How it works](#how-it-works) - [Testing](#testing) -- [TODO](#todo) @@ -332,18 +331,6 @@ Give a ⭐ if this project helped you! -## TODO - -- Add support for Production/Development environments: - - Production: Cache will not be checked for updates (better performance) - - Development: Cache will be checked for updates (better debugging experience) - -- Create a flowchart (WIP) - -- Cache lifetime - - - ## 🙏 Thanks - Big thanks to [lisachenko](https://github.com/lisachenko) for their pioneering diff --git a/composer.json b/composer.json index 5e0fc3f..e54767b 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "okapi/code-transformer", "description": "PHP Code Transformer is a PHP library that allows you to modify and transform the source code of a loaded PHP class.", - "version": "1.3.3", + "version": "1.3.4", "type": "library", "homepage": "https://github.com/okapi-web/php-code-transformer", "license": "MIT", diff --git a/src/CodeTransformerKernel.php b/src/CodeTransformerKernel.php index 17616fc..6481c7c 100644 --- a/src/CodeTransformerKernel.php +++ b/src/CodeTransformerKernel.php @@ -2,6 +2,7 @@ namespace Okapi\CodeTransformer; +use Closure; use DI\Attribute\Inject; use Okapi\CodeTransformer\Core\AutoloadInterceptor; use Okapi\CodeTransformer\Core\Cache\CacheStateManager; @@ -160,7 +161,7 @@ public static function init(): void } /** - * Register the dependency injection. + * Internal dependency injection. * * @return void */ @@ -199,22 +200,31 @@ protected function configureOptions(): void } /** - * Register the services. + * Custom dependency injection handler. * - * @return void + * Pass a closure that takes a transformer class name as the argument and + * returns a transformer instance. + * + * @return null|Closure(class-string): Transformer */ + protected function dependencyInjectionHandler(): ?Closure + { + // Override this method to configure the dependency injection handler + + return null; + } + protected function registerServices(): void { - // Options provider $this->options->register(); - // Manage the user-defined transformers + $this->transformerManager->registerCustomDependencyInjectionHandler( + $this->dependencyInjectionHandler() + ); $this->transformerManager->register(); - // Cache path manager $this->cacheStateManager->register(); - // Stream filter -> Source transformer $this->streamFilter->register(); } diff --git a/src/Core/AutoloadInterceptor/ClassLoader.php b/src/Core/AutoloadInterceptor/ClassLoader.php index 38b9280..4543c12 100644 --- a/src/Core/AutoloadInterceptor/ClassLoader.php +++ b/src/Core/AutoloadInterceptor/ClassLoader.php @@ -86,6 +86,7 @@ public function loadClass($namespacedClass): bool * @return false|string * * @noinspection PhpParameterNameChangedDuringInheritanceInspection + * @noinspection PhpStatementHasEmptyBodyInspection */ public function findFile($namespacedClass): false|string { diff --git a/src/Core/Cache/CacheStateManager.php b/src/Core/Cache/CacheStateManager.php index 4c86a7e..97587a3 100644 --- a/src/Core/Cache/CacheStateManager.php +++ b/src/Core/Cache/CacheStateManager.php @@ -89,8 +89,14 @@ public function register(): void */ private function initializeCacheDirectory(): void { + $cacheDir = $this->options->getCacheDir(); + + if (file_exists($cacheDir)) { + return; + } + Filesystem::mkdir( - $this->options->getCacheDir(), + $cacheDir, $this->options->getCacheFileMode(), recursive: true, ); @@ -185,7 +191,7 @@ private function saveCacheState(): void // Create the cache state array $cacheStateArray = array_map( fn (CacheState $cacheState) => $cacheState->toArray(), - array_merge($this->newCacheState, $this->cacheState), + array_merge($this->cacheState, $this->newCacheState), ); // Set the hash diff --git a/src/Core/Container/TransformerManager.php b/src/Core/Container/TransformerManager.php index bdcc64f..f6e48a6 100644 --- a/src/Core/Container/TransformerManager.php +++ b/src/Core/Container/TransformerManager.php @@ -2,10 +2,12 @@ /** @noinspection PhpPropertyOnlyWrittenInspection */ namespace Okapi\CodeTransformer\Core\Container; +use Closure; use Error; use Exception; use Okapi\CodeTransformer\Core\DI; use Okapi\CodeTransformer\Core\Exception\Transformer\InvalidTransformerClassException; +use Okapi\CodeTransformer\Core\Exception\Transformer\InvalidTransformerClassNameException; use Okapi\CodeTransformer\Core\Exception\Transformer\TransformerNotFoundException; use Okapi\CodeTransformer\Core\ServiceInterface; use Okapi\CodeTransformer\Transformer; @@ -32,6 +34,11 @@ class TransformerManager implements ServiceInterface */ private array $transformerContainers = []; + /** + * @var ?Closure(class-string): Transformer + */ + private ?Closure $dependencyInjectionHandler = null; + // region Pre-Initialization /** @@ -54,51 +61,73 @@ public function addTransformers(array $transformers): void // region Initialization /** - * Register the transformer container. - * - * @return void + * @param null|(Closure(class-string): Transformer) $dependencyInjectionHandler */ + public function registerCustomDependencyInjectionHandler( + ?Closure $dependencyInjectionHandler + ): void { + $this->dependencyInjectionHandler = $dependencyInjectionHandler; + } + public function register(): void { $this->loadTransformers(); } + private function loadTransformers(): void + { + foreach ($this->transformers as $transformer) { + $this->loadTransformer($transformer); + } + } + /** - * Get the transformer instances. - * - * @return void + * @param class-string $transformerClassName * * @noinspection PhpUnhandledExceptionInspection * @noinspection PhpDocMissingThrowsInspection */ - private function loadTransformers(): void + private function loadTransformer(mixed $transformerClassName): void { - foreach ($this->transformers as $transformer) { - // Instantiate the transformer + // Check if the transformer is already loaded + if (array_key_exists($transformerClassName, $this->transformerContainers)) { + // @codeCoverageIgnoreStart + return; + // @codeCoverageIgnoreEnd + } + + // Validate the transformer + if (gettype($transformerClassName) !== 'string') { + throw new InvalidTransformerClassNameException; + } + + // Instantiate the transformer + if ($this->dependencyInjectionHandler) { + $transformerInstance = ($this->dependencyInjectionHandler)($transformerClassName); + } else { try { - $transformerInstance = DI::make($transformer); + $transformerInstance = DI::make($transformerClassName); } catch (Error|Exception) { - throw new TransformerNotFoundException($transformer); + throw new TransformerNotFoundException($transformerClassName); } + } - // Validate the transformer - $isTransformer = $transformerInstance instanceof Transformer; - if (!$isTransformer) { - throw new InvalidTransformerClassException($transformer); - } - assert($transformerInstance instanceof Transformer); + // Validate the transformer + $isTransformer = $transformerInstance instanceof Transformer; + if (!$isTransformer) { + throw new InvalidTransformerClassException($transformerClassName); + } - // Create transformer container - $transformerContainer = DI::make(TransformerContainer::class, [ - 'transformerInstance' => $transformerInstance, - ]); + // Create transformer container + $transformerContainer = DI::make(TransformerContainer::class, [ + 'transformerInstance' => $transformerInstance, + ]); - // Create a reflection of the transformer - $transformerRefClass = new BaseReflectionClass($transformerInstance); + // Create a reflection of the transformer + $transformerRefClass = new BaseReflectionClass($transformerInstance); - $filePath = $transformerRefClass->getFileName(); - $this->transformerContainers[$filePath] = $transformerContainer; - } + $filePath = $transformerRefClass->getFileName(); + $this->transformerContainers[$filePath] = $transformerContainer; } // endregion diff --git a/src/Core/Exception/Transformer/InvalidTransformerClassNameException.php b/src/Core/Exception/Transformer/InvalidTransformerClassNameException.php new file mode 100644 index 0000000..035dc88 --- /dev/null +++ b/src/Core/Exception/Transformer/InvalidTransformerClassNameException.php @@ -0,0 +1,15 @@ +assertWillBeTransformed($class); @@ -32,7 +31,7 @@ public function testReplaceStringInClass(): void $stringClass->test(), ); - $file = Util::CLASSES_TO_TRANSFORM_DIR . '/StringClass.php'; + $file = Util::getFilePath(StringClass::class); $content = Filesystem::readFile($file); $this->assertEquals( @@ -43,7 +42,7 @@ public function testReplaceStringInClass(): void public function testCachedReplaceStringClass(): void { - ApplicationKernel::init(); + Kernel::init(); $class = StringClass::class; $this->assertTransformerLoadedFromCache($class); @@ -57,7 +56,7 @@ public function testCachedReplaceStringClass(): void public function testCachedFile(): void { - $cachedFilePath = Util::CACHED_CLASSES_TO_TRANSFORM_DIR . '/StringClass.php'; + $cachedFilePath = Util::getTransformedFilePath(StringClass::class); $this->assertFileExists($cachedFilePath); $file = Filesystem::readFile($cachedFilePath); @@ -76,7 +75,7 @@ public function testCachedFile(): void public function testDestructor(): void { Util::clearCache(); - ApplicationKernel::init(); + Kernel::init(); $class = StringClass::class; $stringClass = new $class(); @@ -89,7 +88,7 @@ public function testDestructor(): void $file = require Util::CACHE_STATES_FILE; - $key = 'CODE_TRANSFORMER_APP_DIR\tests\Stubs\ClassesToTransform\StringClass.php'; + $key = 'CODE_TRANSFORMER_APP_DIR\tests\Functional\Cache\CachedFileAndDestructor\Target\StringClass.php'; $key = str_replace('\\', DIRECTORY_SEPARATOR, $key); $this->assertArrayHasKey($key, $file); } diff --git a/tests/Functional/Cache/CachedFileAndDestructor/Kernel.php b/tests/Functional/Cache/CachedFileAndDestructor/Kernel.php new file mode 100644 index 0000000..4328328 --- /dev/null +++ b/tests/Functional/Cache/CachedFileAndDestructor/Kernel.php @@ -0,0 +1,16 @@ +assertWillBeTransformed($class); $deleteCacheFileClass = new $class(); @@ -32,15 +30,15 @@ public function testDeleteCacheFileClass(): void public function testCachedDeleteCacheFileClass(): void { - ApplicationKernel::init(); + Kernel::init(); - $cachedFilePath = Util::CACHED_CLASSES_TO_TRANSFORM_DIR . '/DeleteCacheFileClass.php'; + $cachedFilePath = Util::getTransformedFilePath(Target::class); $this->assertFileExists($cachedFilePath); Filesystem::rm($cachedFilePath); $this->assertFileDoesNotExist($cachedFilePath); - $class = DeleteCacheFileClass::class; + $class = Target::class; $this->assertWillBeTransformed($class); $deleteCacheFileClass = new $class(); diff --git a/tests/Functional/Cache/DeleteCacheFile/Kernel.php b/tests/Functional/Cache/DeleteCacheFile/Kernel.php new file mode 100644 index 0000000..d465f60 --- /dev/null +++ b/tests/Functional/Cache/DeleteCacheFile/Kernel.php @@ -0,0 +1,15 @@ +append('// Hello from Code Transformer!'); + } +} diff --git a/tests/Functional/InvalidTransformerClassTest.php b/tests/Functional/InvalidTransformerClassTest.php deleted file mode 100644 index 3cd92e0..0000000 --- a/tests/Functional/InvalidTransformerClassTest.php +++ /dev/null @@ -1,28 +0,0 @@ -expectException(TransformerNotFoundException::class); - - TransformerDoesNotExistKernel::init(); - } - - public function testTransformerDoesNotExtendTransformer(): void - { - $this->expectException(InvalidTransformerClassException::class); - - TransformerDoesNotExtendTransformerKernel::init(); - } -} diff --git a/tests/Functional/AddedTransformerTest.php b/tests/Functional/Kernel/AddedTransformer/AddedTransformerTest.php similarity index 68% rename from tests/Functional/AddedTransformerTest.php rename to tests/Functional/Kernel/AddedTransformer/AddedTransformerTest.php index 7fb989e..60312f6 100644 --- a/tests/Functional/AddedTransformerTest.php +++ b/tests/Functional/Kernel/AddedTransformer/AddedTransformerTest.php @@ -1,11 +1,10 @@ assertWillBeTransformed($class); $addedTransformerClass = new $class(); @@ -35,7 +34,7 @@ public function testCachedAddedTransformer(): void { AddedTransformerKernel::init(); - $class = AddedTransformerClass::class; + $class = Target::class; $this->assertWillBeTransformed($class); $addedTransformerClass = new $class(); diff --git a/tests/Functional/Kernel/AddedTransformer/Kernel/AddedTransformerKernel.php b/tests/Functional/Kernel/AddedTransformer/Kernel/AddedTransformerKernel.php new file mode 100644 index 0000000..60eedb1 --- /dev/null +++ b/tests/Functional/Kernel/AddedTransformer/Kernel/AddedTransformerKernel.php @@ -0,0 +1,17 @@ +transformerManager->addTransformers($this->addedTransformers); + } +} diff --git a/tests/Functional/Kernel/AddedTransformer/Kernel/BeforeAddedTransformerKernel.php b/tests/Functional/Kernel/AddedTransformer/Kernel/BeforeAddedTransformerKernel.php new file mode 100644 index 0000000..0541ade --- /dev/null +++ b/tests/Functional/Kernel/AddedTransformer/Kernel/BeforeAddedTransformerKernel.php @@ -0,0 +1,16 @@ +expectException(AlreadyInitializedException::class); - ExceptionOnDoubleInitializationKernel::init(); - ExceptionOnDoubleInitializationKernel::init(); + Kernel::init(); + Kernel::init(); } } diff --git a/tests/Stubs/Kernel/ExceptionOnDoubleInitializationKernel.php b/tests/Functional/Kernel/AlreadyInitializedKernel/Kernel.php similarity index 70% rename from tests/Stubs/Kernel/ExceptionOnDoubleInitializationKernel.php rename to tests/Functional/Kernel/AlreadyInitializedKernel/Kernel.php index 968ad16..f5ef477 100644 --- a/tests/Stubs/Kernel/ExceptionOnDoubleInitializationKernel.php +++ b/tests/Functional/Kernel/AlreadyInitializedKernel/Kernel.php @@ -1,10 +1,11 @@ assertStringContainsString( + 'Generating transformer instance: ' . StringTransformer::class, + $output, + ); + + $class = new StringClass(); + + $this->assertSame( + 'Hello from Code Transformer!', + $class->test(), + ); + } +} diff --git a/tests/Functional/Kernel/CustomDependencyInjectionHandler/Kernel.php b/tests/Functional/Kernel/CustomDependencyInjectionHandler/Kernel.php new file mode 100644 index 0000000..d55e433 --- /dev/null +++ b/tests/Functional/Kernel/CustomDependencyInjectionHandler/Kernel.php @@ -0,0 +1,26 @@ +assertWillBeTransformed($class); + + $helloWorldClass = new $class(); + + $this->assertSame( + 'Hello from Code Transformer!', + $helloWorldClass->say(), + ); + } + + /** + * @see StringTransformer::transform() + */ + public function testCachedDevelopmentEnvironment(): void + { + DevelopmentEnvironmentKernel::init(); + + $class = HelloWorld::class; + $this->assertTransformerLoadedFromCache($class); + + $helloWorldClass = new $class(); + + $this->assertSame( + 'Hello from Code Transformer!', + $helloWorldClass->say(), + ); + } + + /** + * @see StringTransformer::transform() + */ + public function testChangedDevelopmentEnvironment(): void + { + // Change class + $classFilePath = Util::getFilePath(HelloWorld::class); + $originalClassFileContent = Filesystem::readFile($classFilePath); + + $changedFileContent = str_replace( + 'Hello World!', + 'Hello Changed World!', + $originalClassFileContent, + ); + + sleep(1); + Filesystem::writeFile($classFilePath, $changedFileContent); + + $exception = null; + try { + DevelopmentEnvironmentKernel::init(); + + $class = HelloWorld::class; + $this->assertWillBeTransformed($class); + + $classInstance = new $class(); + $this->assertSame( + 'Hello Changed World from Code Transformer!', + $classInstance->say(), + ); + } catch (Throwable $e) { + $exception = $e; + } + + // Restore class + Filesystem::writeFile($classFilePath, $originalClassFileContent); + + if ($exception !== null) { + /** @noinspection PhpUnhandledExceptionInspection */ + throw $exception; + } + } + + /** + * @see StringTransformer::transform() + */ + public function testProductionEnvironment(): void + { + Util::clearCache(); + ProductionEnvironmentKernel::init(); + + $class = HelloWorld::class; + $this->assertWillBeTransformed($class); + + $helloWorldClass = new $class(); + + $this->assertSame( + 'Hello from Code Transformer!', + $helloWorldClass->say(), + ); + } + + /** + * @see StringTransformer::transform() + */ + public function testCachedProductionEnvironment(): void + { + ProductionEnvironmentKernel::init(); + + $class = HelloWorld::class; + $this->assertTransformerLoadedFromCache($class); + + $helloWorldClass = new $class(); + + $this->assertSame( + 'Hello from Code Transformer!', + $helloWorldClass->say(), + ); + } + + /** + * @see StringTransformer::transform() + */ + public function testChangedProductionEnvironment(): void + { + // Change class + $classFilePath = Util::getFilePath(HelloWorld::class); + $originalClassFileContent = Filesystem::readFile($classFilePath); + + $changedFileContent = str_replace( + 'Hello World!', + 'Hello Changed World!', + $originalClassFileContent, + ); + + sleep(1); + Filesystem::writeFile($classFilePath, $changedFileContent); + + $exception = null; + try { + ProductionEnvironmentKernel::init(); + + $class = HelloWorld::class; + $this->assertTransformerLoadedFromCache($class); + + $classInstance = new $class(); + $this->assertSame( + 'Hello from Code Transformer!', + $classInstance->say(), + ); + } catch (Throwable $e) { + $exception = $e; + } + + // Restore class + Filesystem::writeFile($classFilePath, $originalClassFileContent); + + if ($exception !== null) { + /** @noinspection PhpUnhandledExceptionInspection */ + throw $exception; + } + } +} diff --git a/tests/Functional/Kernel/Environment/Kernel/DevelopmentEnvironmentKernel.php b/tests/Functional/Kernel/Environment/Kernel/DevelopmentEnvironmentKernel.php new file mode 100644 index 0000000..82937e4 --- /dev/null +++ b/tests/Functional/Kernel/Environment/Kernel/DevelopmentEnvironmentKernel.php @@ -0,0 +1,19 @@ +getSourceFileNode(); + + foreach ($sourceFileNode->getDescendantNodes() as $node) { + // Find 'Hello World!' string + if ($node instanceof StringLiteral) { + if ($node->getStringContentsText() === 'Hello World!') { + // Replace it with 'Hello from Code Transformer!' + $code->edit( + $node->children, + "'Hello from Code Transformer!'", + ); + } else if ($node->getStringContentsText() === 'Hello Changed World!') { + // Replace it with 'Hello Changed World from Code Transformer!' + $code->edit( + $node->children, + "'Hello Changed World from Code Transformer!'", + ); + } + } + } + } +} diff --git a/tests/Functional/KernelTest.php b/tests/Functional/Kernel/KernelTest.php similarity index 50% rename from tests/Functional/KernelTest.php rename to tests/Functional/Kernel/KernelTest.php index 675818d..1b0e152 100644 --- a/tests/Functional/KernelTest.php +++ b/tests/Functional/Kernel/KernelTest.php @@ -1,8 +1,8 @@ assertFalse(ApplicationKernel::isInitialized()); - ApplicationKernel::init(); - $this->assertTrue(ApplicationKernel::isInitialized()); + $this->assertFalse(EmptyKernel::isInitialized()); + EmptyKernel::init(); + $this->assertTrue(EmptyKernel::isInitialized()); $this->assertFileDoesNotExist(Util::CACHE_STATES_FILE); } public function testCachedKernel(): void { - $this->assertFalse(ApplicationKernel::isInitialized()); - ApplicationKernel::init(); - $this->assertTrue(ApplicationKernel::isInitialized()); + $this->assertFalse(EmptyKernel::isInitialized()); + EmptyKernel::init(); + $this->assertTrue(EmptyKernel::isInitialized()); $this->assertFileExists(Util::CACHE_STATES_FILE); } diff --git a/tests/Functional/ChangedClassTest.php b/tests/Functional/Target/ChangedClass/ChangedClassTest.php similarity index 58% rename from tests/Functional/ChangedClassTest.php rename to tests/Functional/Target/ChangedClass/ChangedClassTest.php index 6947d41..dd9ba52 100644 --- a/tests/Functional/ChangedClassTest.php +++ b/tests/Functional/Target/ChangedClass/ChangedClassTest.php @@ -1,10 +1,8 @@ assertWillBeTransformed($class); $changedClass = new $class(); @@ -31,30 +29,28 @@ public function testChangedClass(): void 'Hello World from Code Transformer!', $changedClass->test(), ); + } + public function testCachedChangedClass(): void + { // Change class - $classFilePath = Util::CLASSES_TO_TRANSFORM_DIR . '/ChangedClass.php'; - $classFileContent = Filesystem::readFile($classFilePath); - $tmpPath = Util::TMP_DIR . '/ChangedClass.php'; - Filesystem::writeFile($tmpPath, $classFileContent); + $classFilePath = Util::getFilePath(Target::class); + $originalClassFileContent = Filesystem::readFile($classFilePath); $changedFileContent = str_replace( 'Hello World!', 'Hello Changed World!', - $classFileContent, + $originalClassFileContent, ); sleep(1); Filesystem::writeFile($classFilePath, $changedFileContent); - } - public function testCachedChangedClass(): void - { $exception = null; try { - ApplicationKernel::init(); + Kernel::init(); - $class = ChangedClass::class; + $class = Target::class; $this->assertWillBeTransformed($class); $classInstance = new $class(); @@ -67,15 +63,7 @@ public function testCachedChangedClass(): void } // Restore class - $tmpPath = Util::TMP_DIR . '/ChangedClass.php'; - if (!file_exists($tmpPath)) { - return; - } - - $tmpFileContent = Filesystem::readFile($tmpPath); - $classFilePath = Util::CLASSES_TO_TRANSFORM_DIR . '/ChangedClass.php'; - - Filesystem::writeFile($classFilePath, $tmpFileContent); + Filesystem::writeFile($classFilePath, $originalClassFileContent); if ($exception !== null) { /** @noinspection PhpUnhandledExceptionInspection */ diff --git a/tests/Functional/Target/ChangedClass/Kernel.php b/tests/Functional/Target/ChangedClass/Kernel.php new file mode 100644 index 0000000..4667028 --- /dev/null +++ b/tests/Functional/Target/ChangedClass/Kernel.php @@ -0,0 +1,15 @@ +assertWillBeTransformed($class); new $class(); @@ -27,15 +25,15 @@ public function testNoChangesClass(): void public function testCachedNoChangesClass(): void { - ApplicationKernel::init(); + Kernel::init(); - $class = NoChangesClass::class; + $class = Target::class; $this->assertTransformerNotApplied($class); new $class(); - $originalFilePath = Util::CLASSES_TO_TRANSFORM_DIR . '/NoChangesClass.php'; - $cachedFilePath = Util::CACHED_CLASSES_TO_TRANSFORM_DIR . '/NoChangesClass.php'; + $originalFilePath = Util::getFilePath(Target::class); + $cachedFilePath = Util::getTransformedFilePath(Target::class); $this->assertFileExists($originalFilePath); $this->assertFileDoesNotExist($cachedFilePath); } diff --git a/tests/Functional/Target/NoChanges/Target.php b/tests/Functional/Target/NoChanges/Target.php new file mode 100644 index 0000000..adf09f0 --- /dev/null +++ b/tests/Functional/Target/NoChanges/Target.php @@ -0,0 +1,7 @@ +expectException(TransformerNotFoundException::class); + + TransformerDoesNotExistKernel::init(); + } + + /** + * @see InvalidTransformerTypeKernel + */ + public function testInvalidTransformerType(): void + { + Util::clearCache(); + + $this->expectException(InvalidTransformerClassNameException::class); + + InvalidTransformerTypeKernel::init(); + } + + /** + * @see TransformerDoesNotExtendTransformerKernel + */ + public function testTransformerDoesNotExtendTransformer(): void + { + Util::clearCache(); + + $this->expectException(InvalidTransformerClassException::class); + + TransformerDoesNotExtendTransformerKernel::init(); + } +} diff --git a/tests/Functional/Transformer/InvalidTransformerClass/Kernel/InvalidTransformerTypeKernel.php b/tests/Functional/Transformer/InvalidTransformerClass/Kernel/InvalidTransformerTypeKernel.php new file mode 100644 index 0000000..b07fa30 --- /dev/null +++ b/tests/Functional/Transformer/InvalidTransformerClass/Kernel/InvalidTransformerTypeKernel.php @@ -0,0 +1,12 @@ +assertWillBeTransformed($class); $multipleTransformersClass = new $class(); @@ -37,9 +35,9 @@ public function testMultipleTransformers(): void public function testCachedMultipleTransformers(): void { - ApplicationKernel::init(); + Kernel::init(); - $class = MultipleTransformersClass::class; + $class = TargetClass::class; $this->assertTransformerLoadedFromCache($class); $multipleTransformersClass = new $class(); diff --git a/tests/Stubs/ClassesToTransform/MultipleTransformersClass.php b/tests/Functional/Transformer/MultipleTransformer/TargetClass.php similarity index 60% rename from tests/Stubs/ClassesToTransform/MultipleTransformersClass.php rename to tests/Functional/Transformer/MultipleTransformer/TargetClass.php index c5b9079..4cb8be8 100644 --- a/tests/Stubs/ClassesToTransform/MultipleTransformersClass.php +++ b/tests/Functional/Transformer/MultipleTransformer/TargetClass.php @@ -1,8 +1,8 @@ expectException(SyntaxError::class); /** @noinspection PhpUnusedLocalVariableInspection */ - $syntaxErrorClass = new SyntaxErrorClass(); + $syntaxErrorClass = new Target(); } } diff --git a/tests/Functional/Transformer/SyntaxErrorInTransformedClass/Target.php b/tests/Functional/Transformer/SyntaxErrorInTransformedClass/Target.php new file mode 100644 index 0000000..74cb482 --- /dev/null +++ b/tests/Functional/Transformer/SyntaxErrorInTransformedClass/Target.php @@ -0,0 +1,7 @@ +append('}'); $refClass = $code->getReflectionClass(); - assert($refClass->getName() === SyntaxErrorClass::class); + assert($refClass->getName() === Target::class); $className = $code->getClassName(); assert($className === 'SyntaxErrorClass'); diff --git a/tests/Stubs/ClassesToTransform/ChangedClass.php b/tests/Stubs/ClassesToTransform/ChangedClass.php deleted file mode 100644 index b7f6e90..0000000 --- a/tests/Stubs/ClassesToTransform/ChangedClass.php +++ /dev/null @@ -1,11 +0,0 @@ -transformerManager->addTransformers($this->addedTransformers); - } -} diff --git a/tests/Stubs/Kernel/ApplicationKernel.php b/tests/Stubs/Kernel/ApplicationKernel.php deleted file mode 100644 index 9546482..0000000 --- a/tests/Stubs/Kernel/ApplicationKernel.php +++ /dev/null @@ -1,28 +0,0 @@ -append('// Hello from Code Transformer!'); - } -} diff --git a/tests/Stubs/Transformer/NoChangesTransformer.php b/tests/Stubs/Transformer/NoChangesTransformer.php deleted file mode 100644 index d5a9150..0000000 --- a/tests/Stubs/Transformer/NoChangesTransformer.php +++ /dev/null @@ -1,20 +0,0 @@ -