Вход Регистрация
Файл: symfony-2.7/src/Symfony/Component/ExpressionLanguage/Tests/ExpressionLanguageTest.php
Строк: 154
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentExpressionLanguageTests;

use 
SymfonyComponentExpressionLanguageExpressionLanguage;
use 
SymfonyComponentExpressionLanguageTestsFixturesTestProvider;

class 
ExpressionLanguageTest extends PHPUnit_Framework_TestCase
{
    public function 
testCachedParse()
    {
        
$cacheMock $this->getMock('SymfonyComponentExpressionLanguageParserCacheParserCacheInterface');
        
$savedParsedExpression null;
        
$expressionLanguage = new ExpressionLanguage($cacheMock);

        
$cacheMock
            
->expects($this->exactly(2))
            ->
method('fetch')
            ->
with('1 + 1//')
            ->
will($this->returnCallback(function () use (&$savedParsedExpression) {
                return 
$savedParsedExpression;
            }))
        ;
        
$cacheMock
            
->expects($this->exactly(1))
            ->
method('save')
            ->
with('1 + 1//'$this->isInstanceOf('SymfonyComponentExpressionLanguageParsedExpression'))
            ->
will($this->returnCallback(function ($key$expression) use (&$savedParsedExpression) {
                
$savedParsedExpression $expression;
            }))
        ;

        
$parsedExpression $expressionLanguage->parse('1 + 1', array());
        
$this->assertSame($savedParsedExpression$parsedExpression);

        
$parsedExpression $expressionLanguage->parse('1 + 1', array());
        
$this->assertSame($savedParsedExpression$parsedExpression);
    }

    public function 
testConstantFunction()
    {
        
$expressionLanguage = new ExpressionLanguage();
        
$this->assertEquals(PHP_VERSION$expressionLanguage->evaluate('constant("PHP_VERSION")'));

        
$expressionLanguage = new ExpressionLanguage();
        
$this->assertEquals('constant("PHP_VERSION")'$expressionLanguage->compile('constant("PHP_VERSION")'));
    }

    public function 
testProviders()
    {
        
$expressionLanguage = new ExpressionLanguage(null, array(new TestProvider()));
        
$this->assertEquals('foo'$expressionLanguage->evaluate('identity("foo")'));
        
$this->assertEquals('"foo"'$expressionLanguage->compile('identity("foo")'));
    }

    
/**
     * @dataProvider shortCircuitProviderEvaluate
     */
    
public function testShortCircuitOperatorsEvaluate($expression, array $values$expected)
    {
        
$expressionLanguage = new ExpressionLanguage();
        
$this->assertEquals($expected$expressionLanguage->evaluate($expression$values));
    }

    
/**
     * @dataProvider shortCircuitProviderCompile
     */
    
public function testShortCircuitOperatorsCompile($expression, array $names$expected)
    {
        
$result null;
        
$expressionLanguage = new ExpressionLanguage();
        eval(
sprintf('$result = %s;'$expressionLanguage->compile($expression$names)));
        
$this->assertSame($expected$result);
    }

    public function 
shortCircuitProviderEvaluate()
    {
        
$object $this->getMockBuilder('stdClass')->setMethods(array('foo'))->getMock();
        
$object->expects($this->never())->method('foo');

        return array(
            array(
'false and object.foo()', array('object' => $object), false),
            array(
'false && object.foo()', array('object' => $object), false),
            array(
'true || object.foo()', array('object' => $object), true),
            array(
'true or object.foo()', array('object' => $object), true),
        );
    }

    public function 
shortCircuitProviderCompile()
    {
        return array(
            array(
'false and foo', array('foo' => 'foo'), false),
            array(
'false && foo', array('foo' => 'foo'), false),
            array(
'true || foo', array('foo' => 'foo'), true),
            array(
'true or foo', array('foo' => 'foo'), true),
        );
    }
}
Онлайн: 1
Реклама