diff --git a/lib/autoloader.php b/lib/autoloader.php index d84924d596..9615838a9a 100644 --- a/lib/autoloader.php +++ b/lib/autoloader.php @@ -78,14 +78,15 @@ class Autoloader { } elseif (strpos($class, 'OC\\') === 0) { $paths[] = strtolower(str_replace('\\', '/', substr($class, 3)) . '.php'); } elseif (strpos($class, 'OCP\\') === 0) { - $paths[] = 'public/' . strtolower(str_replace('\\', '/', substr($class, 3)) . '.php'); + $paths[] = 'public/' . strtolower(str_replace('\\', '/', substr($class, 4)) . '.php'); } elseif (strpos($class, 'OCA\\') === 0) { + list(, $app, $rest) = explode('\\', $class, 3); + $app = strtolower($app); foreach (\OC::$APPSROOTS as $appDir) { - list(, $app,) = explode('\\', $class); - if (stream_resolve_include_path($appDir['path'] . '/' . strtolower($app))) { - $paths[] = $appDir['path'] . '/' . strtolower(str_replace('\\', '/', substr($class, 4)) . '.php'); + if (stream_resolve_include_path($appDir['path'] . '/' . $app)) { + $paths[] = $appDir['path'] . '/' . $app . '/' . strtolower(str_replace('\\', '/', $rest) . '.php'); // If not found in the root of the app directory, insert '/lib' after app id and try again. - $paths[] = $appDir['path'] . '/lib/' . strtolower(str_replace('\\', '/', substr($class, 4)) . '.php'); + $paths[] = $appDir['path'] . '/' . $app . '/lib/' . strtolower(str_replace('\\', '/', $rest) . '.php'); } } } elseif (strpos($class, 'Test_') === 0) { diff --git a/tests/lib/autoloader.php b/tests/lib/autoloader.php index d9fc016adf..0e7d606ccf 100644 --- a/tests/lib/autoloader.php +++ b/tests/lib/autoloader.php @@ -45,23 +45,30 @@ class AutoLoader extends \PHPUnit_Framework_TestCase { $this->assertEquals(array('foo/Foo/Bar.php'), $this->loader->findClass('Foo_Bar')); } - public function loadTestNamespace() { - $this->assertEquals(array('test/foo/bar.php'), $this->loader->findClass('Test\Foo\Bar')); + public function testLoadTestNamespace() { + $this->assertEquals(array('tests/lib/foo/bar.php'), $this->loader->findClass('Test\Foo\Bar')); } - public function loadTest() { - $this->assertEquals(array('test/foo/bar.php'), $this->loader->findClass('Test_Foo_Bar')); + public function testLoadTest() { + $this->assertEquals(array('tests/lib/foo/bar.php'), $this->loader->findClass('Test_Foo_Bar')); } - public function loadCoreNamespace() { - $this->assertEquals(array('lib/foo/bar.php'), $this->loader->findClass('OC\Foo\Bar')); + public function testLoadCoreNamespace() { + $this->assertEquals(array('foo/bar.php'), $this->loader->findClass('OC\Foo\Bar')); } - public function loadCore() { - $this->assertEquals(array('lib/legacy/foo/bar.php', 'lib/foo/bar.php'), $this->loader->findClass('OC_Foo_Bar')); + public function testLoadCore() { + $this->assertEquals(array('legacy/foo/bar.php', 'foo/bar.php'), $this->loader->findClass('OC_Foo_Bar')); } - public function loadPublicNamespace() { - $this->assertEquals(array('lib/public/foo/bar.php'), $this->loader->findClass('OCP\Foo\Bar')); + public function testLoadPublicNamespace() { + $this->assertEquals(array('public/foo/bar.php'), $this->loader->findClass('OCP\Foo\Bar')); + } + + public function testLoadAppNamespace() { + $result = $this->loader->findClass('OCA\Files\Foobar'); + $this->assertEquals(2, count($result)); + $this->assertStringEndsWith('apps/files/foobar.php', $result[0]); + $this->assertStringEndsWith('apps/files/lib/foobar.php', $result[1]); } }