[ExpressionLanguage] Registering functions after calling evaluate(), compile() or parse() is not supported
This commit is contained in:
parent
b675d0518c
commit
e305369f98
@ -110,10 +110,16 @@ class ExpressionLanguage
|
||||
* @param callable $compiler A callable able to compile the function
|
||||
* @param callable $evaluator A callable able to evaluate the function
|
||||
*
|
||||
* @throws \LogicException when registering a function after calling evaluate(), compile() or parse()
|
||||
*
|
||||
* @see ExpressionFunction
|
||||
*/
|
||||
public function register($name, $compiler, $evaluator)
|
||||
{
|
||||
if (null !== $this->parser) {
|
||||
throw new \LogicException('Registering functions after calling evaluate(), compile() or parse() is not supported.');
|
||||
}
|
||||
|
||||
$this->functions[$name] = array('compiler' => $compiler, 'evaluator' => $evaluator);
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
namespace Symfony\Component\ExpressionLanguage\Tests;
|
||||
|
||||
use Symfony\Component\ExpressionLanguage\ExpressionFunction;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
|
||||
use Symfony\Component\ExpressionLanguage\Tests\Fixtures\TestProvider;
|
||||
@ -139,4 +140,58 @@ class ExpressionLanguageTest extends TestCase
|
||||
$expressionLanguage->compile($expression, array('a', 'B' => 'b'));
|
||||
$expressionLanguage->compile($expression, array('B' => 'b', 'a'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getRegisterCallbacks
|
||||
* @expectedException \LogicException
|
||||
*/
|
||||
public function testRegisterAfterParse($registerCallback)
|
||||
{
|
||||
$el = new ExpressionLanguage();
|
||||
$el->parse('1 + 1', array());
|
||||
$registerCallback($el);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getRegisterCallbacks
|
||||
* @expectedException \LogicException
|
||||
*/
|
||||
public function testRegisterAfterEval($registerCallback)
|
||||
{
|
||||
$el = new ExpressionLanguage();
|
||||
$el->evaluate('1 + 1');
|
||||
$registerCallback($el);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getRegisterCallbacks
|
||||
* @expectedException \LogicException
|
||||
*/
|
||||
public function testRegisterAfterCompile($registerCallback)
|
||||
{
|
||||
$el = new ExpressionLanguage();
|
||||
$el->compile('1 + 1');
|
||||
$registerCallback($el);
|
||||
}
|
||||
|
||||
public function getRegisterCallbacks()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
function (ExpressionLanguage $el) {
|
||||
$el->register('fn', function () {}, function () {});
|
||||
},
|
||||
),
|
||||
array(
|
||||
function (ExpressionLanguage $el) {
|
||||
$el->addFunction(new ExpressionFunction('fn', function () {}, function () {}));
|
||||
},
|
||||
),
|
||||
array(
|
||||
function (ExpressionLanguage $el) {
|
||||
$el->registerProvider(new TestProvider());
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user