From 5e915899d3233e00690db0231ef48bc86216bfae Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Fri, 6 Dec 2013 21:46:38 -0400 Subject: [PATCH] Issue #2114473 by plopesc: NumberDecimalFormatter settings form has not well defined '#weight' in its elements. --- .../FieldFormatter/NumberDecimalFormatter.php | 4 +- .../Drupal/number/Tests/NumberFieldTest.php | 139 ++++++++++++++++-- 2 files changed, 131 insertions(+), 12 deletions(-) diff --git a/core/modules/number/lib/Drupal/number/Plugin/Field/FieldFormatter/NumberDecimalFormatter.php b/core/modules/number/lib/Drupal/number/Plugin/Field/FieldFormatter/NumberDecimalFormatter.php index a911ee1ae893..dc474aacbd5a 100644 --- a/core/modules/number/lib/Drupal/number/Plugin/Field/FieldFormatter/NumberDecimalFormatter.php +++ b/core/modules/number/lib/Drupal/number/Plugin/Field/FieldFormatter/NumberDecimalFormatter.php @@ -42,7 +42,7 @@ public function settingsForm(array $form, array &$form_state) { '#title' => t('Decimal marker'), '#options' => array('.' => t('Decimal point'), ',' => t('Comma')), '#default_value' => $this->getSetting('decimal_separator'), - 'weight' => 5, + '#weight' => 5, ); $elements['scale'] = array( '#type' => 'select', @@ -50,7 +50,7 @@ public function settingsForm(array $form, array &$form_state) { '#options' => drupal_map_assoc(range(0, 10)), '#default_value' => $this->getSetting('scale'), '#description' => t('The number of digits to the right of the decimal.'), - 'weight' => 6, + '#weight' => 6, ); return $elements; diff --git a/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php b/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php index dd476febae04..4dfe210ac524 100644 --- a/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php +++ b/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php @@ -189,21 +189,140 @@ function testNumberIntegerField() { "fields[field_$field_name][type]" => 'number_integer', ); $this->drupalPostForm(NULL, $edit, t('Save')); + } + + /** + * Test default formatter behavior + */ + function testNumberFormatter() { + $type = drupal_strtolower($this->randomName()); + $float_field = drupal_strtolower($this->randomName()); + $integer_field = drupal_strtolower($this->randomName()); + $thousand_separators = array('', '.', ',', ' ', chr(8201), "'"); + $decimal_separators = array('.', ','); + $prefix = $this->randomName(); + $suffix = $this->randomName(); + $random_float = rand(0,pow(10,6)); + $random_integer = rand(0, pow(10,6)); + + // Create a content type containing float and integer fields. + $this->drupalCreateContentType(array('type' => $type)); + + entity_create('field_entity', array( + 'name' => $float_field, + 'entity_type' => 'node', + 'type' => 'number_float', + ))->save(); + + entity_create('field_entity', array( + 'name' => $integer_field, + 'entity_type' => 'node', + 'type' => 'number_integer', + ))->save(); + + entity_create('field_instance', array( + 'field_name' => $float_field, + 'entity_type' => 'node', + 'bundle' => $type, + 'settings' => array( + 'prefix' => $prefix, + 'suffix' => $suffix + ), + ))->save(); + + entity_create('field_instance', array( + 'field_name' => $integer_field, + 'entity_type' => 'node', + 'bundle' => $type, + 'settings' => array( + 'prefix' => $prefix, + 'suffix' => $suffix + ), + ))->save(); + + entity_get_form_display('node', $type, 'default') + ->setComponent($float_field, array( + 'type' => 'number', + 'settings' => array( + 'placeholder' => '0.00' + ), + )) + ->setComponent($integer_field, array( + 'type' => 'number', + 'settings' => array( + 'placeholder' => '0.00' + ), + )) + ->save(); + + entity_get_display('node', $type, 'default') + ->setComponent($float_field, array( + 'type' => 'number_decimal', + )) + ->setComponent($integer_field, array( + 'type' => 'number_unformatted', + )) + ->save(); + + // Create a node to test formatters. + $node = entity_create('node', array( + 'type' => $type, + 'title' => $this->randomName(), + $float_field => array( + 'value' => $random_float, + ), + $integer_field => array( + 'value' => $random_integer, + ), + )); + $node->save(); - // Configure the formatter to display the prefix and suffix. - $this->drupalPostAjaxForm(NULL, array(), "field_${field_name}_settings_edit"); - $edit = array("fields[field_${field_name}][settings_edit_form][settings][prefix_suffix]" => TRUE); - $this->drupalPostAjaxForm(NULL, $edit, "field_${field_name}_plugin_settings_update"); + // Go to manage display page. + $this->drupalGet("admin/structure/types/manage/$type/display"); + + // Configure number_decimal formatter for number_float_field + $thousand_separator = $thousand_separators[array_rand($thousand_separators)]; + $decimal_separator = $decimal_separators[array_rand($decimal_separators)]; + $scale = rand(0, 10); + + $this->drupalPostAjaxForm(NULL, array(), "${float_field}_settings_edit"); + $edit = array( + "fields[${float_field}][settings_edit_form][settings][prefix_suffix]" => TRUE, + "fields[${float_field}][settings_edit_form][settings][scale]" => $scale, + "fields[${float_field}][settings_edit_form][settings][decimal_separator]" => $decimal_separator, + "fields[${float_field}][settings_edit_form][settings][thousand_separator]" => $thousand_separator, + ); + $this->drupalPostAjaxForm(NULL, $edit, "${float_field}_plugin_settings_update"); $this->drupalPostForm(NULL, array(), t('Save')); - // Create new content and check that prefix and suffix are shown. - $rand_number = rand(); + // Check number_decimal and number_unformatted formatters behavior. + $this->drupalGet('node/' . $node->id()); + $float_formatted = number_format($random_float, $scale, $decimal_separator, $thousand_separator); + $this->assertRaw("$prefix$float_formatted$suffix", 'Prefix and suffix added'); + $this->assertRaw((string) $random_integer); + + // Configure the number_decimal formatter. + entity_get_display('node', $type, 'default') + ->setComponent($integer_field, array( + 'type' => 'number_integer', + )) + ->save(); + $this->drupalGet("admin/structure/types/manage/$type/display"); + + $thousand_separator = $thousand_separators[array_rand($thousand_separators)]; + + $this->drupalPostAjaxForm(NULL, array(), "${integer_field}_settings_edit"); $edit = array( - 'title[0][value]' => $this->randomName(), - 'field_' .$field_name . '[0][value]' => $rand_number, + "fields[${integer_field}][settings_edit_form][settings][prefix_suffix]" => FALSE, + "fields[${integer_field}][settings_edit_form][settings][thousand_separator]" => $thousand_separator, ); - $this->drupalPostForm("node/add/$type", $edit, t('Save')); + $this->drupalPostAjaxForm(NULL, $edit, "${integer_field}_plugin_settings_update"); + $this->drupalPostForm(NULL, array(), t('Save')); + + // Check number_integer formatter behavior. + $this->drupalGet('node/' . $node->id()); - $this->assertRaw("$prefix$rand_number$suffix", 'Prefix and suffix added'); + $integer_formatted = number_format($random_integer, 0, '', $thousand_separator); + $this->assertRaw($integer_formatted, 'Random integer formatted'); } } -- GitLab