Chris@0: entityType = 'entity_test'; Chris@0: $this->bundle = 'entity_test'; Chris@0: $this->createFieldWithStorage('', $this->entityType, $this->bundle); Chris@0: Chris@0: // Create an 'entity_test' entity. Chris@0: $this->entity = entity_create($this->entityType, [ Chris@0: 'type' => $this->bundle, Chris@0: ]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests that the number of values is validated against the field cardinality. Chris@0: */ Chris@0: public function testCardinalityConstraint() { Chris@0: $cardinality = $this->fieldTestData->field_storage->getCardinality(); Chris@0: $entity = $this->entity; Chris@0: Chris@0: for ($delta = 0; $delta < $cardinality + 1; $delta++) { Chris@0: $entity->{$this->fieldTestData->field_name}[] = ['value' => 1]; Chris@0: } Chris@0: Chris@0: // Validate the field. Chris@0: $violations = $entity->{$this->fieldTestData->field_name}->validate(); Chris@0: Chris@0: // Check that the expected constraint violations are reported. Chris@0: $this->assertEqual(count($violations), 1); Chris@0: $this->assertEqual($violations[0]->getPropertyPath(), ''); Chris@0: $this->assertEqual($violations[0]->getMessage(), t('%name: this field cannot hold more than @count values.', ['%name' => $this->fieldTestData->field->getLabel(), '@count' => $cardinality])); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests that constraints defined by the field type are validated. Chris@0: */ Chris@0: public function testFieldConstraints() { Chris@0: $cardinality = $this->fieldTestData->field_storage->getCardinality(); Chris@0: $entity = $this->entity; Chris@0: Chris@0: // The test is only valid if the field cardinality is greater than 2. Chris@0: $this->assertTrue($cardinality >= 2); Chris@0: Chris@0: // Set up values for the field. Chris@0: $expected_violations = []; Chris@0: for ($delta = 0; $delta < $cardinality; $delta++) { Chris@0: // All deltas except '1' have incorrect values. Chris@0: if ($delta == 1) { Chris@0: $value = 1; Chris@0: } Chris@0: else { Chris@0: $value = -1; Chris@0: $expected_violations[$delta . '.value'][] = t('%name does not accept the value -1.', ['%name' => $this->fieldTestData->field->getLabel()]); Chris@0: } Chris@0: $entity->{$this->fieldTestData->field_name}[] = $value; Chris@0: } Chris@0: Chris@0: // Validate the field. Chris@0: $violations = $entity->{$this->fieldTestData->field_name}->validate(); Chris@0: Chris@0: // Check that the expected constraint violations are reported. Chris@0: $violations_by_path = []; Chris@0: foreach ($violations as $violation) { Chris@0: $violations_by_path[$violation->getPropertyPath()][] = $violation->getMessage(); Chris@0: } Chris@0: $this->assertEqual($violations_by_path, $expected_violations); Chris@0: } Chris@0: Chris@0: }