class TwigReferenceUnitTest

Unit tests for TwigReference class.

Hierarchy

Expanded class hierarchy of TwigReferenceUnitTest

File

drupal/core/modules/system/lib/Drupal/system/Tests/Theme/TwigReferenceUnitTest.php, line 17
Definition of Drupal\system\Tests\Theme\TwigReferenceUnitTest.

Namespace

Drupal\system\Tests\Theme
View source
class TwigReferenceUnitTest extends UnitTestBase {
  public static function getInfo() {
    return array(
      'name' => 'Theme Twig References',
      'description' => 'Tests TwigReference functions',
      'group' => 'Theme',
    );
  }
  function setUp() {
    parent::setUp();
    $this->variables = array(
      'foo' => 'bar',
      'baz' => array(
        'foo' => '42',
        'bar' => '23',
      ),
      'node' => new TwigReferenceObjectTest(42, 'test node'),
    );
  }

  /**
   * 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');
  }

  /**
   * Test function for TwigReferenceFunctions class
   */
  function testTwigReferenceFunctions() {

    // Create wrapper
    $content =& $this->variables;

    // Use twig nomenclature
    $context['content'] = $content;

    // Twig converts {{ hide(content.baz) }} to the following code
    // This will have failed, because getAttribute returns a value and not a reference
    try {
      if (isset($context["content"])) {
        $_content_ = $context["content"];
      }
      else {
        $_content_ = NULL;
      }
      TwigReferenceFunctions::hide($this
        ->getAttribute($_content_, "baz"));
    } catch (Exception $e) {

      // Catch the critical warning that a value was passed by reference
    }
    $this
      ->assertFalse(isset($content['baz']['#printed']), 'baz is not hidden in content after hide() via value');

    // Now lets do the same with some TwigReference magic!
    $content_wrapper = new TwigReference();
    $content_wrapper
      ->setReference($content);
    $context['content'] = $content_wrapper;

    // Twig converts {{ hide(content.baz) }} to the following code
    // This will succeed, because getAttribute returns a value, but it is an object
    if (isset($context["content"])) {
      $_content_ = $context["content"];
    }
    else {
      $_content_ = NULL;
    }
    TwigReferenceFunctions::hide($this
      ->getAttribute($_content_, "baz"));
    $this
      ->assertTrue(isset($content['baz']['#printed']), 'baz is hidden in content after hide() via TwigReference object');
    $type = TwigReferenceFunctions::gettype($this
      ->getAttribute($_content_, "baz"));
    $this
      ->assertEqual($type, 'array', 'Type returned via TwigReferenceFunctions:: is an array.');
    $type = gettype($this
      ->getAttribute($_content_, "baz"));
    $this
      ->assertEqual($type, 'object', 'Type returned without TwigReferenceFunctions:: is an object.');
  }

  /**
   *  Helper function to somehow simulate Twigs getAttribute function
   */
  public function getAttribute($array, $offset) {
    if (isset($array[$offset])) {
      return $array[$offset];
    }
    return NULL;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
TestBase::$assertions protected property Assertions thrown in that test case.
TestBase::$databasePrefix protected property The database prefix of this test run.
TestBase::$originalFileDirectory protected property The original file directory, before it was changed for testing purposes.
TestBase::$originalPrefix protected property The original database prefix when running inside Simpletest.
TestBase::$results public property Current results of this test case.
TestBase::$setup protected property Flag to indicate whether the test has been set up.
TestBase::$setupDatabasePrefix protected property
TestBase::$setupEnvironment protected property
TestBase::$skipClasses protected property This class is skipped when looking for the source of an assertion.
TestBase::$testId protected property The test run ID.
TestBase::$timeLimit protected property Time limit for the test.
TestBase::$verbose protected property TRUE if verbose debugging is enabled.
TestBase::$verboseClassName protected property Safe class name for use in verbose output filenames.
TestBase::$verboseDirectory protected property Directory where verbose output files are put.
TestBase::$verboseDirectoryUrl protected property URL to the verbose output file directory.
TestBase::$verboseId protected property Incrementing identifier for verbose output filenames.
TestBase::assert protected function Internal helper: stores the assert.
TestBase::assertEqual protected function Check to see if two values are equal.
TestBase::assertFalse protected function Check to see if a value is false (an empty string, 0, NULL, or FALSE).
TestBase::assertIdentical protected function Check to see if two values are identical.
TestBase::assertIdenticalObject protected function Checks to see if two objects are identical.
TestBase::assertNotEqual protected function Check to see if two values are not equal.
TestBase::assertNotIdentical protected function Check to see if two values are not identical.
TestBase::assertNotNull protected function Check to see if a value is not NULL.
TestBase::assertNull protected function Check to see if a value is NULL.
TestBase::assertTrue protected function Check to see if a value is not false (not an empty string, 0, NULL, or FALSE).
TestBase::changeDatabasePrefix protected function Changes the database connection to the prefixed one.
TestBase::checkRequirements protected function Checks the matching requirements for Test. 3
TestBase::deleteAssert public static function Delete an assertion record by message ID.
TestBase::error protected function Fire an error assertion. 1
TestBase::errorHandler public function Handle errors during test runs.
TestBase::exceptionHandler protected function Handle exceptions.
TestBase::fail protected function Fire an assertion that is always negative.
TestBase::filePreDeleteCallback public static function Ensures test files are deletable within file_unmanaged_delete_recursive().
TestBase::generatePermutations public static function Converts a list of possible parameters into a stack of permutations.
TestBase::getAssertionCall protected function Cycles through backtrace until the first non-assertion method is found.
TestBase::getDatabaseConnection public static function Returns the database connection to the site running Simpletest.
TestBase::insertAssert public static function Store an assertion from outside the testing context.
TestBase::pass protected function Fire an assertion that is always positive.
TestBase::prepareDatabasePrefix protected function Generates a database prefix for running tests.
TestBase::prepareEnvironment protected function Prepares the current environment for running the test.
TestBase::randomName public static function Generates a random string containing letters and numbers.
TestBase::randomObject public static function Generates a random PHP object.
TestBase::randomString public static function Generates a random string of ASCII characters of codes 32 to 126.
TestBase::rebuildContainer protected function Rebuild drupal_container().
TestBase::run public function Run all tests in this class.
TestBase::tearDown protected function Deletes created files, database tables, and reverts all environment changes. 10
TestBase::verbose protected function Logs verbose message in a text file.
TwigReferenceUnitTest::getAttribute public function Helper function to somehow simulate Twigs getAttribute function
TwigReferenceUnitTest::getInfo public static function
TwigReferenceUnitTest::setUp function Sets up unit test environment. Overrides UnitTestBase::setUp
TwigReferenceUnitTest::testTwigReference function Test function for TwigReference class
TwigReferenceUnitTest::testTwigReferenceFunctions function Test function for TwigReferenceFunctions class
UnitTestBase::$configDirectories protected property
UnitTestBase::__construct function Constructor for UnitTestBase. Overrides TestBase::__construct 6