/** * @test * @dataProvider getSomeEvaluationTestValues * @param string $comparison * @param boolean $expected */ public function testSomeEvaluations($comparison, $expected, $variables = array()) { $parser = new BooleanParser(); $this->assertEquals($expected, BooleanNode::convertToBoolean($parser->evaluate($comparison, $variables), $this->renderingContext), 'Expression: ' . $comparison); $compiledEvaluation = $parser->compile($comparison); $functionName = 'expression_' . md5($comparison . rand(0, 100000)); eval('function ' . $functionName . '($context) {return ' . $compiledEvaluation . ';}'); $this->assertEquals($expected, BooleanNode::convertToBoolean($functionName($variables), $this->renderingContext), 'compiled Expression: ' . $compiledEvaluation); }
/** * @param RenderingContextInterface $renderingContext * @param string $expression * @param array $matches * @return mixed */ public static function evaluateExpression(RenderingContextInterface $renderingContext, $expression, array $matches) { $parts = preg_split('/([\\?:])/s', $expression); $parts = array_map(array(__CLASS__, 'trimPart'), $parts); list($check, $then, $else) = $parts; $checkResult = Parser\SyntaxTree\BooleanNode::convertToBoolean(parent::getTemplateVariableOrValueItself($check, $renderingContext)); if ($checkResult) { return parent::getTemplateVariableOrValueItself($then, $renderingContext); } else { return parent::getTemplateVariableOrValueItself($else, $renderingContext); } }
/** * @param mixed $input * @param boolean $expected * @test * @dataProvider getStandardInputTypes */ public function acceptsStandardTypesAsInput($input, $expected) { $node = new BooleanNode($input); $this->assertEquals($expected, $node->evaluate($this->renderingContext)); }
/** * @param NodeInterface $node * @param RenderingContextInterface $renderingContext * @return boolean */ public static function createFromNodeAndEvaluate(NodeInterface $node, RenderingContextInterface $renderingContext) { $booleanNode = new BooleanNode($node); return $booleanNode->evaluate($renderingContext); }
/** * @param BooleanNode $node * @return array * @see convert() */ protected function convertBooleanNode(BooleanNode $node) { $stack = $this->convertArrayNode(new ArrayNode($node->getStack())); $initializationPhpCode = '// Rendering Boolean node' . chr(10); $initializationPhpCode .= $stack['initialization'] . chr(10); $parser = new BooleanParser(); $compiledExpression = $parser->compile(BooleanNode::reconcatenateExpression($node->getStack())); $functionName = $this->variableName('expression'); $initializationPhpCode .= $functionName . ' = function($context) {return ' . $compiledExpression . ';};' . chr(10); return array('initialization' => $initializationPhpCode, 'execution' => sprintf('%s::convertToBoolean( %s( %s::gatherContext($renderingContext, %s) ), $renderingContext )', BooleanNode::class, $functionName, BooleanNode::class, $stack['execution'])); }
/** * @param BooleanNode $node * @return array * @see convert() */ protected function convertBooleanNode(BooleanNode $node) { $stack = $this->convertArrayNode(new ArrayNode($node->getStack())); $initializationPhpCode = '// Rendering Boolean node' . chr(10); $initializationPhpCode = $stack['initialization'] . chr(10); return array('initialization' => $initializationPhpCode, 'execution' => sprintf('\\TYPO3Fluid\\Fluid\\Core\\Parser\\SyntaxTree\\BooleanNode::evaluateStack($renderingContext, %s)', $stack['execution'])); }