Evaluator fixes/enhancements + tests

This commit is contained in:
odain
2025-09-05 15:21:15 +02:00
parent 11f142b782
commit 7e7b5874a6
7 changed files with 164 additions and 93 deletions

View File

@@ -10,6 +10,12 @@ class PhpExpressionEvaluatorTest extends ItopDataTestCase {
private static $PRIVATE_STATIC_PROPERTY = 123;
private const PRIVATE_CONSTANT = 123;
protected function tearDown(): void
{
parent::tearDown(); // TODO: Change the autogenerated stub
PhpExpressionEvaluator::GetInstance()->SetMode(PhpExpressionEvaluator::ITOP_ALGO);
}
public static function EvaluateExpressionProvider() {
return [
'Array: [1000 => "a"]' => ['sExpression' => '[1000 => "a"]'],
@@ -19,7 +25,7 @@ class PhpExpressionEvaluatorTest extends ItopDataTestCase {
'BinaryOperator: false|true' => [ 'sExpression' => 'false|true'],
'BinaryOperator: false||true' => [ 'sExpression' => 'false||true'],
'BinaryOperator: false&&true' => [ 'sExpression' => 'false&&true'],
'BinaryOperator: true&&true&&true&&false' => [ 'sExpression' => 'true&&true&&true&&false'],
'BinaryOperator: true&&true&&true&&false' => [ 'sExpression' => 'true && true && true && false'],
'BinaryOperator: false&true' => [ 'sExpression' => 'false&true'],
'BinaryOperator: ! true' => [ 'sExpression' => '! true'],
'BinaryOperator: 10 * 5' => [ 'sExpression' => '10 * 5'],
@@ -30,6 +36,7 @@ class PhpExpressionEvaluatorTest extends ItopDataTestCase {
'BinaryOperator: PHP_VERSION_ID != PHP_VERSION_ID' => [ 'sExpression' => 'PHP_VERSION_ID != PHP_VERSION_ID'],
'BitwiseNot: ~3' => ['sExpression' => '~3'],
'BitwiseXor: 3^2' => ['sExpression' => '3^2'],
'BooleanAnd: true && false' => ['sExpression' => 'true && false'],
'Cast: (array)3' => ['sExpression' => '(array)3'],
'Cast: (bool)1' => ['sExpression' => '(bool)1'],
'Cast: (bool)0' => ['sExpression' => '(bool)0'],
@@ -48,14 +55,21 @@ class PhpExpressionEvaluatorTest extends ItopDataTestCase {
],
'Coalesce: $oNullVar ?? 1' => ['sExpression' => '$oNullVar ?? 1', 1],
'Coalesce: $oNonNullVar ?? 1' => ['sExpression' => '$oNonNullVar ?? 1', 1],
'Coalesce: $_SERVER["toto"] ?? 1' => ['sExpression' => '$_SERVER["toto"] ?? 1', "titi"],
'Coalesce: $_SERVER["unknown_key"] ?? 1' => ['sExpression' => '$_SERVER["unknown_key"] ?? 1', 1],
'Coalesce: $oGlobalNonNullVar ?? 1' => ['sExpression' => '$oGlobalNonNullVar ?? 1', "a"],
'Coalesce: $oGlobalNullVar ?? 1' => ['sExpression' => '$oGlobalNullVar ?? 1', 1],
'Concat: "a"."b"' => ['sExpression' => '"a"."b"'],
'ConstFetch: false' => [ 'sExpression' => 'false'],
'ConstFetch: (false)' => [ 'sExpression' => 'false'],
'ConstFetch: true' => [ 'sExpression' => 'true'],
'ConstFetch: (true)' => [ 'sExpression' => 'true'],
'Equal: 1 == true' => [ 'sExpression' => '1 == true', true],
'Equal: 1 == false' => [ 'sExpression' => '1 == false', false],
'FuncCall: function_exists(\'ldap_connect\')' => [ 'sExpression' => 'function_exists(\'ldap_connect\')'],
'FuncCall: function_exists(\'gabuzomeushouldnotexist\')' => [ 'sExpression' => 'function_exists(\'gabuzomeushouldnotexist\')'],
'Identical: 1==="1"' => ['sExpression' => '1==="1"', false],
'Identical: "1"==="1"' => ['sExpression' => '"1"==="1"', true],
'Isset: isset($oNonNullVar)' => ['sExpression' => 'isset($oNonNullVar)', false],
'Isset: isset($oGlobalNonNullVar)' => ['sExpression' => 'isset($oGlobalNonNullVar)', true],
'Isset: isset($a, $_SERVER)' => ['sExpression' => 'isset($a, $_SERVER)', false],
@@ -85,6 +99,7 @@ class PhpExpressionEvaluatorTest extends ItopDataTestCase {
'Variable: $_SERVER' => ['sExpression' => '$_SERVER', ['toto' => 'titi']],
'Variable: $oNonNullVar' => ['sExpression' => '$oNonNullVar', null],
'Variable: $oGlobalNonNullVar' => ['sExpression' => '$oGlobalNonNullVar', "a"],
'Variable: $oEvaluationFakeClass' => ['sExpression' => '$oEvaluationFakeClass', new EvaluationFakeClass()],
];
}
@@ -116,6 +131,10 @@ class PhpExpressionEvaluatorTest extends ItopDataTestCase {
{
global $oGlobalNonNullVar;
$oGlobalNonNullVar="a";
global $oGlobalNullVar;
$oGlobalNullVar=null;
$oNonNullVar="a";
$oNullVar=null;
@@ -126,7 +145,8 @@ class PhpExpressionEvaluatorTest extends ItopDataTestCase {
global $oEvaluationFakeClass;
$oEvaluationFakeClass = new EvaluationFakeClass();
$res = PhpExpressionEvaluator::GetInstance()->ParseAndEvaluateExpression($sExpression, $iMode);
PhpExpressionEvaluator::GetInstance()->SetMode($iMode);
$res = PhpExpressionEvaluator::GetInstance()->ParseAndEvaluateExpression($sExpression);
if ($forced_expected === "NOTPROVIDED"){
$this->assertEquals($this->UnprotectedComputeExpression($sExpression), $res, $sExpression);
} else {