You are here

public function EntityTypedDataDefinitionTest::testFields in Drupal 8

Same name and namespace in other branches
  1. 9 core/tests/Drupal/KernelTests/Core/Entity/EntityTypedDataDefinitionTest.php \Drupal\KernelTests\Core\Entity\EntityTypedDataDefinitionTest::testFields()
  2. 10 core/tests/Drupal/KernelTests/Core/Entity/EntityTypedDataDefinitionTest.php \Drupal\KernelTests\Core\Entity\EntityTypedDataDefinitionTest::testFields()

Tests deriving metadata about fields.

File

core/tests/Drupal/KernelTests/Core/Entity/EntityTypedDataDefinitionTest.php, line 49

Class

EntityTypedDataDefinitionTest
Tests deriving metadata of entity and field data types.

Namespace

Drupal\KernelTests\Core\Entity

Code

public function testFields() {
  $field_definition = BaseFieldDefinition::create('integer');

  // Fields are lists of complex data.
  $this
    ->assertInstanceOf(ListDataDefinitionInterface::class, $field_definition);
  $this
    ->assertNotInstanceOf(ComplexDataDefinitionInterface::class, $field_definition);
  $field_item_definition = $field_definition
    ->getItemDefinition();
  $this
    ->assertNotInstanceOf(ListDataDefinitionInterface::class, $field_item_definition);
  $this
    ->assertInstanceOf(ComplexDataDefinitionInterface::class, $field_item_definition);

  // Derive metadata about field item properties.
  $this
    ->assertEqual(array_keys($field_item_definition
    ->getPropertyDefinitions()), [
    'value',
  ]);
  $this
    ->assertEqual($field_item_definition
    ->getPropertyDefinition('value')
    ->getDataType(), 'integer');
  $this
    ->assertEqual($field_item_definition
    ->getMainPropertyName(), 'value');
  $this
    ->assertNull($field_item_definition
    ->getPropertyDefinition('invalid'));

  // Test accessing field item property metadata via the field definition.
  $this
    ->assertInstanceOf(FieldDefinitionInterface::class, $field_definition);
  $this
    ->assertEqual(array_keys($field_definition
    ->getPropertyDefinitions()), [
    'value',
  ]);
  $this
    ->assertEqual($field_definition
    ->getPropertyDefinition('value')
    ->getDataType(), 'integer');
  $this
    ->assertEqual($field_definition
    ->getMainPropertyName(), 'value');
  $this
    ->assertNull($field_definition
    ->getPropertyDefinition('invalid'));

  // Test using the definition factory for field item lists and field items.
  $field_item = $this->typedDataManager
    ->createDataDefinition('field_item:integer');
  $this
    ->assertNotInstanceOf(ListDataDefinitionInterface::class, $field_item);
  $this
    ->assertInstanceOf(ComplexDataDefinitionInterface::class, $field_item);

  // Comparison should ignore the internal static cache, so compare the
  // serialized objects instead.
  $this
    ->assertEqual(serialize($field_item_definition), serialize($field_item));
  $field_definition2 = $this->typedDataManager
    ->createListDataDefinition('field_item:integer');
  $this
    ->assertInstanceOf(ListDataDefinitionInterface::class, $field_definition2);
  $this
    ->assertNotInstanceOf(ComplexDataDefinitionInterface::class, $field_definition2);
  $this
    ->assertEqual(serialize($field_definition), serialize($field_definition2));
}