Пример #1
0
            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);
        });
    });
});
Пример #2
0
 /**
  * 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);
         }
     }
 }