expect($result)->toBe($expected); }); it("adds ` = NULL` to optional parameter in PHP core method", function () { skipIf(defined('HHVM_VERSION')); $result = Stub::generate(['class' => 'Kahlan\\Spec\\Plugin\\Stub\\Stub', 'extends' => 'LogicException', 'layer' => true]); $expected = <<<EOD <?php namespace Kahlan\\\\Spec\\\\Plugin\\\\Stub; class Stub extends \\\\LogicException { public function __construct\\(\\\$message = NULL, \\\$code = NULL, \\\$previous = NULL\\) EOD; expect($result)->toMatch('~' . $expected . '~i'); }); it("generates code without PHP tags", function () { $result = Stub::generate(['class' => 'Kahlan\\Spec\\Plugin\\Stub\\Stub', 'magicMethods' => false, 'openTag' => false, 'closeTag' => false]); $expected = <<<EOD namespace Kahlan\\Spec\\Plugin\\Stub; class Stub { } EOD; expect($result)->toBe($expected); }); }); });
/** * Helper for `Layer::process()`. * * @param array $nodes A array of nodes to patch. */ protected function _processTree($nodes) { foreach ($nodes as $node) { if ($node->processable && $node->type === 'class' && $node->extends) { $namespace = $node->namespace->name . '\\'; $parent = $node->extends; $extends = ltrim($parent[0] === '\\' ? $parent : $namespace . $parent, '\\'); if (!isset($this->_override[$extends])) { continue; } $layerClass = $node->name . $this->_suffix; $node->extends = $layerClass; $pattern = preg_quote($parent); $node->body = preg_replace("~(extends\\s+){$pattern}~", "\\1{$layerClass}", $node->body); $code = Stub::generate(['class' => $layerClass, 'extends' => $extends, 'openTag' => false, 'closeTag' => false, 'layer' => true]); $parser = $this->_classes['parser']; $nodes = $parser::parse($code, ['php' => true]); $node->close .= str_replace("\n", '', $parser::unparse($this->_pointcut->process($nodes))); } elseif (count($node->tree)) { $this->_processTree($node->tree); } } }