diff options
author | Angie Byron <webchick@24967.no-reply.drupal.org> | 2010-10-23 21:03:22 +0000 |
---|---|---|
committer | Angie Byron <webchick@24967.no-reply.drupal.org> | 2010-10-23 21:03:22 +0000 |
commit | e8716ebf2572befbae7d73639e1c769f9b709b9b (patch) | |
tree | d22e6feac69c410b11814c869655b25f23c2a54d | |
parent | c10220f9bf7e5c520cc69b3f106b4fbfb4239505 (diff) | |
download | brdo-e8716ebf2572befbae7d73639e1c769f9b709b9b.tar.gz brdo-e8716ebf2572befbae7d73639e1c769f9b709b9b.tar.bz2 |
#950134 by mfb: Fixed Number module maxlength prevents saving negative decimal.
-rw-r--r-- | modules/field/modules/number/number.info | 1 | ||||
-rw-r--r-- | modules/field/modules/number/number.module | 5 | ||||
-rw-r--r-- | modules/field/modules/number/number.test | 75 |
3 files changed, 79 insertions, 2 deletions
diff --git a/modules/field/modules/number/number.info b/modules/field/modules/number/number.info index 8d9756fef..9bf8243f3 100644 --- a/modules/field/modules/number/number.info +++ b/modules/field/modules/number/number.info @@ -6,4 +6,5 @@ version = VERSION core = 7.x dependencies[] = field files[] = number.module +files[] = number.test required = TRUE diff --git a/modules/field/modules/number/number.module b/modules/field/modules/number/number.module index 1f6ac7f89..aa792ab39 100644 --- a/modules/field/modules/number/number.module +++ b/modules/field/modules/number/number.module @@ -330,8 +330,9 @@ function number_field_widget_form(&$form, &$form_state, $field, $instance, $lang '#default_value' => $value, // Allow a slightly larger size that the field length to allow for some // configurations where all characters won't fit in input field. - '#size' => $field['type'] == 'number_decimal' ? $field['settings']['precision'] + 2 : 12, - '#maxlength' => $field['type'] == 'number_decimal' ? $field['settings']['precision'] : 10, + '#size' => $field['type'] == 'number_decimal' ? $field['settings']['precision'] + 4 : 12, + // Allow two extra characters for signed values and decimal separator. + '#maxlength' => $field['type'] == 'number_decimal' ? $field['settings']['precision'] + 2 : 10, // Extract the number type from the field type name for easier validation. '#number_type' => str_replace('number_', '', $field['type']), ); diff --git a/modules/field/modules/number/number.test b/modules/field/modules/number/number.test new file mode 100644 index 000000000..a15b6e6aa --- /dev/null +++ b/modules/field/modules/number/number.test @@ -0,0 +1,75 @@ +<?php +// $Id$ + +/** + * @file + * Tests for number field types. + */ + +/** + * Tests for number field types. + */ +class NumberFieldTestCase extends DrupalWebTestCase { + protected $field; + protected $instance; + protected $web_user; + + public static function getInfo() { + return array( + 'name' => 'Number field', + 'description' => 'Test the creation of number fields.', + 'group' => 'Field types' + ); + } + + function setUp() { + parent::setUp('field_test'); + $this->web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content')); + $this->drupalLogin($this->web_user); + } + + /** + * Test number_decimal field. + */ + function testNumberDecimalField() { + // Create a field with settings to validate. + $this->field = array( + 'field_name' => drupal_strtolower($this->randomName()), + 'type' => 'number_decimal', + 'settings' => array( + 'precision' => 8, 'scale' => 4, 'decimal_separator' => '.', + ) + ); + field_create_field($this->field); + $this->instance = array( + 'field_name' => $this->field['field_name'], + 'entity_type' => 'test_entity', + 'bundle' => 'test_bundle', + 'widget' => array( + 'type' => 'number', + ), + 'display' => array( + 'default' => array( + 'type' => 'number_decimal', + ), + ), + ); + field_create_instance($this->instance); + + // Display creation form. + $this->drupalGet('test-entity/add/test-bundle'); + $langcode = LANGUAGE_NONE; + $this->assertFieldByName("{$this->field['field_name']}[$langcode][0][value]", '', t('Widget is displayed')); + + // Submit a signed decimal value within the allowed precision and scale. + $value = '-1234.5678'; + $edit = array( + "{$this->field['field_name']}[$langcode][0][value]" => $value, + ); + $this->drupalPost(NULL, $edit, t('Save')); + preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match); + $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.')); + } +} |