/** * @dataProvider visitFunctionWithPhp7FeaturesDataProvider */ public function testVisitFunctionWithPhp7Features($filename, $function) { if (PHP_VERSION_ID < 70000) { $this->markTestSkipped('Test only valid for PHP >=7.0'); } $visitor = new DefaultVisitor(); $visitor->visitFunction($function); $this->assertEquals($this->getContent($filename . '.php'), $visitor->getContent()); }
public function testVisitFunction() { $writer = new Writer(); $function = new PhpFunction(); $function->setName('foo')->addParameter(PhpParameter::create('a'))->addParameter(PhpParameter::create('b'))->setBody($writer->writeln('if ($a === $b) {')->indent()->writeln('throw new \\InvalidArgumentException(\'$a is not allowed to be the same as $b.\');')->outdent()->write("}\n\n")->write('return $b;')->getContent()); $visitor = new DefaultVisitor(); $visitor->visitFunction($function); $this->assertEquals($this->getContent('a_b_function.php'), $visitor->getContent()); }
protected function execute(InputInterface $input, OutputInterface $output) { $pieces = array(); /** @var $dialog \Symfony\Component\Console\Helper\DialogHelper */ $dialog = $this->getHelper('dialog'); $end = $input->getArgument('end-line'); $start = $input->getArgument('start-line'); $lines = file($input->getArgument('filename')); $slice = array_slice($lines, $start - 1, $end - $start + 1); $slice = join("", $slice); if ($input->getOption('pieces')) { // only needed when we assign pieces $output->writeln('<comment>Analyzing slice:</comment>'); $output->writeln($slice); list($pieces, $slice) = $this->processPieces($output, $dialog, $slice); } $code = new Writer(); if (!$input->getOption('function')) { foreach (array_keys($pieces) as $piece) { $code->writeln("{$piece} = null;"); } } $variable = $input->getOption('variable'); if ($input->getOption('heredoc')) { $code->writeln($this->escapeHeredoc($variable, $slice)); } else { $code->writeln($this->escapeArray($variable, $slice)); } if (null !== $input->getOption('function')) { $function = new PhpFunction($input->getOption('function')); foreach ($pieces as $piece) { $function->addParameter(new PhpParameter($piece)); } $code->writeln("return \${$variable};"); $function->setBody($code->getContent()); $visitor = new DefaultVisitor(); $visitor->visitFunction($function); $content = $visitor->getContent(); $content = preg_replace_callback('/EOF\\n.*EOF;\\n/ms', function ($m) { return preg_replace('/^\\ /ms', '', $m[0]); }, $content); } else { $content = $code->getContent(); } if ($input->getOption('pieces')) { $content = str_replace(md5(__CLASS__), '$', $content); } $output->writeln("\n{$content}"); if ($input->getOption('copy')) { $content = escapeshellarg(strtr($content, array("\t" => '\\t', '\\' => '\\\\'))); `echo {$content} | pbcopy`; } }
public function testVisitMethodWithCallable() { if (PHP_VERSION_ID < 50400) { $this->markTestSkipped('`callable` is only supported in PHP >=5.4.0'); } $method = new PhpMethod(); $parameter = new PhpParameter('bar'); $parameter->setType('callable'); $method->setName('foo')->addParameter($parameter); $visitor = new DefaultVisitor(); $visitor->visitMethod($method); $this->assertEquals($this->getContent('callable_parameter.php'), $visitor->getContent()); }
/** * @param PhpClass $class * * @return string */ public function generate(PhpClass $class) { $dispatcherContainer = new PhpProperty('dispatcher'); $dispatcherContainer->setVisibility('protected'); $class->setProperty($dispatcherContainer); try { $method = $class->getMethod('setDispatcher'); $method->setBody('$this->dispatcher=$dispatcher;'); } catch (\Exception $e) { } $this->generateAopMethodProxy($class, PhpClass::fromReflection(new \ReflectionClass($class->getParentClassName()))); $this->visitor->reset(); $this->navigator->accept($this->visitor, $class); return $this->visitor->getContent(); }