3 namespace Drupal\KernelTests\Core\TypedData;
5 use Drupal\Core\TypedData\ComplexDataDefinitionInterface;
6 use Drupal\Core\TypedData\DataDefinition;
7 use Drupal\Core\TypedData\DataDefinitionInterface;
8 use Drupal\Core\TypedData\DataReferenceDefinition;
9 use Drupal\Core\TypedData\DataReferenceDefinitionInterface;
10 use Drupal\Core\TypedData\ListDataDefinition;
11 use Drupal\Core\TypedData\ListDataDefinitionInterface;
12 use Drupal\Core\TypedData\MapDataDefinition;
13 use Drupal\KernelTests\KernelTestBase;
16 * Tests deriving metadata of core data types.
20 class TypedDataDefinitionTest extends KernelTestBase {
23 * The typed data manager to use.
25 * @var \Drupal\Core\TypedData\TypedDataManager
27 protected $typedDataManager;
29 protected function setUp() {
31 $this->typedDataManager = $this->container->get('typed_data_manager');
35 * Tests deriving metadata about list items.
37 public function testLists() {
38 $list_definition = ListDataDefinition::create('string');
39 $this->assertTrue($list_definition instanceof ListDataDefinitionInterface);
40 $item_definition = $list_definition->getItemDefinition();
41 $this->assertTrue($item_definition instanceof DataDefinitionInterface);
42 $this->assertEqual($item_definition->getDataType(), 'string');
44 // Test using the definition factory.
45 $list_definition2 = $this->typedDataManager->createListDataDefinition('string');
46 $this->assertTrue($list_definition2 instanceof ListDataDefinitionInterface);
47 $this->assertEqual($list_definition, $list_definition2);
49 // Test creating the definition of data with type 'list', which is the same
50 // as creating a definition of a list of items of type 'any'.
51 $list_definition = $this->typedDataManager->createDataDefinition('list');
52 $this->assertTrue($list_definition instanceof ListDataDefinitionInterface);
53 $this->assertEqual($list_definition->getDataType(), 'list');
54 $this->assertEqual($list_definition->getItemDefinition()->getDataType(), 'any');
58 * Tests deriving metadata about maps.
60 public function testMaps() {
61 $map_definition = MapDataDefinition::create()
62 ->setPropertyDefinition('one', DataDefinition::create('string'))
63 ->setPropertyDefinition('two', DataDefinition::create('string'))
64 ->setPropertyDefinition('three', DataDefinition::create('string'));
66 $this->assertTrue($map_definition instanceof ComplexDataDefinitionInterface);
68 // Test retrieving metadata about contained properties.
69 $this->assertEqual(array_keys($map_definition->getPropertyDefinitions()), ['one', 'two', 'three']);
70 $this->assertEqual($map_definition->getPropertyDefinition('one')->getDataType(), 'string');
71 $this->assertNull($map_definition->getMainPropertyName());
72 $this->assertNull($map_definition->getPropertyDefinition('invalid'));
74 // Test using the definition factory.
75 $map_definition2 = $this->typedDataManager->createDataDefinition('map');
76 $this->assertTrue($map_definition2 instanceof ComplexDataDefinitionInterface);
77 $map_definition2->setPropertyDefinition('one', DataDefinition::create('string'))
78 ->setPropertyDefinition('two', DataDefinition::create('string'))
79 ->setPropertyDefinition('three', DataDefinition::create('string'));
80 $this->assertEqual($map_definition, $map_definition2);
84 * Tests deriving metadata from data references.
86 public function testDataReferences() {
87 $language_reference_definition = DataReferenceDefinition::create('language');
88 $this->assertTrue($language_reference_definition instanceof DataReferenceDefinitionInterface);
90 // Test retrieving metadata about the referenced data.
91 $this->assertEqual($language_reference_definition->getTargetDefinition()->getDataType(), 'language');
93 // Test using the definition factory.
94 $language_reference_definition2 = $this->typedDataManager->createDataDefinition('language_reference');
95 $this->assertTrue($language_reference_definition2 instanceof DataReferenceDefinitionInterface);
96 $this->assertEqual($language_reference_definition, $language_reference_definition2);