diff options
-rw-r--r-- | modules/field/modules/number/number.module | 16 | ||||
-rw-r--r-- | modules/field/modules/number/number.test | 22 |
2 files changed, 36 insertions, 2 deletions
diff --git a/modules/field/modules/number/number.module b/modules/field/modules/number/number.module index 20e380777..3c8132cb3 100644 --- a/modules/field/modules/number/number.module +++ b/modules/field/modules/number/number.module @@ -379,9 +379,21 @@ function number_field_widget_validate($element, &$form_state) { form_error($element, $message); } else { - // Substitute the decimal separator, if ($type == 'decimal' || $type == 'float') { - $value = strtr($value, $field['settings']['decimal_separator'], '.'); + // Verify that only one decimal separator exists in the field. + if (substr_count($value, $field['settings']['decimal_separator']) > 1) { + $message = t('%field: There should only be one decimal separator (@separator).', + array( + '%field' => t($instance['label']), + '@separator' => $field['settings']['decimal_separator'], + ) + ); + form_error($element, $message); + } + else { + // Substitute the decimal separator; things should be fine. + $value = strtr($value, $field['settings']['decimal_separator'], '.'); + } } form_set_value($element, $value, $form_state); } diff --git a/modules/field/modules/number/number.test b/modules/field/modules/number/number.test index ec100f189..3b0cbafae 100644 --- a/modules/field/modules/number/number.test +++ b/modules/field/modules/number/number.test @@ -70,5 +70,27 @@ class NumberFieldTestCase extends DrupalWebTestCase { $id = $match[1]; $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), t('Entity was created')); $this->assertRaw(round($value, 2), t('Value is displayed.')); + + // Try to create entries with more than one decimal separator; assert fail. + $wrong_entries = array( + '3.14.159', + '0..45469', + '..4589', + '6.459.52', + '6.3..25', + ); + + foreach ($wrong_entries as $wrong_entry) { + $this->drupalGet('test-entity/add/test-bundle'); + $edit = array( + "{$this->field['field_name']}[$langcode][0][value]" => $wrong_entry, + ); + $this->drupalPost(NULL, $edit, t('Save')); + $this->assertText( + t('There should only be one decimal separator (@separator)', + array('@separator' => $this->field['settings']['decimal_separator'])), + t('Correctly failed to save decimal value with more than one decimal point.') + ); + } } } |