diff --git a/core/modules/datetime/lib/Drupal/datetime/Plugin/Field/FieldType/DateTimeFieldItemList.php b/core/modules/datetime/lib/Drupal/datetime/Plugin/Field/FieldType/DateTimeFieldItemList.php index 1c45951..e102c0e 100644 --- a/core/modules/datetime/lib/Drupal/datetime/Plugin/Field/FieldType/DateTimeFieldItemList.php +++ b/core/modules/datetime/lib/Drupal/datetime/Plugin/Field/FieldType/DateTimeFieldItemList.php @@ -2,7 +2,7 @@ /** * @file - * Contains \Drupal\datetime\Plugin\Field\FieldType\DateItemFieldItemList. + * Contains \Drupal\datetime\Plugin\Field\FieldType\DateTimeFieldItemList. */ namespace Drupal\datetime\Plugin\Field\FieldType; diff --git a/core/modules/datetime/lib/Drupal/datetime/Tests/DatetimeFieldTest.php b/core/modules/datetime/lib/Drupal/datetime/Tests/DatetimeFieldTest.php deleted file mode 100644 index 41b6fd2..0000000 --- a/core/modules/datetime/lib/Drupal/datetime/Tests/DatetimeFieldTest.php +++ /dev/null @@ -1,467 +0,0 @@ - 'Datetime Field', - 'description' => 'Tests datetime field functionality.', - 'group' => 'Datetime', - ); - } - - function setUp() { - parent::setUp(); - - $web_user = $this->drupalCreateUser(array( - 'access content', - 'view test entity', - 'administer entity_test content', - 'administer content types', - 'administer node fields', - )); - $this->drupalLogin($web_user); - - // Create a field with settings to validate. - $this->field = entity_create('field_entity', array( - 'name' => drupal_strtolower($this->randomName()), - 'entity_type' => 'entity_test', - 'type' => 'datetime', - 'settings' => array('datetime_type' => 'date'), - )); - $this->field->save(); - $this->instance = entity_create('field_instance', array( - 'field_name' => $this->field->name, - 'entity_type' => 'entity_test', - 'bundle' => 'entity_test', - )); - $this->instance->save(); - - entity_get_form_display($this->instance->entity_type, $this->instance->bundle, 'default') - ->setComponent($this->field->name, array( - 'type' => 'datetime_default', - )) - ->save(); - - $this->display_options = array( - 'type' => 'datetime_default', - 'label' => 'hidden', - 'settings' => array('format_type' => 'medium'), - ); - entity_get_display($this->instance->entity_type, $this->instance->bundle, 'full') - ->setComponent($this->field->name, $this->display_options) - ->save(); - } - - /** - * Tests date field functionality. - */ - function testDateField() { - $field_name = $this->field->name; - - // Display creation form. - $this->drupalGet('entity_test/add'); - $this->assertFieldByName("{$field_name}[0][value][date]", '', 'Date element found.'); - $this->assertNoFieldByName("{$field_name}[0][value][time]", '', 'Time element not found.'); - - // Submit a valid date and ensure it is accepted. - $value = '2012-12-31 00:00:00'; - $date = new DrupalDateTime($value); - $format_type = $date->canUseIntl() ? DrupalDateTime::INTL : DrupalDateTime::PHP; - $date_format = entity_load('date_format', 'html_date')->getPattern($format_type); - $time_format = entity_load('date_format', 'html_time')->getPattern($format_type); - - $edit = array( - 'user_id' => 1, - 'name' => $this->randomName(), - "{$field_name}[0][value][date]" => $date->format($date_format), - ); - $this->drupalPostForm(NULL, $edit, t('Save')); - preg_match('|entity_test/manage/(\d+)|', $this->url, $match); - $id = $match[1]; - $this->assertText(t('entity_test @id has been created.', array('@id' => $id))); - $this->assertRaw($date->format($date_format)); - $this->assertNoRaw($date->format($time_format)); - - // The expected values will use the default time. - datetime_date_default_time($date); - - // Verify that the date is output according to the formatter settings. - $options = array( - 'format_type' => array('short', 'medium', 'long'), - ); - foreach ($options as $setting => $values) { - foreach ($values as $new_value) { - // Update the entity display settings. - $this->display_options['settings'] = array($setting => $new_value); - entity_get_display($this->instance->entity_type, $this->instance->bundle, 'full') - ->setComponent($field_name, $this->display_options) - ->save(); - - $this->renderTestEntity($id); - switch ($setting) { - case 'format_type': - // Verify that a date is displayed. - $expected = format_date($date->getTimestamp(), $new_value); - $this->renderTestEntity($id); - $this->assertText($expected, format_string('Formatted date field using %value format displayed as %expected.', array('%value' => $new_value, '%expected' => $expected))); - break; - } - } - } - - // Verify that the plain formatter works. - $this->display_options['type'] = 'datetime_plain'; - entity_get_display($this->instance->entity_type, $this->instance->bundle, 'full') - ->setComponent($field_name, $this->display_options) - ->save(); - $expected = $date->format(DATETIME_DATE_STORAGE_FORMAT); - $this->renderTestEntity($id); - $this->assertText($expected, format_string('Formatted date field using plain format displayed as %expected.', array('%expected' => $expected))); - } - - /** - * Tests date and time field. - */ - function testDatetimeField() { - $field_name = $this->field->name; - // Change the field to a datetime field. - $this->field->settings['datetime_type'] = 'datetime'; - $this->field->save(); - - // Display creation form. - $this->drupalGet('entity_test/add'); - $this->assertFieldByName("{$field_name}[0][value][date]", '', 'Date element found.'); - $this->assertFieldByName("{$field_name}[0][value][time]", '', 'Time element found.'); - - // Submit a valid date and ensure it is accepted. - $value = '2012-12-31 00:00:00'; - $date = new DrupalDateTime($value); - $format_type = $date->canUseIntl() ? DrupalDateTime::INTL : DrupalDateTime::PHP; - $date_format = entity_load('date_format', 'html_date')->getPattern($format_type); - $time_format = entity_load('date_format', 'html_time')->getPattern($format_type); - - $edit = array( - 'user_id' => 1, - 'name' => $this->randomName(), - "{$field_name}[0][value][date]" => $date->format($date_format), - "{$field_name}[0][value][time]" => $date->format($time_format), - ); - $this->drupalPostForm(NULL, $edit, t('Save')); - preg_match('|entity_test/manage/(\d+)|', $this->url, $match); - $id = $match[1]; - $this->assertText(t('entity_test @id has been created.', array('@id' => $id))); - $this->assertRaw($date->format($date_format)); - $this->assertRaw($date->format($time_format)); - - // Verify that the date is output according to the formatter settings. - $options = array( - 'format_type' => array('short', 'medium', 'long'), - ); - foreach ($options as $setting => $values) { - foreach ($values as $new_value) { - // Update the entity display settings. - $this->display_options['settings'] = array($setting => $new_value); - entity_get_display($this->instance->entity_type, $this->instance->bundle, 'full') - ->setComponent($field_name, $this->display_options) - ->save(); - - $this->renderTestEntity($id); - switch ($setting) { - case 'format_type': - // Verify that a date is displayed. - $expected = format_date($date->getTimestamp(), $new_value); - $this->renderTestEntity($id); - $this->assertText($expected, format_string('Formatted date field using %value format displayed as %expected.', array('%value' => $new_value, '%expected' => $expected))); - break; - } - } - } - - // Verify that the plain formatter works. - $this->display_options['type'] = 'datetime_plain'; - entity_get_display($this->instance->entity_type, $this->instance->bundle, 'full') - ->setComponent($field_name, $this->display_options) - ->save(); - $expected = $date->format(DATETIME_DATETIME_STORAGE_FORMAT); - $this->renderTestEntity($id); - $this->assertText($expected, format_string('Formatted date field using plain format displayed as %expected.', array('%expected' => $expected))); - } - - /** - * Tests Date List Widget functionality. - */ - function testDatelistWidget() { - $field_name = $this->field->name; - // Change the field to a datetime field. - $this->field->settings['datetime_type'] = 'datetime'; - $this->field->save(); - - // Change the widget to a datelist widget. - entity_get_form_display($this->instance->entity_type, $this->instance->bundle, 'default') - ->setComponent($field_name, array( - 'type' => 'datetime_datelist', - 'settings' => array( - 'increment' => 1, - 'date_order' => 'YMD', - 'time_type' => '12', - ), - )) - ->save(); - field_cache_clear(); - - // Display creation form. - $this->drupalGet('entity_test/add'); - - $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-year\"]", NULL, 'Year element found.'); - $this->assertOptionSelected("edit-$field_name-0-value-year", '', 'No year selected.'); - $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-month\"]", NULL, 'Month element found.'); - $this->assertOptionSelected("edit-$field_name-0-value-month", '', 'No month selected.'); - $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-day\"]", NULL, 'Day element found.'); - $this->assertOptionSelected("edit-$field_name-0-value-day", '', 'No day selected.'); - $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-hour\"]", NULL, 'Hour element found.'); - $this->assertOptionSelected("edit-$field_name-0-value-hour", '', 'No hour selected.'); - $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-minute\"]", NULL, 'Minute element found.'); - $this->assertOptionSelected("edit-$field_name-0-value-minute", '', 'No minute selected.'); - $this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-value-second\"]", NULL, 'Second element not found.'); - $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-ampm\"]", NULL, 'AMPM element found.'); - $this->assertOptionSelected("edit-$field_name-0-value-ampm", '', 'No ampm selected.'); - - // Submit a valid date and ensure it is accepted. - $date_value = array('year' => 2012, 'month' => 12, 'day' => 31, 'hour' => 5, 'minute' => 15); - - $edit = array( - 'user_id' => 1, - 'name' => $this->randomName(), - ); - // Add the ampm indicator since we are testing 12 hour time. - $date_value['ampm'] = 'am'; - foreach ($date_value as $part => $value) { - $edit["{$field_name}[0][value][$part]"] = $value; - } - - $this->drupalPostForm(NULL, $edit, t('Save')); - preg_match('|entity_test/manage/(\d+)|', $this->url, $match); - $id = $match[1]; - $this->assertText(t('entity_test @id has been created.', array('@id' => $id))); - - $this->assertOptionSelected("edit-$field_name-0-value-year", '2012', 'Correct year selected.'); - $this->assertOptionSelected("edit-$field_name-0-value-month", '12', 'Correct month selected.'); - $this->assertOptionSelected("edit-$field_name-0-value-day", '31', 'Correct day selected.'); - $this->assertOptionSelected("edit-$field_name-0-value-hour", '5', 'Correct hour selected.'); - $this->assertOptionSelected("edit-$field_name-0-value-minute", '15', 'Correct minute selected.'); - $this->assertOptionSelected("edit-$field_name-0-value-ampm", 'am', 'Correct ampm selected.'); - } - - /** - * Test default value functionality. - */ - function testDefaultValue() { - // Create a test content type. - $this->drupalCreateContentType(array('type' => 'date_content')); - - // Create a field with settings to validate. - $field = entity_create('field_entity', array( - 'name' => drupal_strtolower($this->randomName()), - 'entity_type' => 'node', - 'type' => 'datetime', - 'settings' => array('datetime_type' => 'date'), - )); - $field->save(); - - $instance = entity_create('field_instance', array( - 'field_name' => $field->name, - 'entity_type' => 'node', - 'bundle' => 'date_content', - )); - $instance->save(); - - // Set now as default_value. - $instance_edit = array( - 'default_value_input[default_date]' => 'now', - ); - $this->drupalPostForm('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->name, $instance_edit, t('Save settings')); - - // Check that default value is selected in default value form. - $this->drupalGet('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->name); - $this->assertRaw('', 'The default value is selected in instance settings page'); - - // Check if default_date has been stored successfully. - $config_entity = $this->container->get('config.factory')->get('field.instance.node.date_content.' . $field->name)->get(); - $this->assertEqual($config_entity['default_value'][0]['default_date'], 'now', 'Default value has been stored succesfully'); - - // Clean field_info cache in order to avoid stale cache values. - field_info_cache_clear(); - - // Create a new node to check that datetime field default value is today. - $new_node = entity_create('node', array('type' => 'date_content')); - $expected_date = new DrupalDateTime('now', DATETIME_STORAGE_TIMEZONE); - $this->assertEqual($new_node->get($field->name)->offsetGet(0)->value, $expected_date->format(DATETIME_DATE_STORAGE_FORMAT)); - - // Remove default value. - $instance_edit = array( - 'default_value_input[default_date]' => '', - ); - $this->drupalPostForm('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->name, $instance_edit, t('Save settings')); - - // Check that default value is selected in default value form. - $this->drupalGet('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->name); - $this->assertRaw('', 'The default value is selected in instance settings page'); - - // Check if default_date has been stored successfully. - $config_entity = $this->container->get('config.factory')->get('field.instance.node.date_content.' . $field->name)->get(); - $this->assertTrue(empty($config_entity['default_value']), 'Empty default value has been stored succesfully'); - - // Clean field_info cache in order to avoid stale cache values. - field_info_cache_clear(); - - // Create a new node to check that datetime field default value is today. - $new_node = entity_create('node', array('type' => 'date_content')); - $this->assertNull($new_node->get($field->name)->offsetGet(0)->value, 'Default value is not set'); - } - - /** - * Test that invalid values are caught and marked as invalid. - */ - function testInvalidField() { - - // Change the field to a datetime field. - $this->field->settings['datetime_type'] = 'datetime'; - $this->field->save(); - $field_name = $this->field->name; - - // Display creation form. - $this->drupalGet('entity_test/add'); - $this->assertFieldByName("{$field_name}[0][value][date]", '', 'Date element found.'); - $this->assertFieldByName("{$field_name}[0][value][time]", '', 'Time element found.'); - - // Submit invalid dates and ensure they is not accepted. - $date_value = ''; - $edit = array( - "{$field_name}[0][value][date]" => $date_value, - "{$field_name}[0][value][time]" => '12:00:00', - ); - $this->drupalPostForm(NULL, $edit, t('Save')); - $this->assertText('date is invalid', 'Empty date value has been caught.'); - - $date_value = 'aaaa-12-01'; - $edit = array( - "{$field_name}[0][value][date]" => $date_value, - "{$field_name}[0][value][time]" => '00:00:00', - ); - $this->drupalPostForm(NULL, $edit, t('Save')); - $this->assertText('date is invalid', format_string('Invalid year value %date has been caught.', array('%date' => $date_value))); - - $date_value = '2012-75-01'; - $edit = array( - "{$field_name}[0][value][date]" => $date_value, - "{$field_name}[0][value][time]" => '00:00:00', - ); - $this->drupalPostForm(NULL, $edit, t('Save')); - $this->assertText('date is invalid', format_string('Invalid month value %date has been caught.', array('%date' => $date_value))); - - $date_value = '2012-12-99'; - $edit = array( - "{$field_name}[0][value][date]" => $date_value, - "{$field_name}[0][value][time]" => '00:00:00', - ); - $this->drupalPostForm(NULL, $edit, t('Save')); - $this->assertText('date is invalid', format_string('Invalid day value %date has been caught.', array('%date' => $date_value))); - - $date_value = '2012-12-01'; - $time_value = ''; - $edit = array( - "{$field_name}[0][value][date]" => $date_value, - "{$field_name}[0][value][time]" => $time_value, - ); - $this->drupalPostForm(NULL, $edit, t('Save')); - $this->assertText('date is invalid', 'Empty time value has been caught.'); - - $date_value = '2012-12-01'; - $time_value = '49:00:00'; - $edit = array( - "{$field_name}[0][value][date]" => $date_value, - "{$field_name}[0][value][time]" => $time_value, - ); - $this->drupalPostForm(NULL, $edit, t('Save')); - $this->assertText('date is invalid', format_string('Invalid hour value %time has been caught.', array('%time' => $time_value))); - - $date_value = '2012-12-01'; - $time_value = '12:99:00'; - $edit = array( - "{$field_name}[0][value][date]" => $date_value, - "{$field_name}[0][value][time]" => $time_value, - ); - $this->drupalPostForm(NULL, $edit, t('Save')); - $this->assertText('date is invalid', format_string('Invalid minute value %time has been caught.', array('%time' => $time_value))); - - $date_value = '2012-12-01'; - $time_value = '12:15:99'; - $edit = array( - "{$field_name}[0][value][date]" => $date_value, - "{$field_name}[0][value][time]" => $time_value, - ); - $this->drupalPostForm(NULL, $edit, t('Save')); - $this->assertText('date is invalid', format_string('Invalid second value %time has been caught.', array('%time' => $time_value))); - } - - /** - * Renders a entity_test and sets the output in the internal browser. - * - * @param int $id - * The entity_test ID to render. - * @param string $view_mode - * (optional) The view mode to use for rendering. Defaults to 'full'. - * @param bool $reset - * (optional) Whether to reset the entity_test controller cache. Defaults to - * TRUE to simplify testing. - */ - protected function renderTestEntity($id, $view_mode = 'full', $reset = TRUE) { - if ($reset) { - entity_get_controller('entity_test')->resetCache(array($id)); - } - $entity = entity_load('entity_test', $id); - $display = entity_get_display('entity_test', $entity->bundle(), 'full'); - field_attach_prepare_view('entity_test', array($entity->id() => $entity), array($entity->bundle() => $display), $view_mode); - $entity->content = field_attach_view($entity, $display, $view_mode); - - $output = drupal_render($entity->content); - $this->drupalSetContent($output); - $this->verbose($output); - } - -}