/**
  * Tests the ComplexData validation constraint validator.
  *
  * For testing a map including a constraint on one of its keys is defined.
  */
 public function testValidation()
 {
     // Create a definition that specifies some ComplexData constraint.
     $definition = MapDataDefinition::create()->setPropertyDefinition('key', DataDefinition::create('integer'))->addConstraint('ComplexData', array('key' => array('AllowedValues' => array(1, 2, 3))));
     // Test the validation.
     $typed_data = $this->typedData->create($definition, array('key' => 1));
     $violations = $typed_data->validate();
     $this->assertEqual($violations->count(), 0, 'Validation passed for correct value.');
     // Test the validation when an invalid value is passed.
     $typed_data = $this->typedData->create($definition, array('key' => 4));
     $violations = $typed_data->validate();
     $this->assertEqual($violations->count(), 1, 'Validation failed for incorrect value.');
     // Make sure the information provided by a violation is correct.
     $violation = $violations[0];
     $this->assertEqual($violation->getMessage(), t('The value you selected is not a valid choice.'), 'The message for invalid value is correct.');
     $this->assertEqual($violation->getRoot(), $typed_data, 'Violation root is correct.');
     $this->assertEqual($violation->getInvalidValue(), 4, 'The invalid value is set correctly in the violation.');
     // Test using the constraint with a map without the specified key. This
     // should be ignored as long as there is no NotNull or NotBlank constraint.
     $typed_data = $this->typedData->create($definition, array('foo' => 'bar'));
     $violations = $typed_data->validate();
     $this->assertEqual($violations->count(), 0, 'Constraint on non-existing key is ignored.');
     $definition = MapDataDefinition::create()->setPropertyDefinition('key', DataDefinition::create('integer'))->addConstraint('ComplexData', array('key' => array('NotNull' => array())));
     $typed_data = $this->typedData->create($definition, array('foo' => 'bar'));
     $violations = $typed_data->validate();
     $this->assertEqual($violations->count(), 1, 'Key is required.');
 }
