summaryrefslogtreecommitdiff
path: root/includes/tests/form.test
diff options
context:
space:
mode:
Diffstat (limited to 'includes/tests/form.test')
-rw-r--r--includes/tests/form.test74
1 files changed, 74 insertions, 0 deletions
diff --git a/includes/tests/form.test b/includes/tests/form.test
new file mode 100644
index 000000000..70cb131cb
--- /dev/null
+++ b/includes/tests/form.test
@@ -0,0 +1,74 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Unit tests for the Drupal Form API.
+ */
+
+class FormsTestCase extends DrupalWebTestCase {
+
+ function getInfo() {
+ return array(
+ 'name' => t('Required field validation'),
+ 'description' => t('Carriage returns, tabs, and spaces are not valid content for a required field.'),
+ 'group' => t('Form API'),
+ );
+ }
+
+ /**
+ * Check several empty values for required forms elements.
+ *
+ * If the form field is found in form_get_errors() then the test pass.
+ */
+ function testRequiredFields() {
+ // Originates from http://drupal.org/node/117748
+ // Sets of empty strings and arrays
+ $empty_strings = array('""' => "", '"\n"' => "\n", '" "' => " ", '"\t"' => "\t", '" \n\t "' => " \n\t ", '"\n\n\n\n\n"' => "\n\n\n\n\n");
+ $empty_arrays = array('array()' => array());
+
+ $elements['textfield']['element'] = array('#title' => $this->randomName(), '#type' => 'textfield', '#required' => TRUE);
+ $elements['textfield']['empty_values'] = $empty_strings;
+
+ $elements['password']['element'] = array('#title' => $this->randomName(), '#type' => 'password', '#required' => TRUE);
+ $elements['password']['empty_values'] = $empty_strings;
+
+ $elements['password_confirm']['element'] = array('#title' => $this->randomName(), '#type' => 'password_confirm', '#required' => TRUE);
+ $elements['password_confirm']['empty_values'] = $empty_strings;
+
+ $elements['textarea']['element'] = array('#title' => $this->randomName(), '#type' => 'textarea', '#required' => TRUE);
+ $elements['textarea']['empty_values'] = $empty_strings;
+
+ $elements['radios']['element'] = array('#title' => $this->randomName(), '#type' => 'radios', '#required' => TRUE, '#options' => array($this->randomName(), $this->randomName(), $this->randomName()));
+ $elements['radios']['empty_values'] = $empty_arrays;
+
+ $elements['checkboxes']['element'] = array('#title' => $this->randomName(), '#type' => 'checkboxes', '#required' => TRUE,'#options' => array($this->randomName(), $this->randomName(), $this->randomName()));
+ $elements['checkboxes']['empty_values'] = $empty_arrays;
+
+ $elements['select']['element'] = array('#title' => $this->randomName(), '#type' => 'select', '#required' => TRUE, '#options' => array($this->randomName(), $this->randomName(), $this->randomName()));
+ $elements['select']['empty_values'] = $empty_strings;
+
+ $elements['file']['element'] = array('#title' => $this->randomName(), '#type' => 'file', '#required' => TRUE);
+ $elements['file']['empty_values'] = $empty_strings;
+
+ // Go through all the elements and all the empty values for them
+ foreach ($elements as $type => $data) {
+ foreach ($data['empty_values'] as $key => $empty) {
+ $form_id = $this->randomName();
+ $form = $form_state = array();
+ $form['op'] = array('#type' => 'submit', '#value' => t('Submit'));
+ $element = $data['element']['#title'];
+ $form[$element] = $data['element'];
+ $form_state['values'][$element] = $empty;
+ $form['#post'] = $form_state['values'];
+ $form['#post']['form_id'] = $form_id;
+ drupal_prepare_form($form_id, $form, $form_state);
+ drupal_process_form($form_id, $form, $form_state);
+ $errors = form_get_errors();
+ $this->assertTrue(isset($errors[$element]), "Check empty($key) '$type' field '$element'");
+ }
+ }
+ // Clear the expected form error messages so they don't appear as exceptions.
+ drupal_get_messages();
+ }
+}