class DisplayApiTest

Hierarchy

Expanded class hierarchy of DisplayApiTest

File

drupal/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php, line 12
Definition of Drupal\field\Tests\DisplayApiTest.

Namespace

Drupal\field\Tests
View source
class DisplayApiTest extends FieldUnitTestBase {
  public static function getInfo() {
    return array(
      'name' => 'Field Display API tests',
      'description' => 'Test the display API.',
      'group' => 'Field API',
    );
  }
  function setUp() {
    parent::setUp();

    // Create a field and instance.
    $this->field_name = 'test_field';
    $this->label = $this
      ->randomName();
    $this->cardinality = 4;
    $this->field = array(
      'field_name' => $this->field_name,
      'type' => 'test_field',
      'cardinality' => $this->cardinality,
    );
    $this->instance = array(
      'field_name' => $this->field_name,
      'entity_type' => 'test_entity',
      'bundle' => 'test_bundle',
      'label' => $this->label,
    );
    $this->display_options = array(
      'default' => array(
        'type' => 'field_test_default',
        'settings' => array(
          'test_formatter_setting' => $this
            ->randomName(),
        ),
      ),
      'teaser' => array(
        'type' => 'field_test_default',
        'settings' => array(
          'test_formatter_setting' => $this
            ->randomName(),
        ),
      ),
    );
    field_create_field($this->field);
    field_create_instance($this->instance);

    // Create a display for the default view mode.
    entity_get_display($this->instance['entity_type'], $this->instance['bundle'], 'default')
      ->setComponent($this->field_name, $this->display_options['default'])
      ->save();

    // Create a display for the teaser view mode.
    entity_get_display($this->instance['entity_type'], $this->instance['bundle'], 'teaser')
      ->setComponent($this->field_name, $this->display_options['teaser'])
      ->save();

    // Create an entity with values.
    $this->values = $this
      ->_generateTestFieldValues($this->cardinality);
    $this->entity = field_test_create_entity();
    $this->is_new = TRUE;
    $this->entity->{$this->field_name}[Language::LANGCODE_NOT_SPECIFIED] = $this->values;
    field_test_entity_save($this->entity);
  }