示例#2
0
 /**
  * {@inheritdoc}
  */
 public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition)
 {
     $properties['uri'] = DataDefinition::create('uri')->setLabel(t('URI'));
     $properties['title'] = DataDefinition::create('string')->setLabel(t('Link text'));
     $properties['options'] = MapDataDefinition::create()->setLabel(t('Options'));
     return $properties;
 }
 /**
  * {@inheritdoc}
  */
 public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition)
 {
     // Prevent early t() calls by using the TranslatableMarkup.
     $properties['view_mode'] = DataDefinition::create('string')->setLabel(new TranslatableMarkup('View mode'))->setSetting('case_sensitive', FALSE)->setRequired(TRUE);
     $properties['default'] = DataDefinition::create('string')->setLabel(new TranslatableMarkup('Default name'))->setSetting('case_sensitive', FALSE)->setRequired(FALSE);
     $properties['panels_display'] = MapDataDefinition::create('map')->setLabel(new TranslatableMarkup('Panels display'))->setRequired(TRUE);
     return $properties;
 }
 /**
  * {@inheritdoc}
  */
 public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition)
 {
     $properties['lat'] = DataDefinition::create('float')->setLabel(t('Latitude'));
     $properties['lng'] = DataDefinition::create('float')->setLabel(t('Longitude'));
     $properties['lat_sin'] = DataDefinition::create('float')->setLabel(t('Latitude sine'));
     $properties['lat_cos'] = DataDefinition::create('float')->setLabel(t('Latitude cosine'));
     $properties['lng_rad'] = DataDefinition::create('float')->setLabel(t('Longitude radian'));
     $properties['data'] = MapDataDefinition::create()->setLabel(t('Meta data'));
     return $properties;
 }
 /**
  * {@inheritdoc}
  */
 public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition)
 {
     // Call the parent to define the target_id and entity properties.
     $properties = parent::propertyDefinitions($field_definition);
     $properties['handler'] = DataDefinition::create('string')->setLabel(t('Handler'));
     $properties['handler_settings'] = MapDataDefinition::create()->setLabel(t('Handler settings'));
     $properties['status'] = DataDefinition::create('integer')->setLabel(t('Status'))->setSetting('unsigned', TRUE);
     $properties['sent_count'] = DataDefinition::create('integer')->setLabel(t('Sent count'))->setSetting('unsigned', TRUE);
     $properties['subscribers'] = DataDefinition::create('integer')->setLabel(t('Subscribers'))->setSetting('unsigned', TRUE);
     return $properties;
 }
 /**
  * Tests deriving metadata about maps.
  */
 public function testMaps()
 {
     $map_definition = MapDataDefinition::create()->setPropertyDefinition('one', DataDefinition::create('string'))->setPropertyDefinition('two', DataDefinition::create('string'))->setPropertyDefinition('three', DataDefinition::create('string'));
     $this->assertTrue($map_definition instanceof ComplexDataDefinitionInterface);
     // Test retrieving metadata about contained properties.
     $this->assertEqual(array_keys($map_definition->getPropertyDefinitions()), array('one', 'two', 'three'));
     $this->assertEqual($map_definition->getPropertyDefinition('one')->getDataType(), 'string');
     $this->assertNull($map_definition->getMainPropertyName());
     $this->assertNull($map_definition->getPropertyDefinition('invalid'));
     // Test using the definition factory.
     $map_definition2 = $this->typedDataManager->createDataDefinition('map');
     $this->assertTrue($map_definition2 instanceof ComplexDataDefinitionInterface);
     $map_definition2->setPropertyDefinition('one', DataDefinition::create('string'))->setPropertyDefinition('two', DataDefinition::create('string'))->setPropertyDefinition('three', DataDefinition::create('string'));
     $this->assertEqual($map_definition, $map_definition2);
 }
 /**
  * Setups a typed data object used for test purposes.
  *
  * @param array $tree
  *   An array of value, constraints and properties.
  *
  * @return \Drupal\Core\TypedData\TypedDataInterface|\PHPUnit_Framework_MockObject_MockObject
  */
 protected function setupTypedData(array $tree, $name = '')
 {
     $callback = function ($value, ExecutionContextInterface $context) {
         $context->addViolation('violation: ' . (is_array($value) ? count($value) : $value));
     };
     $tree += ['constraints' => []];
     if (isset($tree['properties'])) {
         $map_data_definition = MapDataDefinition::create();
         $map_data_definition->addConstraint('Callback', ['callback' => $callback]);
         foreach ($tree['properties'] as $property_name => $property) {
             $sub_typed_data = $this->setupTypedData($property, $property_name);
             $map_data_definition->setPropertyDefinition($property_name, $sub_typed_data->getDataDefinition());
         }
         $typed_data = $this->typedDataManager->create($map_data_definition, $tree['value'], $name);
     } else {
         /** @var \Drupal\Core\TypedData\TypedDataInterface $typed_data */
         $typed_data = $this->typedDataManager->create(DataDefinition::create('string')->addConstraint('Callback', ['callback' => $callback]), $tree['value'], $name);
     }
     return $typed_data;
 }
