From 3a60a9b8cf43b1058070a1b535c0cb729a87fd03 Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Sun, 21 Mar 2010 21:31:34 +0000 Subject: - Patch #735808 by fago: fix multiple field value form to work with form API persistence. Added tests. --- modules/simpletest/tests/form.test | 66 +++++++++++++++++++++++++++++++ modules/simpletest/tests/form_test.module | 27 +++++++++++++ 2 files changed, 93 insertions(+) (limited to 'modules/simpletest') diff --git a/modules/simpletest/tests/form.test b/modules/simpletest/tests/form.test index 87dd698d8..b19ca7655 100644 --- a/modules/simpletest/tests/form.test +++ b/modules/simpletest/tests/form.test @@ -849,3 +849,69 @@ class FormsProgrammaticTestCase extends DrupalWebTestCase { } } } + + +/** + * Tests rebuilding of arbitrary forms by altering them. + */ +class FormsArbitraryRebuildTestCase extends DrupalWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Rebuild arbitrary forms', + 'description' => 'Tests altering forms to be rebuilt so there are multiple steps.', + 'group' => 'Form API', + ); + } + + function setUp() { + parent::setUp('form_test'); + // Auto-create a field for testing. + $field = array( + 'field_name' => 'test_multiple', + 'type' => 'text', + 'cardinality' => -1, + 'translatable' => FALSE, + ); + field_create_field($field); + + $instance = array( + 'object_type' => 'node', + 'field_name' => 'test_multiple', + 'bundle' => 'page', + 'label' => 'Test a multiple valued field', + 'widget' => array( + 'type' => 'text_textfield', + 'weight' => 0, + ), + ); + field_create_instance($instance); + } + + /** + * Tests a basic rebuild with the user registration form. + */ + function testUserRegistrationRebuild() { + $edit = array( + 'name' => 'foo', + 'mail' => 'bar@example.com', + ); + $this->drupalPost('user/register', $edit, 'Rebuild'); + $this->assertText('Form rebuilt.'); + $this->assertFieldByName('name', 'foo', 'Entered user name has been kept.'); + $this->assertFieldByName('mail', 'bar@example.com', 'Entered mail address has been kept.'); + } + + /** + * Tests a rebuild caused by a multiple value field. + */ + function testUserRegistrationMultipleField() { + $edit = array( + 'name' => 'foo', + 'mail' => 'bar@example.com', + ); + $this->drupalPost('user/register', $edit, t('Add another item'), array('query' => array('field' => TRUE))); + $this->assertText('Test a multiple valued field', 'Form has been rebuilt.'); + $this->assertFieldByName('name', 'foo', 'Entered user name has been kept.'); + $this->assertFieldByName('mail', 'bar@example.com', 'Entered mail address has been kept.'); + } +} diff --git a/modules/simpletest/tests/form_test.module b/modules/simpletest/tests/form_test.module index f944d709f..7be851d2c 100644 --- a/modules/simpletest/tests/form_test.module +++ b/modules/simpletest/tests/form_test.module @@ -922,3 +922,30 @@ function form_test_programmatic_form_validate($form, &$form_state) { function form_test_programmatic_form_submit($form, &$form_state) { $form_state['storage']['programmatic_form_submit'] = $form_state['values']['submitted_field']; } + + +/** + * Implements hook_form_FORM_ID_alter() for the registration form. + */ +function form_test_form_user_register_form_alter(&$form, &$form_state) { + $form['test_rebuild'] = array( + '#type' => 'submit', + '#value' => t('Rebuild'), + '#submit' => array('form_test_user_register_form_rebuild'), + ); + // If requested, add the test field by attaching the node page form. + if (!empty($_REQUEST['field'])) { + $node = (object)array('type' => 'page'); + field_attach_form('node', $node, $form, $form_state); + // The form API requires the builder function to set rebuilding, so do so. + $form['#builder_function'] = 'form_test_user_register_form_rebuild'; + } +} + +/** + * Submit callback that just lets the form rebuild. + */ +function form_test_user_register_form_rebuild($form, &$form_state) { + drupal_set_message('Form rebuilt.'); + $form_state['rebuild'] = TRUE; +} -- cgit v1.2.3