Skip to content

Commit e157edd

Browse files
authored
Merge pull request #28 from helhum/add-tests-for-edge-case
2 parents ac9eed0 + edc0630 commit e157edd

File tree

4 files changed

+28
-15
lines changed

4 files changed

+28
-15
lines changed

.github/workflows/tests.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
name: Tests
22

3-
on:
4-
push:
5-
pull_request:
6-
schedule:
7-
- cron: '13 4 * * *'
3+
on: [ push, pull_request ]
84

95
jobs:
106
build:

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1+
/.ddev
12
/.php_cs.cache
23
/.idea
3-
/vendor
44
/composer.lock
5+
/vendor

src/ClassAliasLoader.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,9 @@ public function loadClassWithAlias($className)
120120
{
121121
$originalClassName = $this->getOriginalClassName($className);
122122

123-
return $originalClassName ? $this->loadOriginalClassAndSetAliases($originalClassName) : $this->loadClass($className);
123+
return $originalClassName
124+
? $this->loadOriginalClassAndSetAliases($originalClassName)
125+
: $this->loadClass($className);
124126
}
125127

126128
/**
@@ -149,19 +151,19 @@ protected function getOriginalClassName($aliasOrClassName)
149151
{
150152
// Is an original class which has an alias
151153
if (array_key_exists($aliasOrClassName, $this->aliasMap['classNameToAliasMapping'])) {
152-
if ($this->aliasMap['classNameToAliasMapping'][$aliasOrClassName] === null) {
153-
return null;
154-
}
155-
return $aliasOrClassName;
154+
return $this->aliasMap['classNameToAliasMapping'][$aliasOrClassName] === array()
155+
? null
156+
: $aliasOrClassName
157+
;
156158
}
157-
158-
// Is an alias (we're graceful regarding casing for alias definitions)
159+
// Is an alias (we're graceful ignoring casing for alias definitions)
159160
$lowerCasedClassName = strtolower($aliasOrClassName);
160161
if (array_key_exists($lowerCasedClassName, $this->aliasMap['aliasToClassNameMapping'])) {
161162
return $this->aliasMap['aliasToClassNameMapping'][$lowerCasedClassName];
162163
}
163164
// No alias registered for this class name, return and remember that info
164-
return $this->aliasMap['classNameToAliasMapping'][$aliasOrClassName] = null;
165+
$this->aliasMap['classNameToAliasMapping'][$aliasOrClassName] = array();
166+
return null;
165167
}
166168

167169
/**

tests/Unit/ClassAliasLoaderTest.php

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
*/
1212

1313
use Composer\Autoload\ClassLoader as ComposerClassLoader;
14+
use PHPUnit\Framework\MockObject\MockObject;
1415
use TYPO3\ClassAliasLoader\ClassAliasLoader;
1516

1617
/**
@@ -24,7 +25,7 @@ class ClassAliasLoaderTest extends BaseTestCase
2425
protected $subject;
2526

2627
/**
27-
* @var ComposerClassLoader|\PHPUnit_Framework_MockObject_MockObject
28+
* @var ComposerClassLoader|MockObject|PHPUnit_Framework_MockObject_MockObject
2829
*/
2930
protected $composerClassLoaderMock;
3031

@@ -97,6 +98,19 @@ public function loadsClassIfNoAliasIsFound()
9798
$this->assertTrue(class_exists($testClassName, false));
9899
}
99100

101+
/**
102+
* @test
103+
*/
104+
public function callingLoadClassMultipleTimesInEdgeCasesWillStillWork()
105+
{
106+
$this->composerClassLoaderMock
107+
->expects($this->exactly(2))
108+
->method('loadClass')
109+
->willReturnOnConsecutiveCalls(false, true);
110+
$this->assertFalse($this->subject->loadClassWithAlias('TestClass'));
111+
$this->assertTrue($this->subject->loadClassWithAlias('TestClass'));
112+
}
113+
100114
/**
101115
* @test
102116
*/

0 commit comments

Comments
 (0)