/** * @dataProvider expressions */ public function testVisit($expression, $compiled) { $visitor = new CompileMethodMatchVisitor(); $lexer = new Lexer(new StringInputStream($expression)); $tree = $lexer->buildTree(); $tree->acceptVisitor($visitor); $this->assertEquals($compiled, $visitor->getCompiled()); }
/** * @dataProvider invalidExpressions */ public function testParse_invalid($expression, $exMessage) { try { $lexer = new Lexer(new StringInputStream($expression)); $lexer->buildTree(); $this->fail('Exception expected'); } catch (Exception $ex) { $this->assertEquals($ex->getMessage(), $exMessage); } }
private function doCompile(PointcutExpression $pointcutExpression, $matcherFQNClass) { $visitor = new CompileMethodMatchVisitor(); $lexer = new Lexer(new StringInputStream($pointcutExpression->getExpression())); $tree = $lexer->buildTree(); $tree->acceptVisitor($visitor); $compiledExpression = $visitor->getCompiled(); $compiled = '<?php' . "\n"; $compiled .= 'namespace ' . $this->matcherNamespace . ";\n"; $compiled .= 'class ' . $matcherFQNClass . ' implements \\' . MethodMatcher::class . " {\n"; $compiled .= ' private $annotationResolver;' . "\n"; $compiled .= ' public function __construct(\\' . AnnotationResolver::class . ' $annotationResolver) {' . "\n"; $compiled .= ' $this->annotationResolver = $annotationResolver;' . "\n"; $compiled .= ' }' . "\n"; $compiled .= ' public function match(\\ReflectionMethod $reflectionMethod) {' . "\n"; $compiled .= ' return ' . $compiledExpression . ";\n"; $compiled .= ' }' . "\n"; $compiled .= '}' . "\n"; return $compiled; }