private function getExtractCode() { $extractCode = array('constants' => array(), 'class' => array()); $compactor = new Php(); $code = file_get_contents(__DIR__ . '/../../../../lib/CmPayments/Crate/Extract.php'); $code = $compactor->compact($code); $code = preg_replace('/\\n+/', "\n", $code); $code = explode("\n", $code); $code = array_slice($code, 2); foreach ($code as $i => $line) { if (0 === strpos($line, 'use') && false === strpos($line, '\\')) { unset($code[$i]); } elseif (0 === strpos($line, 'define')) { $extractCode['constants'][] = $line; } else { $extractCode['class'][] = $line; } } return $extractCode; }
public function testIssue14() { $original = <<<CODE <?php // autoload_real.php @generated by Composer /** * @author Made Up <*****@*****.**> */ class ComposerAutoloaderInitc22fe6e3e5ad79bad24655b3e52999df { private static \$loader; /** @inline annotation */ 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('ComposerAutoloaderInitc22fe6e3e5ad79bad24655b3e52999df', 'loadClassLoader'), true, true); self::\$loader = \$loader = new \\Composer\\Autoload\\ClassLoader(); spl_autoload_unregister(array('ComposerAutoloaderInitc22fe6e3e5ad79bad24655b3e52999df', 'loadClassLoader')); \$vendorDir = dirname(__DIR__); \$baseDir = dirname(\$vendorDir); \$includePaths = require __DIR__ . '/include_paths.php'; array_push(\$includePaths, get_include_path()); set_include_path(join(PATH_SEPARATOR, \$includePaths)); \$map = require __DIR__ . '/autoload_namespaces.php'; foreach (\$map as \$namespace => \$path) { \$loader->set(\$namespace, \$path); } \$map = require __DIR__ . '/autoload_psr4.php'; foreach (\$map as \$namespace => \$path) { \$loader->setPsr4(\$namespace, \$path); } \$classMap = require __DIR__ . '/autoload_classmap.php'; if (\$classMap) { \$loader->addClassMap(\$classMap); } \$loader->register(true); return \$loader; } } CODE; $expected = <<<CODE <?php class ComposerAutoloaderInitc22fe6e3e5ad79bad24655b3e52999df { 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('ComposerAutoloaderInitc22fe6e3e5ad79bad24655b3e52999df', 'loadClassLoader'), true, true); self::\$loader = \$loader = new \\Composer\\Autoload\\ClassLoader(); spl_autoload_unregister(array('ComposerAutoloaderInitc22fe6e3e5ad79bad24655b3e52999df', 'loadClassLoader')); \$vendorDir = dirname(__DIR__); \$baseDir = dirname(\$vendorDir); \$includePaths = require __DIR__ . '/include_paths.php'; array_push(\$includePaths, get_include_path()); set_include_path(join(PATH_SEPARATOR, \$includePaths)); \$map = require __DIR__ . '/autoload_namespaces.php'; foreach (\$map as \$namespace => \$path) { \$loader->set(\$namespace, \$path); } \$map = require __DIR__ . '/autoload_psr4.php'; foreach (\$map as \$namespace => \$path) { \$loader->setPsr4(\$namespace, \$path); } \$classMap = require __DIR__ . '/autoload_classmap.php'; if (\$classMap) { \$loader->addClassMap(\$classMap); } \$loader->register(true); return \$loader; } } CODE; $tokenizer = new Tokenizer(); $tokenizer->ignore(array('author', 'inline')); $this->php->setTokenizer($tokenizer); $this->assertEquals($expected, $this->php->compact($original)); }
/** * Embed the Extract class in the stub? * * @param boolean $extract Embed the class? * @param boolean $force Force the use of the class? * * @return StubGenerator The stub generator. */ public function extract($extract, $force = false) { $this->extract = $extract; $this->extractForce = $force; if ($extract) { $this->extractCode = array('constants' => array(), 'class' => array()); $compactor = new Php(); $code = file_get_contents(__DIR__ . '/Extract.php'); $code = $compactor->compact($code); $code = preg_replace('/\\n+/', "\n", $code); $code = explode("\n", $code); $code = array_slice($code, 2); foreach ($code as $i => $line) { if (0 === strpos($line, 'use') && false === strpos($line, '\\')) { unset($code[$i]); } elseif (0 === strpos($line, 'define')) { $this->extractCode['constants'][] = $line; } else { $this->extractCode['class'][] = $line; } } } return $this; }