summaryrefslogtreecommitdiff
path: root/modules/simpletest/tests/form.test
diff options
context:
space:
mode:
Diffstat (limited to 'modules/simpletest/tests/form.test')
-rw-r--r--modules/simpletest/tests/form.test81
1 files changed, 81 insertions, 0 deletions
diff --git a/modules/simpletest/tests/form.test b/modules/simpletest/tests/form.test
index 4661ad25f..1f76318f5 100644
--- a/modules/simpletest/tests/form.test
+++ b/modules/simpletest/tests/form.test
@@ -1352,3 +1352,84 @@ class FormsFileInclusionTestCase extends DrupalWebTestCase {
$this->assertText('Submit callback called.');
}
}
+
+/**
+ * Tests checkbox element.
+ */
+class FormCheckboxTestCase extends DrupalWebTestCase {
+
+ public static function getInfo() {
+ return array(
+ 'name' => 'Form API checkbox',
+ 'description' => 'Tests form API checkbox handling of various combinations of #default_value and #return_value.',
+ 'group' => 'Form API',
+ );
+ }
+
+ function setUp() {
+ parent::setUp('form_test');
+ }
+
+ function testFormCheckbox() {
+ // Ensure that the checked state is determined and rendered correctly for
+ // tricky combinations of default and return values.
+ foreach (array(FALSE, NULL, TRUE, 0, '0', '', 1, '1', 'foobar', '1foobar') as $default_value) {
+ // Only values that can be used for array indeces are supported for
+ // #return_value, with the exception of integer 0, which is not supported.
+ // @see form_process_checkbox().
+ foreach (array('0', '', 1, '1', 'foobar', '1foobar') as $return_value) {
+ $form_array = drupal_get_form('form_test_checkbox_type_juggling', $default_value, $return_value);
+ $form = drupal_render($form_array);
+ if ($default_value === TRUE) {
+ $checked = TRUE;
+ }
+ elseif ($return_value === '0') {
+ $checked = ($default_value === '0');
+ }
+ elseif ($return_value === '') {
+ $checked = ($default_value === '');
+ }
+ elseif ($return_value === 1 || $return_value === '1') {
+ $checked = ($default_value === 1 || $default_value === '1');
+ }
+ elseif ($return_value === 'foobar') {
+ $checked = ($default_value === 'foobar');
+ }
+ elseif ($return_value === '1foobar') {
+ $checked = ($default_value === '1foobar');
+ }
+ $checked_in_html = strpos($form, 'checked') !== FALSE;
+ $message = t('#default_value is %default_value #return_value is %return_value.', array('%default_value' => var_export($default_value, TRUE), '%return_value' => var_export($return_value, TRUE)));
+ $this->assertIdentical($checked, $checked_in_html, $message);
+ }
+ }
+
+ // Ensure that $form_state['values'] is populated correctly for a checkboxes
+ // group that includes a 0-indexed array of options.
+ $results = json_decode($this->drupalPost('form-test/checkboxes-zero', array(), 'Save'));
+ $this->assertIdentical($results->checkbox_off, array(0, 0, 0), t('All three in checkbox_off are zeroes: off.'));
+ $this->assertIdentical($results->checkbox_zero_default, array('0', 0, 0), t('The first choice is on in checkbox_zero_default'));
+ $this->assertIdentical($results->checkbox_string_zero_default, array('0', 0, 0), t('The first choice is on in checkbox_string_zero_default'));
+ $edit = array('checkbox_off[0]' => '0');
+ $results = json_decode($this->drupalPost('form-test/checkboxes-zero', $edit, 'Save'));
+ $this->assertIdentical($results->checkbox_off, array('0', 0, 0), t('The first choice is on in checkbox_off but the rest is not'));
+
+ // Ensure that each checkbox is rendered correctly for a checkboxes group
+ // that includes a 0-indexed array of options.
+ $this->drupalPost('form-test/checkboxes-zero/0', array(), 'Save');
+ $checkboxes = $this->xpath('//input[@type="checkbox"]');
+ foreach ($checkboxes as $checkbox) {
+ $checked = isset($checkbox['checked']);
+ $name = (string) $checkbox['name'];
+ $this->assertIdentical($checked, $name == 'checkbox_zero_default[0]' || $name == 'checkbox_string_zero_default[0]', t('Checkbox %name correctly checked', array('%name' => $name)));
+ }
+ $edit = array('checkbox_off[0]' => '0');
+ $this->drupalPost('form-test/checkboxes-zero/0', $edit, 'Save');
+ $checkboxes = $this->xpath('//input[@type="checkbox"]');
+ foreach ($checkboxes as $checkbox) {
+ $checked = isset($checkbox['checked']);
+ $name = (string) $checkbox['name'];
+ $this->assertIdentical($checked, $name == 'checkbox_off[0]' || $name == 'checkbox_zero_default[0]' || $name == 'checkbox_string_zero_default[0]', t('Checkbox %name correctly checked', array('%name' => $name)));
+ }
+ }
+}