1<?php 2 3declare(strict_types=1); 4 5namespace JMS\Serializer\Tests\Expression; 6 7use JMS\Serializer\Expression\Expression; 8use JMS\Serializer\Expression\ExpressionEvaluator; 9use PHPUnit\Framework\TestCase; 10use Symfony\Component\ExpressionLanguage\ExpressionLanguage; 11 12class ExpressionEvaluatorTest extends TestCase 13{ 14 /** 15 * @var ExpressionEvaluator 16 */ 17 private $evaluator; 18 19 public function setUp() 20 { 21 $this->evaluator = new ExpressionEvaluator(new ExpressionLanguage()); 22 } 23 24 public function testEvaluate() 25 { 26 self::assertSame(3, $this->evaluator->evaluate('a + b', ['a' => 1, 'b' => 2])); 27 } 28 29 public function testParse() 30 { 31 $parsed = $this->evaluator->parse('a + b', ['a', 'b' ]); 32 self::assertInstanceOf(Expression::class, $parsed); 33 34 $evaluated = $this->evaluator->evaluateParsed($parsed, ['a' => 1, 'b' => 2]); 35 self::assertSame(3, $evaluated); 36 } 37 38 public function testParseWitPeSetVars() 39 { 40 $this->evaluator->setContextVariable('a', 1); 41 $parsed = $this->evaluator->parse('a + b', ['b']); 42 43 $evaluated = $this->evaluator->evaluateParsed($parsed, ['b' => 2]); 44 self::assertSame(3, $evaluated); 45 } 46 47 public function testParseWitPeSetVarsOverride() 48 { 49 $this->evaluator->setContextVariable('a', 1); 50 $parsed = $this->evaluator->parse('a + b', ['b']); 51 52 $evaluated = $this->evaluator->evaluateParsed($parsed, ['b' => 2, 'a' => 4]); 53 self::assertSame(6, $evaluated); 54 } 55 56 public function testCanBeSerialized() 57 { 58 $this->evaluator->setContextVariable('a', 1); 59 $parsed = $this->evaluator->parse('a + b', ['b']); 60 61 $serializedExpression = unserialize(serialize($parsed)); 62 63 $evaluated = $this->evaluator->evaluateParsed($serializedExpression, ['b' => 2]); 64 self::assertSame(3, $evaluated); 65 } 66} 67