Issue #1026878 by LoMo, pillarsdotnet: Fixed Float and Decimal values not fully validated.

merge-requests/26/head
webchick 2011-06-26 22:42:06 -07:00
parent 3d1ed2dab7
commit 9e46929974
2 changed files with 36 additions and 2 deletions

View File

@ -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);
}

View File

@ -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.')
);
}
}
}