Skip to content

Commit 2d388ad

Browse files
authored
Merge pull request #6 from php-fedora/issue5
Handle namespaced classes with PSR-0, fix #5
2 parents 816e4e5 + 5b81040 commit 2d388ad

File tree

2 files changed

+39
-5
lines changed

2 files changed

+39
-5
lines changed

src/Autoload.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -251,20 +251,19 @@ public static function findFile($class)
251251
// PSR-0
252252
if (count(static::$psr0)) {
253253
$pos = strrpos($class, '\\');
254-
$file = '';
254+
$file = $namespace = '';
255255
if ($pos) {
256-
$namespace = substr($class, 0, $pos);
256+
$namespace = substr($class, 0, $pos + 1);
257257
$class = substr($class, $pos + 1);
258-
$file = str_replace('\\', DIRECTORY_SEPARATOR, $namespace).DIRECTORY_SEPARATOR;
258+
$file = str_replace('\\', DIRECTORY_SEPARATOR, $namespace);
259259
}
260260
$file .= str_replace('_', DIRECTORY_SEPARATOR, $class).'.php';
261261

262262
// NOTE: Cannot use `foreach (static::$psr0 as list($prefix, $path))`
263263
// for PHP < 5.5 compatibility.
264264
foreach (static::$psr0 as $psr0) {
265265
list($prefix, $path) = $psr0;
266-
267-
if (empty($prefix) || 0 === strpos($class, $prefix)) {
266+
if (empty($prefix) || 0 === strpos($namespace.$class, $prefix)) {
268267
if (file_exists($path.$file)) {
269268
return $path.$file;
270269
}

tests/AutoloadTest.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
class AutoloadTest extends \PHPUnit_Framework_TestCase
1515
{
1616
/**
17+
* @group psr4
1718
* @covers Fedora::Autoloader::Autoload::addPsr4
1819
**/
1920
public function testAddPsr4()
@@ -24,6 +25,7 @@ public function testAddPsr4()
2425
}
2526

2627
/**
28+
* @group psr4
2729
* @covers Fedora::Autoloader::Autoload::addPsr4
2830
**/
2931
public function testAddPsr4Order()
@@ -37,6 +39,7 @@ public function testAddPsr4Order()
3739
}
3840

3941
/**
42+
* @group classmap
4043
* @covers Fedora::Autoloader::Autoload::addClassMap
4144
**/
4245
public function testAddClassMap()
@@ -52,6 +55,7 @@ public function testAddClassMap()
5255
}
5356

5457
/**
58+
* @group classmap
5559
* @covers Fedora::Autoloader::Autoload::addClassMap
5660
**/
5761
public function testAddClassMapTemplate()
@@ -62,6 +66,7 @@ public function testAddClassMapTemplate()
6266
}
6367

6468
/**
69+
* @group classmap
6570
* @covers Fedora::Autoloader::Autoload::addClassMap
6671
**/
6772
public function testAddClassMapLowerCase()
@@ -72,6 +77,7 @@ public function testAddClassMapLowerCase()
7277
}
7378

7479
/**
80+
* @group classmap
7581
* @covers Fedora::Autoloader::Autoload::addClassMap
7682
**/
7783
public function testAddClassMapTemplateOrder()
@@ -85,6 +91,7 @@ public function testAddClassMapTemplateOrder()
8591
}
8692

8793
/**
94+
* @group classmap
8895
* @covers Fedora::Autoloader::Autoload::addClassMap
8996
**/
9097
public function testAddClassMapTemplateOrderBis()
@@ -104,6 +111,7 @@ public function testAddClassMapTemplateOrderBis()
104111
}
105112

106113
/**
114+
* @group psr0
107115
* @covers Fedora::Autoloader::Autoload::addIncludePath
108116
**/
109117
public function testAddIncludePath()
@@ -129,6 +137,7 @@ public function testAddIncludePath()
129137
}
130138

131139
/**
140+
* @group psr0
132141
* @covers Fedora::Autoloader::Autoload::addPsr0
133142
**/
134143
public function testAddPsr0Simple()
@@ -145,4 +154,30 @@ public function testAddPsr0Simple()
145154
$this->assertTrue(class_exists('One\\Two\\Foo'));
146155
$this->assertTrue(class_exists('One_Two\\Foo'));
147156
}
157+
158+
/**
159+
* @group psr0
160+
* @covers Fedora::Autoloader::Autoload::addPsr0
161+
**/
162+
public function testAddPsr0ns1()
163+
{
164+
$this->assertFalse(class_exists('One\\Two\\Foo'));
165+
166+
Autoload::addPsr0('One\\', __DIR__.'/fixtures/PSR0');
167+
168+
$this->assertTrue(class_exists('One\\Two\\Foo'));
169+
}
170+
171+
/**
172+
* @group psr0
173+
* @covers Fedora::Autoloader::Autoload::addPsr0
174+
**/
175+
public function testAddPsr0ns2()
176+
{
177+
$this->assertFalse(class_exists('One\\Two\\Foo'));
178+
179+
Autoload::addPsr0('One\\Two\\', __DIR__.'/fixtures/PSR0');
180+
181+
$this->assertTrue(class_exists('One\\Two\\Foo'));
182+
}
148183
}

0 commit comments

Comments
 (0)