summaryrefslogtreecommitdiff
path: root/modules/simpletest
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2010-09-24 21:36:22 +0000
committerDries Buytaert <dries@buytaert.net>2010-09-24 21:36:22 +0000
commite22b2153a2a83b1d1eca60c62703514cd09a55aa (patch)
tree3a15f99951e57c3409b5dddb2729bb4ff368da0a /modules/simpletest
parent01f5742f19d0731aa28da41a220db0386eb4ce32 (diff)
downloadbrdo-e22b2153a2a83b1d1eca60c62703514cd09a55aa.tar.gz
brdo-e22b2153a2a83b1d1eca60c62703514cd09a55aa.tar.bz2
- Patch #140783 by sun: a select list without #default_value() always passes form validation.
Diffstat (limited to 'modules/simpletest')
-rw-r--r--modules/simpletest/tests/form.test61
-rw-r--r--modules/simpletest/tests/form_test.module94
2 files changed, 155 insertions, 0 deletions
diff --git a/modules/simpletest/tests/form.test b/modules/simpletest/tests/form.test
index 969f3f398..793d0c0bf 100644
--- a/modules/simpletest/tests/form.test
+++ b/modules/simpletest/tests/form.test
@@ -153,6 +153,67 @@ class FormsTestCase extends DrupalWebTestCase {
}
/**
+ * Tests validation of #type 'select' elements.
+ */
+ function testSelect() {
+ $form = $form_state = array();
+ $form = form_test_select($form, $form_state);
+ $error = '!name field is required.';
+ $this->drupalGet('form-test/select');
+
+ // Posting without any values should throw validation errors.
+ $this->drupalPost(NULL, array(), 'Submit');
+ $this->assertNoText(t($error, array('!name' => $form['select']['#title'])));
+ $this->assertNoText(t($error, array('!name' => $form['empty_value']['#title'])));
+ $this->assertNoText(t($error, array('!name' => $form['empty_value_one']['#title'])));
+ $this->assertText(t($error, array('!name' => $form['no_default']['#title'])));
+ $this->assertNoText(t($error, array('!name' => $form['no_default_optional']['#title'])));
+ $this->assertText(t($error, array('!name' => $form['no_default_empty_option']['#title'])));
+ $this->assertNoText(t($error, array('!name' => $form['no_default_empty_option_optional']['#title'])));
+ $this->assertText(t($error, array('!name' => $form['no_default_empty_value']['#title'])));
+ $this->assertText(t($error, array('!name' => $form['no_default_empty_value_one']['#title'])));
+ $this->assertNoText(t($error, array('!name' => $form['no_default_empty_value_optional']['#title'])));
+ $this->assertNoText(t($error, array('!name' => $form['multiple']['#title'])));
+ $this->assertNoText(t($error, array('!name' => $form['multiple_no_default']['#title'])));
+ $this->assertText(t($error, array('!name' => $form['multiple_no_default_required']['#title'])));
+
+ // Post values for required fields.
+ $edit = array(
+ 'no_default' => 'three',
+ 'no_default_empty_option' => 'three',
+ 'no_default_empty_value' => 'three',
+ 'no_default_empty_value_one' => 'three',
+ 'multiple_no_default_required[]' => 'three',
+ );
+ $this->drupalPost(NULL, $edit, 'Submit');
+ $values = drupal_json_decode($this->drupalGetContent());
+
+ // Verify expected values.
+ $expected = array(
+ 'select' => 'one',
+ 'empty_value' => 'one',
+ 'empty_value_one' => 'one',
+ 'no_default' => 'three',
+ 'no_default_optional' => '',
+ 'no_default_empty_option' => 'three',
+ 'no_default_empty_option_optional' => '',
+ 'no_default_empty_value' => 'three',
+ 'no_default_empty_value_one' => 'three',
+ 'no_default_empty_value_optional' => 0,
+ 'multiple' => array('two' => 'two'),
+ 'multiple_no_default' => array(),
+ 'multiple_no_default_required' => array('three' => 'three'),
+ );
+ foreach ($expected as $key => $value) {
+ $this->assertIdentical($values[$key], $value, t('@name: @actual is equal to @expected.', array(
+ '@name' => $key,
+ '@actual' => var_export($values[$key], TRUE),
+ '@expected' => var_export($value, TRUE),
+ )));
+ }
+ }
+
+ /**
* Test handling of disabled elements.
*
* @see _form_test_disabled_elements()
diff --git a/modules/simpletest/tests/form_test.module b/modules/simpletest/tests/form_test.module
index 17988cdaf..ca3538c75 100644
--- a/modules/simpletest/tests/form_test.module
+++ b/modules/simpletest/tests/form_test.module
@@ -92,6 +92,12 @@ function form_test_menu() {
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
+ $items['form-test/select'] = array(
+ 'title' => t('Select'),
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('form_test_select'),
+ 'access callback' => TRUE,
+ );
$items['form-test/disabled-elements'] = array(
'title' => t('Form test'),
@@ -786,6 +792,94 @@ function _form_test_checkbox_submit($form, &$form_state) {
}
/**
+ * Builds a form to test #type 'select' validation.
+ */
+function form_test_select($form, &$form_state) {
+ $base = array(
+ '#type' => 'select',
+ '#options' => drupal_map_assoc(array('one', 'two', 'three')),
+ );
+
+ $form['select'] = $base + array(
+ '#title' => '#default_value one',
+ '#default_value' => 'one',
+ );
+ $form['empty_value'] = $base + array(
+ '#title' => '#default_value one, #empty_value 0',
+ '#default_value' => 'one',
+ '#empty_value' => 0,
+ );
+ $form['empty_value_one'] = $base + array(
+ '#title' => '#default_value = #empty_value',
+ '#default_value' => 'one',
+ '#empty_value' => 'one',
+ );
+
+ $form['no_default'] = $base + array(
+ '#title' => 'No #default_value',
+ );
+ $form['no_default_optional'] = $base + array(
+ '#title' => 'No #default_value, not #required',
+ '#required' => FALSE,
+ '#description' => 'Should result in an empty string (default of #empty_value), because it is optional.',
+ );
+
+ $form['no_default_empty_option'] = $base + array(
+ '#title' => 'No #default_value, #empty_option',
+ '#empty_option' => '- Choose -',
+ );
+ $form['no_default_empty_option_optional'] = $base + array(
+ '#title' => 'No #default_value, not #required, #empty_option',
+ '#required' => FALSE,
+ '#empty_option' => '- Dismiss -',
+ '#description' => 'Should result in an empty string (default of #empty_value), because it is optional.',
+ );
+
+ $form['no_default_empty_value'] = $base + array(
+ '#title' => 'No #default_value, #empty_value 0',
+ '#empty_value' => 0,
+ '#description' => 'Should never result in 0.',
+ );
+ $form['no_default_empty_value_one'] = $base + array(
+ '#title' => 'No #default_value, #empty_value one',
+ '#empty_value' => 'one',
+ '#description' => 'A mistakenly assigned #empty_value contained in #options should not be valid.',
+ );
+ $form['no_default_empty_value_optional'] = $base + array(
+ '#title' => 'No #default_value, not #required, #empty_value 0',
+ '#required' => FALSE,
+ '#empty_value' => 0,
+ '#description' => 'Should result in 0, because it is optional.',
+ );
+
+ $form['multiple'] = $base + array(
+ '#title' => '#multiple, #default_value two',
+ '#default_value' => array('two'),
+ '#multiple' => TRUE,
+ );
+ $form['multiple_no_default'] = $base + array(
+ '#title' => '#multiple, no #default_value',
+ '#multiple' => TRUE,
+ );
+ $form['multiple_no_default_required'] = $base + array(
+ '#title' => '#multiple, #required, no #default_value',
+ '#required' => TRUE,
+ '#multiple' => TRUE,
+ );
+
+ $form['submit'] = array('#type' => 'submit', '#value' => 'Submit');
+ return $form;
+}
+
+/**
+ * Form submit handler for form_test_select().
+ */
+function form_test_select_submit($form, &$form_state) {
+ drupal_json_output($form_state['values']);
+ exit();
+}
+
+/**
* Build a form to test disabled elements.
*/
function _form_test_disabled_elements($form, &$form_state) {