Test function for TwigReference class
function testTwigReference() {
// Create a new TwigReference wrapper
$wrapper = new TwigReference();
$wrapper
->setReference($this->variables);
// Check that strings are returned as strings
$foo = $wrapper['foo'];
$this
->assertEqual($foo, $this->variables['foo'], 'String returned from TwigReference is the same');
$this
->assertTrue(is_string($foo), 'String returned from TwigReference is of type string');
// Check that arrays are wrapped again as TwigReference objects
$baz = $wrapper['baz'];
$this
->assertTrue(is_object($baz), 'Array returned from TwigReference is of type object');
$this
->assertTrue($baz instanceof TwigReference, 'Array returned from TwigReference is instance of TwigReference');
// Check that getReference is giving back a reference to the original array
$ref =& $baz
->getReference();
$this
->assertTrue(is_array($ref), 'getReference returns an array');
// Now modify $ref
$ref['#hidden'] = TRUE;
$this
->assertEqual($ref['#hidden'], $this->variables['baz']['#hidden'], 'Property set on reference is passed to original array.');
$this
->assertEqual($ref['#hidden'], $baz['#hidden'], 'Property set on reference is passed to wrapper.');
// Now modify $baz
$baz['hi'] = 'hello';
$this
->assertEqual($baz['hi'], $this->variables['baz']['hi'], 'Property set on TwigReference object is passed to original array.');
$this
->assertEqual($baz['hi'], $ref['hi'], 'Property set on TwigReference object is passed to reference.');
// Check that an object is passed through directly
$node = $wrapper['node'];
$this
->assertTrue(is_object($node), 'Object returned from TwigReference is of type object');
$this
->assertTrue($node instanceof TwigReferenceObjectTest, 'Object returned from TwigReference is instance of TwigReferenceObjectTest');
}