8aeab575e924fc4541bc8efca6bc5b61c1ba149e
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / TypedData / TypedDataDefinitionTest.php
1 <?php
2
3 namespace Drupal\KernelTests\Core\TypedData;
4
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;
14
15 /**
16  * Tests deriving metadata of core data types.
17  *
18  * @group TypedData
19  */
20 class TypedDataDefinitionTest extends KernelTestBase {
21
22   /**
23    * The typed data manager to use.
24    *
25    * @var \Drupal\Core\TypedData\TypedDataManager
26    */
27   protected $typedDataManager;
28
29   protected function setUp() {
30     parent::setup();
31     $this->typedDataManager = $this->container->get('typed_data_manager');
32   }
33
34   /**
35    * Tests deriving metadata about list items.
36    */
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');
43
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);
48
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');
55   }
56
57   /**
58    * Tests deriving metadata about maps.
59    */
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'));
65
66     $this->assertTrue($map_definition instanceof ComplexDataDefinitionInterface);
67
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'));
73
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);
81   }
82
83   /**
84    * Tests deriving metadata from data references.
85    */
86   public function testDataReferences() {
87     $language_reference_definition = DataReferenceDefinition::create('language');
88     $this->assertTrue($language_reference_definition instanceof DataReferenceDefinitionInterface);
89
90     // Test retrieving metadata about the referenced data.
91     $this->assertEqual($language_reference_definition->getTargetDefinition()->getDataType(), 'language');
92
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);
97   }
98
99 }