Browse Source

Added tests for include path flag

Pierre du Plessis 12 years ago
parent
commit
255c0be7fc

+ 24 - 5
tests/Composer/Test/Autoload/AutoloadGeneratorTest.php

@@ -55,11 +55,6 @@ class AutoloadGeneratorTest extends TestCase
                 return $that->vendorDir;
             }));
 
-        $this->config->expects($this->at(2))
-            ->method('get')
-            ->with($this->equalTo('use-include-path'))
-            ->will($this->returnValue(false));
-
         $this->dir = getcwd();
         chdir($this->workingDir);
 
@@ -583,6 +578,30 @@ EOF;
 
         $this->assertFalse(file_exists($this->vendorDir."/composer/include_paths.php"));
     }
+	
+	
+	public function testUseGlobalIncludePath()
+    {
+        $package = new Package('a', '1.0', '1.0');
+        $package->setAutoload(array(
+            'psr-0' => array('Main\\Foo' => '', 'Main\\Bar' => ''),
+        ));
+        $package->setTargetDir('Main/Foo/');
+
+        $this->repository->expects($this->once())
+            ->method('getPackages')
+            ->will($this->returnValue(array()));
+			
+		$this->config->expects($this->at(2))
+            ->method('get')
+            ->with($this->equalTo('use-include-path'))
+            ->will($this->returnValue(true));
+
+        $this->fs->ensureDirectoryExists($this->vendorDir.'/a');
+
+        $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, 'IncludePath');
+        $this->assertFileEquals(__DIR__.'/Fixtures/autoload_real_include_path.php', $this->vendorDir.'/composer/autoload_real.php');
+    }
 
     private function createClassFile($basedir)
     {

+ 64 - 0
tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php

@@ -0,0 +1,64 @@
+<?php
+
+// autoload_real.php generated by Composer
+
+class ComposerAutoloaderInitIncludePath
+{
+    private static $loader;
+
+    public static function loadClassLoader($class)
+    {
+        if ('Composer\Autoload\ClassLoader' === $class) {
+            require __DIR__ . '/ClassLoader.php';
+        }
+    }
+
+    public static function getLoader()
+    {
+        if (null !== self::$loader) {
+            return self::$loader;
+        }
+
+        spl_autoload_register(array('ComposerAutoloaderInitIncludePath', 'loadClassLoader'));
+        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+        spl_autoload_unregister(array('ComposerAutoloaderInitIncludePath', 'loadClassLoader'));
+
+        $vendorDir = dirname(__DIR__);
+        $baseDir = dirname($vendorDir);
+
+        $map = require __DIR__ . '/autoload_namespaces.php';
+        foreach ($map as $namespace => $path) {
+            $loader->add($namespace, $path);
+        }
+
+        $classMap = require __DIR__ . '/autoload_classmap.php';
+        if ($classMap) {
+            $loader->addClassMap($classMap);
+        }
+
+        $loader->setUseIncludePath(true);
+        spl_autoload_register(array('ComposerAutoloaderInitIncludePath', 'autoload'), true, true);
+
+        $loader->register(true);
+
+        return $loader;
+    }
+
+    public static function autoload($class)
+    {
+        $dir = dirname(dirname(__DIR__)) . '/';
+        $prefixes = array('Main\\Foo', 'Main\\Bar');
+        foreach ($prefixes as $prefix) {
+            if (0 !== strpos($class, $prefix)) {
+                continue;
+            }
+            $path = $dir . implode('/', array_slice(explode('\\', $class), 2)).'.php';
+            if (!$path = stream_resolve_include_path($path)) {
+                return false;
+            }
+            require $path;
+
+            return true;
+        }
+    }
+}