public function testModifyReferencedVariables() { $context = $this->getContext(); /** * This variable is not needed for change */ $variableAValue = 1; $variableAType = CompiledExpression::INTEGER; $context->addVariable($variableA = new Variable('a', $variableAValue, $variableAType)); /** * $b = true; */ $context->addVariable($variableB = new Variable('b', true, CompiledExpression::BOOLEAN)); /** * $c = &$b; */ $variableC = new Variable('c'); $variableC->setReferencedTo($variableB); $context->addVariable($variableC); $newType = CompiledExpression::INTEGER; $newValue = 55; /** * $b = {$newValue}; * After it variable $c will change type and value */ $context->modifyReferencedVariables($variableB, $newType, $newValue); self::assertSame($newValue, $variableC->getValue()); self::assertSame($newType, $variableC->getType()); /** * Assert that variable $a was not changed */ self::assertSame($variableAValue, $variableA->getValue()); self::assertSame($variableAType, $variableA->getType()); }
public function testReferenceToChange() { /** * $a = 1; * $b = &$a; */ $parentVariable = new Variable('a', 1, CompiledExpression::INTEGER); $variable = new Variable('b', $parentVariable->getValue(), $parentVariable->getType()); static::assertFalse($variable->isReferenced()); $variable->setReferencedTo($parentVariable); static::assertTrue($variable->isReferenced()); static::assertSame($parentVariable, $variable->getReferencedTo()); /** * $b = 55.00 */ $variable->modify(CompiledExpression::DOUBLE, 55.0); static::assertSame($variable->getValue(), $parentVariable->getValue()); static::assertSame($variable->getType(), $parentVariable->getType()); }