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
Unit tests for the Drupal Form API.

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.');
  }
}