TypedDataDefinitionTest.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace Drupal\KernelTests\Core\TypedData;
  3. use Drupal\Core\TypedData\ComplexDataDefinitionInterface;
  4. use Drupal\Core\TypedData\DataDefinition;
  5. use Drupal\Core\TypedData\DataDefinitionInterface;
  6. use Drupal\Core\TypedData\DataReferenceDefinition;
  7. use Drupal\Core\TypedData\DataReferenceDefinitionInterface;
  8. use Drupal\Core\TypedData\ListDataDefinition;
  9. use Drupal\Core\TypedData\ListDataDefinitionInterface;
  10. use Drupal\Core\TypedData\MapDataDefinition;
  11. use Drupal\KernelTests\KernelTestBase;
  12. /**
  13. * Tests deriving metadata of core data types.
  14. *
  15. * @group TypedData
  16. */
  17. class TypedDataDefinitionTest extends KernelTestBase {
  18. /**
  19. * The typed data manager to use.
  20. *
  21. * @var \Drupal\Core\TypedData\TypedDataManager
  22. */
  23. protected $typedDataManager;
  24. protected function setUp() {
  25. parent::setup();
  26. $this->typedDataManager = $this->container->get('typed_data_manager');
  27. }
  28. /**
  29. * Tests deriving metadata about list items.
  30. */
  31. public function testLists() {
  32. $list_definition = ListDataDefinition::create('string');
  33. $this->assertTrue($list_definition instanceof ListDataDefinitionInterface);
  34. $item_definition = $list_definition->getItemDefinition();
  35. $this->assertTrue($item_definition instanceof DataDefinitionInterface);
  36. $this->assertEqual($item_definition->getDataType(), 'string');
  37. // Test using the definition factory.
  38. $list_definition2 = $this->typedDataManager->createListDataDefinition('string');
  39. $this->assertTrue($list_definition2 instanceof ListDataDefinitionInterface);
  40. $this->assertEqual($list_definition, $list_definition2);
  41. // Test creating the definition of data with type 'list', which is the same
  42. // as creating a definition of a list of items of type 'any'.
  43. $list_definition = $this->typedDataManager->createDataDefinition('list');
  44. $this->assertTrue($list_definition instanceof ListDataDefinitionInterface);
  45. $this->assertEqual($list_definition->getDataType(), 'list');
  46. $this->assertEqual($list_definition->getItemDefinition()->getDataType(), 'any');
  47. }
  48. /**
  49. * Tests deriving metadata about maps.
  50. */
  51. public function testMaps() {
  52. $map_definition = MapDataDefinition::create()
  53. ->setPropertyDefinition('one', DataDefinition::create('string'))
  54. ->setPropertyDefinition('two', DataDefinition::create('string'))
  55. ->setPropertyDefinition('three', DataDefinition::create('string'));
  56. $this->assertTrue($map_definition instanceof ComplexDataDefinitionInterface);
  57. // Test retrieving metadata about contained properties.
  58. $this->assertEqual(array_keys($map_definition->getPropertyDefinitions()), ['one', 'two', 'three']);
  59. $this->assertEqual($map_definition->getPropertyDefinition('one')->getDataType(), 'string');
  60. $this->assertNull($map_definition->getMainPropertyName());
  61. $this->assertNull($map_definition->getPropertyDefinition('invalid'));
  62. // Test using the definition factory.
  63. $map_definition2 = $this->typedDataManager->createDataDefinition('map');
  64. $this->assertTrue($map_definition2 instanceof ComplexDataDefinitionInterface);
  65. $map_definition2->setPropertyDefinition('one', DataDefinition::create('string'))
  66. ->setPropertyDefinition('two', DataDefinition::create('string'))
  67. ->setPropertyDefinition('three', DataDefinition::create('string'));
  68. $this->assertEqual(serialize($map_definition), serialize($map_definition2));
  69. }
  70. /**
  71. * Tests deriving metadata from data references.
  72. */
  73. public function testDataReferences() {
  74. $language_reference_definition = DataReferenceDefinition::create('language');
  75. $this->assertTrue($language_reference_definition instanceof DataReferenceDefinitionInterface);
  76. // Test retrieving metadata about the referenced data.
  77. $this->assertEqual($language_reference_definition->getTargetDefinition()->getDataType(), 'language');
  78. // Test using the definition factory.
  79. $language_reference_definition2 = $this->typedDataManager->createDataDefinition('language_reference');
  80. $this->assertTrue($language_reference_definition2 instanceof DataReferenceDefinitionInterface);
  81. $this->assertEqual(serialize($language_reference_definition), serialize($language_reference_definition2));
  82. }
  83. }