  /**
   * Test the field_view_field() function.
   */
  function testFieldViewField() {

    // No display settings: check that default display settings are used.
    $output = field_view_field($this->entity, $this->field_name);
    $this->content = drupal_render($output);
    $settings = field_info_formatter_settings('field_test_default');
    $setting = $settings['test_formatter_setting'];
    $this
      ->assertText($this->label, 'Label was displayed.');
    foreach ($this->values as $delta => $value) {
      $this
        ->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array(
        '@delta' => $delta,
      )));
    }

    // Check that explicit display settings are used.
    $display = array(
      'label' => 'hidden',
      'type' => 'field_test_multiple',
      'settings' => array(
        'test_formatter_setting_multiple' => $this
          ->randomName(),
        'alter' => TRUE,
      ),
    );
    $output = field_view_field($this->entity, $this->field_name, $display);
    $this->content = drupal_render($output);
    $setting = $display['settings']['test_formatter_setting_multiple'];
    $this
      ->assertNoText($this->label, 'Label was not displayed.');
    $this
      ->assertText('field_test_field_attach_view_alter', 'Alter fired, display passed.');
    $this
      ->assertText('field language is ' . Language::LANGCODE_NOT_SPECIFIED, 'Language is placed onto the context.');
    $array = array();
    foreach ($this->values as $delta => $value) {
      $array[] = $delta . ':' . $value['value'];
    }
    $this
      ->assertText($setting . '|' . implode('|', $array), 'Values were displayed with expected setting.');

    // Check the prepare_view steps are invoked.
    $display = array(
      'label' => 'hidden',
      'type' => 'field_test_with_prepare_view',
      'settings' => array(
        'test_formatter_setting_additional' => $this
          ->randomName(),
      ),
    );
    $output = field_view_field($this->entity, $this->field_name, $display);
    $view = drupal_render($output);
    $this->content = $view;
    $setting = $display['settings']['test_formatter_setting_additional'];
    $this
      ->assertNoText($this->label, 'Label was not displayed.');
    $this
      ->assertNoText('field_test_field_attach_view_alter', 'Alter not fired.');
    foreach ($this->values as $delta => $value) {
      $this
        ->assertText($setting . '|' . $value['value'] . '|' . ($value['value'] + 1), format_string('Value @delta was displayed with expected setting.', array(
        '@delta' => $delta,
      )));
    }

    // View mode: check that display settings specified in the display object
    // are used.
    $output = field_view_field($this->entity, $this->field_name, 'teaser');
    $this->content = drupal_render($output);
    $setting = $this->display_options['teaser']['settings']['test_formatter_setting'];
    $this
      ->assertText($this->label, 'Label was displayed.');
    foreach ($this->values as $delta => $value) {
      $this
        ->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array(
        '@delta' => $delta,
      )));
    }

    // Unknown view mode: check that display settings for 'default' view mode
    // are used.
    $output = field_view_field($this->entity, $this->field_name, 'unknown_view_mode');
    $this->content = drupal_render($output);
    $setting = $this->display_options['default']['settings']['test_formatter_setting'];
    $this
      ->assertText($this->label, 'Label was displayed.');
    foreach ($this->values as $delta => $value) {
      $this
        ->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array(
        '@delta' => $delta,
      )));
    }
  }

  /**
   * Test the field_view_value() function.
   */
  function testFieldViewValue() {

    // No display settings: check that default display settings are used.
    $settings = field_info_formatter_settings('field_test_default');
    $setting = $settings['test_formatter_setting'];
    foreach ($this->values as $delta => $value) {
      $item = $this->entity->{$this->field_name}[Language::LANGCODE_NOT_SPECIFIED][$delta];
      $output = field_view_value($this->entity, $this->field_name, $item);
      $this->content = drupal_render($output);
      $this
        ->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array(
        '@delta' => $delta,
      )));
    }

    // Check that explicit display settings are used.
    $display = array(
      'type' => 'field_test_multiple',
      'settings' => array(
        'test_formatter_setting_multiple' => $this
          ->randomName(),
      ),
    );
    $setting = $display['settings']['test_formatter_setting_multiple'];
    $array = array();
    foreach ($this->values as $delta => $value) {
      $item = $this->entity->{$this->field_name}[Language::LANGCODE_NOT_SPECIFIED][$delta];
      $output = field_view_value($this->entity, $this->field_name, $item, $display);
      $this->content = drupal_render($output);
      $this
        ->assertText($setting . '|0:' . $value['value'], format_string('Value @delta was displayed with expected setting.', array(
        '@delta' => $delta,
      )));
    }

    // Check that prepare_view steps are invoked.
    $display = array(
      'type' => 'field_test_with_prepare_view',
      'settings' => array(
        'test_formatter_setting_additional' => $this
          ->randomName(),
      ),
    );
    $setting = $display['settings']['test_formatter_setting_additional'];
    $array = array();
    foreach ($this->values as $delta => $value) {
      $item = $this->entity->{$this->field_name}[Language::LANGCODE_NOT_SPECIFIED][$delta];
      $output = field_view_value($this->entity, $this->field_name, $item, $display);
      $this->content = drupal_render($output);
      $this
        ->assertText($setting . '|' . $value['value'] . '|' . ($value['value'] + 1), format_string('Value @delta was displayed with expected setting.', array(
        '@delta' => $delta,
      )));
    }

    // View mode: check that display settings specified in the instance are
    // used.
    $setting = $this->display_options['teaser']['settings']['test_formatter_setting'];
    foreach ($this->values as $delta => $value) {
      $item = $this->entity->{$this->field_name}[Language::LANGCODE_NOT_SPECIFIED][$delta];
      $output = field_view_value($this->entity, $this->field_name, $item, 'teaser');
      $this->content = drupal_render($output);
      $this
        ->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array(
        '@delta' => $delta,
      )));
    }

    // Unknown view mode: check that display settings for 'default' view mode
    // are used.
    $setting = $this->display_options['default']['settings']['test_formatter_setting'];
    foreach ($this->values as $delta => $value) {
      $item = $this->entity->{$this->field_name}[Language::LANGCODE_NOT_SPECIFIED][$delta];
      $output = field_view_value($this->entity, $this->field_name, $item, 'unknown_view_mode');
      $this->content = drupal_render($output);
      $this
        ->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array(
        '@delta' => $delta,
      )));
    }
  }

  /**
   * Tests that the prepareView() formatter method still fires for empty values.
   */
  function testFieldEmpty() {

    // Uses \Drupal\field_test\Plugin\field\formatter\TestFieldEmptyFormatter.
    $display = array(
      'label' => 'hidden',
      'type' => 'field_empty_test',
      'settings' => array(
        'test_empty_string' => '**EMPTY FIELD**' . $this
          ->randomName(),
      ),
    );

    // $this->entity is set by the setUp() method and by default contains 4
    // numeric values.  We only want to test the display of this one field.
    $output = field_view_field($this->entity, $this->field_name, $display);
    $view = drupal_render($output);
    $this->content = $view;

    // The test field by default contains values, so should not display the
    // default "empty" text.
    $this
      ->assertNoText($display['settings']['test_empty_string']);

    // Now remove the values from the test field and retest.
    $this->entity->{$this->field_name}[Language::LANGCODE_NOT_SPECIFIED] = array();
    field_test_entity_save($this->entity);
    $output = field_view_field($this->entity, $this->field_name, $display);
    $view = drupal_render($output);
    $this->content = $view;

    // This time, as the field values have been removed, we *should* show the
    // default "empty" text.
    $this
      ->assertText($display['settings']['test_empty_string']);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DisplayApiTest::getInfo public static function
DisplayApiTest::setUp function Set the default field storage backend for fields created during tests. Overrides FieldUnitTestBase::setUp
DisplayApiTest::testFieldEmpty function Tests that the prepareView() formatter method still fires for empty values.
DisplayApiTest::testFieldViewField function Test the field_view_field() function.
DisplayApiTest::testFieldViewValue function Test the field_view_value() function.
DrupalUnitTestBase::$keyValueFactory protected property A KeyValueMemoryFactory instance to use when building the container.
DrupalUnitTestBase::$moduleFiles private property
DrupalUnitTestBase::$themeData private property
DrupalUnitTestBase::$themeFiles private property
DrupalUnitTestBase::containerBuild public function Sets up the base service container for this test. 1
DrupalUnitTestBase::disableModules protected function Disables modules for this test.
DrupalUnitTestBase::enableModules protected function Enables modules for this test.
DrupalUnitTestBase::installConfig protected function Installs default configuration for a given list of modules.
DrupalUnitTestBase::installSchema protected function Installs a specific table from a module schema definition.
DrupalUnitTestBase::tearDown protected function Deletes created files, database tables, and reverts all environment changes. Overrides TestBase::tearDown 2
DrupalUnitTestBase::__construct function Overrides \Drupal\simpletest\UnitTestBase::__construct(). Overrides UnitTestBase::__construct
FieldUnitTestBase::$content protected property A string for assert raw and text helper methods.
FieldUnitTestBase::$modules public static property Modules to enable. Overrides DrupalUnitTestBase::$modules 15
FieldUnitTestBase::assertFieldValues function Assert that a field has the expected values in an entity.
FieldUnitTestBase::assertNoRaw protected function Pass if the raw text IS NOT found in set string.
FieldUnitTestBase::assertNoText protected function Pass if the text IS NOT found in set string.
FieldUnitTestBase::assertRaw protected function Pass if the raw text IS found in set string.
FieldUnitTestBase::assertText protected function Pass if the text IS found in set string.
FieldUnitTestBase::createFieldWithInstance function Create a field and an instance of it.
FieldUnitTestBase::_generateTestFieldValues function Generate random values for a field_test field.
TestBase::$assertions protected property Assertions thrown in that test case.
TestBase::$configImporter protected property The config importer that can used in a test. 1
TestBase::$container protected property The dependency injection container used in the test. 1
TestBase::$databasePrefix protected property The database prefix of this test run.
TestBase::$dieOnFail public property Whether to die in case any test assertion fails.
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::$originalSettings protected property The settings array.
TestBase::$public_files_directory protected property The public file directory for the test environment.
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. 4
TestBase::configImporter public function Returns a ConfigImporter object to import test importing of configuration. 1
TestBase::copyConfig public function Copies configuration objects from source storage to target storage.
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::prepareConfigDirectories protected function Create and set new configuration directories. 1
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(). 1
TestBase::run public function Run all tests in this class.
TestBase::settingsSet protected function Changes in memory settings.
TestBase::verbose protected function Logs verbose message in a text file.
UnitTestBase::$configDirectories protected property