diff options
Diffstat (limited to 'modules/simpletest')
-rw-r--r-- | modules/simpletest/tests/form.test | 61 | ||||
-rw-r--r-- | modules/simpletest/tests/form_test.module | 94 |
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) { |