Issue #1026878 by LoMo, pillarsdotnet: Fixed Float and Decimal values not fully validated.
parent
3d1ed2dab7
commit
9e46929974
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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.')
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue