function FormsFormStorageTestCase::testFormStatePersist

Tests a form using form state without using 'storage' to pass data from the constructor to a submit handler. The data has to persist even when caching gets activated, what may happen when a modules alter the form and adds #ajax properties.

File

modules/simpletest/tests/form.test, line 1245

Class

FormsFormStorageTestCase
Test the form storage on a multistep form.

Code

function testFormStatePersist() {
    // Test the form one time with caching activated and one time without.
    $run_options = array(
        array(),
        array(
            'query' => array(
                'cache' => 1,
            ),
        ),
    );
    foreach ($run_options as $options) {
        $this->drupalPost('form-test/state-persist', array(), t('Submit'), $options);
        // The submit handler outputs the value in $form_state, assert it's there.
        $this->assertText('State persisted.');
        // Test it again, but first trigger a validation error, then test.
        $this->drupalPost('form-test/state-persist', array(
            'title' => '',
        ), t('Submit'), $options);
        $this->assertText(t('!name field is required.', array(
            '!name' => 'title',
        )));
        // Submit the form again triggering no validation error.
        $this->drupalPost(NULL, array(
            'title' => 'foo',
        ), t('Submit'), $options);
        $this->assertText('State persisted.');
        // Now post to the rebuilt form and verify it's still there afterwards.
        $this->drupalPost(NULL, array(
            'title' => 'bar',
        ), t('Submit'), $options);
        $this->assertText('State persisted.');
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.