示例#8
0
 /**
  * Tests using a typed data map.
  */
 public function testTypedDataMaps()
 {
     // Test working with a simple map.
     $value = array('one' => 'eins', 'two' => 'zwei', 'three' => 'drei');
     $definition = MapDataDefinition::create()->setPropertyDefinition('one', DataDefinition::create('string'))->setPropertyDefinition('two', DataDefinition::create('string'))->setPropertyDefinition('three', DataDefinition::create('string'));
     $typed_data = $this->createTypedData($definition, $value);
     // Test iterating.
     $count = 0;
     foreach ($typed_data as $item) {
         $this->assertTrue($item instanceof TypedDataInterface);
         $count++;
     }
     $this->assertEqual($count, 3);
     // Test retrieving metadata.
     $this->assertEqual(array_keys($typed_data->getDataDefinition()->getPropertyDefinitions()), array_keys($value));
     $definition = $typed_data->getDataDefinition()->getPropertyDefinition('one');
     $this->assertEqual($definition->getDataType(), 'string');
     $this->assertNull($typed_data->getDataDefinition()->getPropertyDefinition('invalid'));
     // Test getting and setting properties.
     $this->assertEqual($typed_data->get('one')->getValue(), 'eins');
     $this->assertEqual($typed_data->toArray(), $value);
     $typed_data->set('one', 'uno');
     $this->assertEqual($typed_data->get('one')->getValue(), 'uno');
     // Make sure the update is reflected in the value of the map also.
     $value = $typed_data->getValue();
     $this->assertEqual($value, array('one' => 'uno', 'two' => 'zwei', 'three' => 'drei'));
     $properties = $typed_data->getProperties();
     $this->assertEqual(array_keys($properties), array_keys($value));
     $this->assertIdentical($properties['one'], $typed_data->get('one'), 'Properties are identical.');
     // Test setting a not defined property. It shouldn't show up in the
     // properties, but be kept in the values.
     $typed_data->setValue(array('foo' => 'bar'));
     $this->assertEqual(array_keys($typed_data->getProperties()), array('one', 'two', 'three'));
     $this->assertEqual(array_keys($typed_data->getValue()), array('foo', 'one', 'two', 'three'));
     // Test getting the string representation.
     $typed_data->setValue(array('one' => 'eins', 'two' => '', 'three' => 'drei'));
     $this->assertEqual($typed_data->getString(), 'eins, drei');
     // Test isEmpty and cloning.
     $this->assertFalse($typed_data->isEmpty());
     $clone = clone $typed_data;
     $this->assertTrue($typed_data->getValue() === $clone->getValue());
     $this->assertTrue($typed_data->get('one') !== $clone->get('one'));
     $clone->setValue(array());
     $this->assertTrue($clone->isEmpty());
     // Make sure the difference between NULL (not set) and an empty array is
     // kept.
     $typed_data->setValue(NULL);
     $this->assertNull($typed_data->getValue());
     $typed_data->setValue(array());
     $value = $typed_data->getValue();
     $this->assertTrue(isset($value) && is_array($value));
     // Test accessing invalid properties.
     $typed_data->setValue($value);
     try {
         $typed_data->get('invalid');
         $this->fail('No exception has been thrown when getting an invalid value.');
     } catch (\Exception $e) {
         $this->pass('Exception thrown:' . $e->getMessage());
     }
     // Test setting invalid values.
     try {
         $typed_data->setValue('invalid');
         $this->fail('No exception has been thrown when setting an invalid value.');
     } catch (\Exception $e) {
         $this->pass('Exception thrown:' . $e->getMessage());
     }
     // Test adding a new property to the map.
     $typed_data->getDataDefinition()->setPropertyDefinition('zero', DataDefinition::create('any'));
     $typed_data->set('zero', 'null');
     $this->assertEqual($typed_data->get('zero')->getValue(), 'null');
     $definition = $typed_data->get('zero')->getDataDefinition();
     $this->assertEqual($definition->getDataType(), 'any', 'Definition for a new map entry returned.');
 }
示例#9
0
 /**
  * {@inheritdoc}
  */
 public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition)
 {
     $properties['path'] = DataDefinition::create('string')->setLabel(t('Path'));
     $properties['query'] = MapDataDefinition::create()->setLabel(t('Query'));
     return $properties;
 }
 /**
  * {@inheritdoc}
  */
 public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition)
 {
     $properties['plugin_type_id'] = DataDefinition::create('string')->setLabel(t('Plugin type ID'))->setReadOnly(TRUE);
     $properties['plugin_id'] = DataDefinition::create('plugin_id')->setLabel(t('Plugin ID'));
     $properties['plugin_configuration'] = MapDataDefinition::create('plugin_configuration')->setLabel(t('Plugin configuration'));
     $properties['plugin_instance'] = MapDataDefinition::create('plugin_instance')->setLabel(t('Plugin instance'))->setComputed(TRUE);
     return $properties;
 }
 /**
  * {@inheritdoc}
  */
 public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition)
 {
     $properties = parent::propertyDefinitions($field_definition);
     $properties['plugin_instance'] = MapDataDefinition::create('payment_aware_plugin_instance')->setLabel(t('Plugin instance'))->setComputed(TRUE);
     return $properties;
 }