diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1654b13..0a94067 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,10 +1,6 @@ name: Tests -on: - push: - pull_request: - schedule: - - cron: '13 4 * * *' +on: [ push, pull_request ] jobs: build: diff --git a/.gitignore b/.gitignore index 2c85b43..5fe6285 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ +/.ddev /.php_cs.cache /.idea -/vendor /composer.lock +/vendor diff --git a/src/ClassAliasLoader.php b/src/ClassAliasLoader.php index aabfa13..24be55c 100644 --- a/src/ClassAliasLoader.php +++ b/src/ClassAliasLoader.php @@ -120,7 +120,9 @@ public function loadClassWithAlias($className) { $originalClassName = $this->getOriginalClassName($className); - return $originalClassName ? $this->loadOriginalClassAndSetAliases($originalClassName) : $this->loadClass($className); + return $originalClassName + ? $this->loadOriginalClassAndSetAliases($originalClassName) + : $this->loadClass($className); } /** @@ -149,19 +151,19 @@ protected function getOriginalClassName($aliasOrClassName) { // Is an original class which has an alias if (array_key_exists($aliasOrClassName, $this->aliasMap['classNameToAliasMapping'])) { - if ($this->aliasMap['classNameToAliasMapping'][$aliasOrClassName] === null) { - return null; - } - return $aliasOrClassName; + return $this->aliasMap['classNameToAliasMapping'][$aliasOrClassName] === array() + ? null + : $aliasOrClassName + ; } - - // Is an alias (we're graceful regarding casing for alias definitions) + // Is an alias (we're graceful ignoring casing for alias definitions) $lowerCasedClassName = strtolower($aliasOrClassName); if (array_key_exists($lowerCasedClassName, $this->aliasMap['aliasToClassNameMapping'])) { return $this->aliasMap['aliasToClassNameMapping'][$lowerCasedClassName]; } // No alias registered for this class name, return and remember that info - return $this->aliasMap['classNameToAliasMapping'][$aliasOrClassName] = null; + $this->aliasMap['classNameToAliasMapping'][$aliasOrClassName] = array(); + return null; } /** diff --git a/tests/Unit/ClassAliasLoaderTest.php b/tests/Unit/ClassAliasLoaderTest.php index 332c231..e27ba9c 100644 --- a/tests/Unit/ClassAliasLoaderTest.php +++ b/tests/Unit/ClassAliasLoaderTest.php @@ -11,6 +11,7 @@ */ use Composer\Autoload\ClassLoader as ComposerClassLoader; +use PHPUnit\Framework\MockObject\MockObject; use TYPO3\ClassAliasLoader\ClassAliasLoader; /** @@ -24,7 +25,7 @@ class ClassAliasLoaderTest extends BaseTestCase protected $subject; /** - * @var ComposerClassLoader|\PHPUnit_Framework_MockObject_MockObject + * @var ComposerClassLoader|MockObject|PHPUnit_Framework_MockObject_MockObject */ protected $composerClassLoaderMock; @@ -97,6 +98,19 @@ public function loadsClassIfNoAliasIsFound() $this->assertTrue(class_exists($testClassName, false)); } + /** + * @test + */ + public function callingLoadClassMultipleTimesInEdgeCasesWillStillWork() + { + $this->composerClassLoaderMock + ->expects($this->exactly(2)) + ->method('loadClass') + ->willReturnOnConsecutiveCalls(false, true); + $this->assertFalse($this->subject->loadClassWithAlias('TestClass')); + $this->assertTrue($this->subject->loadClassWithAlias('TestClass')); + } + /** * @test */