--- /dev/null
+<?php
+
+namespace Drupal\Tests\Driver;
+
+/**
+ * Tests the Drupal 7 field handlers.
+ */
+class Drupal7FieldHandlerTest extends FieldHandlerAbstractTest {
+
+ /**
+ * Tests the field handlers.
+ *
+ * @param string $class_name
+ * The name of the field handler class under test.
+ * @param object $entity
+ * An object representing an entity. Should contain a single property which
+ * represents a field containing a value.
+ * @param string $entity_type
+ * The entity type under test.
+ * @param array $field
+ * An associative array with the following keys:
+ * - 'field_name': the field name that is used for the property on $entity.
+ * - 'columns': an optional array containing the column names of the field
+ * as keys.
+ * @param array $expected_values
+ * The values in the expected format after expansion.
+ *
+ * @dataProvider dataProvider
+ */
+ public function testFieldHandlers($class_name, $entity, $entity_type, array $field, array $expected_values) {
+ $handler = $this->getMockHandler($class_name, $entity, $entity_type, $field);
+
+ $field_name = $field['field_name'];
+ $expanded_values = $handler->expand($this->values($entity->$field_name));
+ $this->assertArraySubset($expected_values, $expanded_values);
+ }
+
+ /**
+ * Data provider.
+ *
+ * @return array
+ * An array of test data.
+ */
+ public function dataProvider() {
+ return array(
+ // Test default text field provided as simple text.
+ array(
+ 'DefaultHandler',
+ (object) array('field_text' => 'Text'),
+ 'node',
+ array('field_name' => 'field_text'),
+ array('en' => array(array('value' => 'Text'))),
+ ),
+
+ // Test default text field provided as array.
+ array(
+ 'DefaultHandler',
+ (object) array('field_text' => array('Text')),
+ 'node',
+ array('field_name' => 'field_text'),
+ array('en' => array(array('value' => 'Text'))),
+ ),
+
+ // Test default field handler using custom field columns.
+ array(
+ 'DefaultHandler',
+ (object) array(
+ 'field_addressfield' => array(
+ array(
+ 'country' => 'BE',
+ 'locality' => 'Brussels',
+ 'thoroughfare' => 'Grote Markt 1',
+ 'postal_code' => '1000',
+ ),
+ ),
+ ),
+ 'node',
+ array('field_name' => 'field_addressfield'),
+ array(
+ 'en' => array(
+ array(
+ 'country' => 'BE',
+ 'locality' => 'Brussels',
+ 'thoroughfare' => 'Grote Markt 1',
+ 'postal_code' => '1000',
+ ),
+ ),
+ ),
+ ),
+
+ // Test single-value date field provided as simple text.
+ array(
+ 'DatetimeHandler',
+ (object) array('field_date' => '2015-01-01 00:00:00'),
+ 'node',
+ array('field_name' => 'field_date'),
+ array('en' => array(array('value' => '2015-01-01 00:00:00'))),
+ ),
+
+ // Test single-value date field provided as an array.
+ array(
+ 'DatetimeHandler',
+ (object) array('field_date' => array('2015-01-01 00:00:00')),
+ 'node',
+ array('field_name' => 'field_date'),
+ array('en' => array(array('value' => '2015-01-01 00:00:00'))),
+ ),
+
+ // Test double-value date field. Can only be provided as an array
+ // due to array type casting we perform in
+ // \Drupal\Driver\Fields\Drupal7\AbstractFieldHandler::__call()
+ array(
+ 'DatetimeHandler',
+ (object) array(
+ 'field_date' => array(
+ array(
+ '2015-01-01 00:00:00',
+ '2015-01-02 00:00:00',
+ ),
+ ),
+ ),
+ 'node',
+ array(
+ 'field_name' => 'field_date',
+ 'columns' => array('value' => '', 'value2' => ''),
+ ),
+ array(
+ 'en' => array(
+ array(
+ 'value' => '2015-01-01 00:00:00',
+ 'value2' => '2015-01-02 00:00:00',
+ ),
+ ),
+ ),
+ ),
+
+ // Test list boolean field with blank 'On' and 'Off' values.
+ array(
+ 'ListBooleanHandler',
+ (object) array('field_list_boolean' => array(0)),
+ 'node',
+ array(
+ 'field_name' => 'field_list_boolean',
+ 'settings' => array(
+ 'allowed_values' => array(
+ 0 => '',
+ 1 => '',
+ ),
+ ),
+ ),
+ array(
+ 'en' => array(
+ array(
+ 'value' => 0,
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+}