1. 6.x-1.x form_example/form_example.test
  2. 7.x-1.x form_example/form_example.test

Test file for form_example module.

File

form_example/form_example.test
View source
<?php

/**
 * @file
 * Test file for form_example module.
 */

/**
 * Default test case for the form_example module.
 *
 * @ingroup form_example
 */
class FormExampleTestCase extends DrupalWebTestCase {

  /**
   * {@inheritdoc}
   */
  public static function getInfo() {
    return array(
      'name' => 'Form Example',
      'description' => 'Various tests on the form_example module.',
      'group' => 'Examples',
    );
  }

  /**
   * Enable modules.
   */
  public function setUp() {
    parent::setUp('form_example');
  }

  /**
   * Test each tutorial.
   */
  public function testTutorials() {

    // Tutorial #1
    $this
      ->drupalGet('examples/form_example/tutorial');
    $this
      ->assertText(t('#9'));

    // #2
    $this
      ->drupalPost('examples/form_example/tutorial/2', array(
      'name' => t('name'),
    ), t('Submit'));

    // #4
    $this
      ->drupalPost('examples/form_example/tutorial/4', array(
      'first' => t('firstname'),
      'last' => t('lastname'),
    ), t('Submit'));
    $this
      ->drupalPost('examples/form_example/tutorial/4', array(), t('Submit'));
    $this
      ->assertText(t('First name field is required'));
    $this
      ->assertText(t('Last name field is required'));

    // #5
    $this
      ->drupalPost('examples/form_example/tutorial/5', array(
      'first' => t('firstname'),
      'last' => t('lastname'),
    ), t('Submit'));
    $this
      ->assertText(t('Please enter your first name'));
    $this
      ->drupalPost('examples/form_example/tutorial/4', array(), t('Submit'));
    $this
      ->assertText(t('First name field is required'));
    $this
      ->assertText(t('Last name field is required'));

    // #6
    $this
      ->drupalPost('examples/form_example/tutorial/6', array(
      'first' => t('firstname'),
      'last' => t('lastname'),
      'year_of_birth' => 1955,
    ), t('Submit'));
    $this
      ->assertNoText(t('Enter a year between 1900 and 2000'));
    $this
      ->drupalPost('examples/form_example/tutorial/6', array(
      'first' => t('firstname'),
      'last' => t('lastname'),
      'year_of_birth' => 1855,
    ), t('Submit'));
    $this
      ->assertText(t('Enter a year between 1900 and 2000'));

    // #7
    $this
      ->drupalPost('examples/form_example/tutorial/7', array(
      'first' => t('firstname'),
      'last' => t('lastname'),
      'year_of_birth' => 1955,
    ), t('Submit'));
    $this
      ->assertText(t('The form has been submitted. name="firstname lastname", year of birth=1955'));
    $this
      ->drupalPost('examples/form_example/tutorial/7', array(
      'first' => t('firstname'),
      'last' => t('lastname'),
      'year_of_birth' => 1855,
    ), t('Submit'));
    $this
      ->assertText(t('Enter a year between 1900 and 2000'));

    // Test tutorial #8.
    $this
      ->drupalPost('examples/form_example/tutorial/8', array(
      'first' => t('firstname'),
      'last' => t('lastname'),
      'year_of_birth' => 1955,
    ), t('Next >>'));
    $this
      ->drupalPost(NULL, array(
      'color' => t('green'),
    ), t('<< Back'));
    $this
      ->drupalPost(NULL, array(), t('Next >>'));
    $this
      ->drupalPost(NULL, array(
      'color' => t('red'),
    ), t('Submit'));
    $this
      ->assertText(t('The form has been submitted. name="firstname lastname", year of birth=1955'));
    $this
      ->assertText(t('And the favorite color is red'));

    // #9
    $url = 'examples/form_example/tutorial/9';
    for ($i = 1; $i <= 4; $i++) {
      if ($i > 1) {

        // Later steps of multistep form take NULL.
        $url = NULL;
      }
      $this
        ->drupalPost($url, array(
        "name[{$i}][first]" => "firstname {$i}",
        "name[{$i}][last]" => "lastname {$i}",
        "name[{$i}][year_of_birth]" => 1950 + $i,
      ), t('Add another name'));
      $this
        ->assertText(t('Name #@num', array(
        '@num' => $i + 1,
      )));
    }

    // Now remove the last name added (#5).
    $this
      ->drupalPost(NULL, array(), t('Remove latest name'));
    $this
      ->assertNoText("Name #5");
    $this
      ->drupalPost(NULL, array(), t('Submit'));
    $this
      ->assertText('Form 9 has been submitted');
    for ($i = 1; $i <= 4; $i++) {
      $this
        ->assertText(t('@num: firstname @num lastname @num (@year)', array(
        '@num' => $i,
        '@year' => 1950 + $i,
      )));
    }

    // #10
    $url = 'examples/form_example/tutorial/10';
    $this
      ->drupalPost($url, array(), t('Submit'));
    $this
      ->assertText(t('No file was uploaded.'));

    // Get sample images.
    $images = $this
      ->drupalGetTestFiles('image');
    foreach ($images as $image) {
      $this
        ->drupalPost($url, array(
        'files[file]' => drupal_realpath($image->uri),
      ), t('Submit'));
      $this
        ->assertText(t('The form has been submitted and the image has been saved, filename: @filename.', array(
        '@filename' => $image->filename,
      )));
    }

    // #11: Confirmation form.
    // Try to submit without a name.
    $url = 'examples/form_example/tutorial/11';
    $this
      ->drupalPost($url, array(), t('Submit'));
    $this
      ->assertText('Name field is required.');

    // Verify that we can enter a name and get the confirmation form.
    $this
      ->drupalPost($url, array(
      'name' => t('name 1'),
    ), t('Submit'));
    $this
      ->assertText(t('Is this really your name?'));
    $this
      ->assertFieldById('edit-name', 'name 1');

    // Check the 'yes' button.
    $confirmation_text = t("Confirmation form submission recieved. According to your submission your name is '@name'", array(
      '@name' => 'name 1',
    ));
    $url = 'examples/form_example/tutorial/11/confirm/name%201';
    $this
      ->drupalPost($url, array(), t('This is my name'));
    $this
      ->assertText($confirmation_text);

    // Check the 'no' button.
    $this
      ->drupalGet($url);
    $this
      ->clickLink(t('Nope, not my name'));
    $this
      ->assertNoText($confirmation_text);
  }

  /**
   * Test Wizard tutorial.
   *
   * @TODO improve this using drupal_form_submit
   */
  public function testWizard() {

    // Check if the wizard is there.
    $this
      ->drupalGet('examples/form_example/wizard');
    $this
      ->assertText(t('Extensible wizard example'));
    $first_name = $this
      ->randomName(8);
    $last_name = $this
      ->randomName(8);
    $city = $this
      ->randomName(8);
    $aunts_name = $this
      ->randomName(8);

    // Submit the first step of the wizard.
    $options = array(
      'first_name' => $first_name,
      'last_name' => $last_name,
    );
    $this
      ->drupalPost('examples/form_example/wizard', $options, t('Next'));

    // A label city is created, and two buttons appear, Previous and Next.
    $this
      ->assertText(t('Hint: Do not enter "San Francisco", and do not leave this out.'));

    // Go back to the beginning and verify that the value is there.
    $this
      ->drupalPost(NULL, array(), t('Previous'));
    $this
      ->assertFieldByName('first_name', $first_name);
    $this
      ->assertFieldByName('last_name', $last_name);

    // Go next. We should keep our values.
    $this
      ->drupalPost(NULL, array(), t('Next'));
    $this
      ->assertText(t('Hint: Do not enter "San Francisco", and do not leave this out.'));

    // Try "San Francisco".
    $this
      ->drupalPost(NULL, array(
      'city' => 'San Francisco',
    ), t('Next'));
    $this
      ->assertText(t('You were warned not to enter "San Francisco"'));

    // Try the real city.
    $this
      ->drupalPost(NULL, array(
      'city' => $city,
    ), t('Next'));

    // Enter the Aunt's name, but then the previous button.
    $this
      ->drupalPost(NULL, array(
      'aunts_name' => $aunts_name,
    ), t('Previous'));
    $this
      ->assertFieldByName('city', $city);

    // Go to first step and re-check all fields.
    $this
      ->drupalPost(NULL, array(), t('Previous'));
    $this
      ->assertFieldByName('first_name', $first_name);
    $this
      ->assertFieldByName('last_name', $last_name);

    // Re-check second step.
    $this
      ->drupalPost(NULL, array(), t('Next'));
    $this
      ->assertText(t('Hint: Do not enter "San Francisco", and do not leave this out.'));
    $this
      ->assertFieldByName('city', $city);

    // Re-check third step.
    $this
      ->drupalPost(NULL, array(), t('Next'));
    $this
      ->assertFieldByName('aunts_name', $aunts_name);

    // Press finish and check for correct values.
    $this
      ->drupalPost(NULL, array(), t('Finish'));
    $this
      ->assertRaw(t('[first_name] =&gt; @first_name', array(
      '@first_name' => $first_name,
    )));
    $this
      ->assertRaw(t('[last_name] =&gt; @last_name', array(
      '@last_name' => $last_name,
    )));
    $this
      ->assertRaw(t('[city] =&gt; @city', array(
      '@city' => $city,
    )));
    $this
      ->assertRaw(t('[aunts_name] =&gt; @aunts_name', array(
      '@aunts_name' => $aunts_name,
    )));
  }

  /**
   * Test the element_example form for correct behavior.
   */
  public function testElementExample() {

    // Make one basic POST with a set of values and check for correct responses.
    $edit = array(
      'a_form_example_textfield' => $this
        ->randomName(),
      'a_form_example_checkbox' => TRUE,
      'a_form_example_element_discrete[areacode]' => sprintf('%03d', rand(0, 999)),
      'a_form_example_element_discrete[prefix]' => sprintf('%03d', rand(0, 999)),
      'a_form_example_element_discrete[extension]' => sprintf('%04d', rand(0, 9999)),
      'a_form_example_element_combined[areacode]' => sprintf('%03d', rand(0, 999)),
      'a_form_example_element_combined[prefix]' => sprintf('%03d', rand(0, 999)),
      'a_form_example_element_combined[extension]' => sprintf('%04d', rand(0, 9999)),
    );
    $this
      ->drupalPost('examples/form_example/element_example', $edit, t('Submit'));
    $this
      ->assertText(t('a_form_example_textfield has value @value', array(
      '@value' => $edit['a_form_example_textfield'],
    )));
    $this
      ->assertText(t('a_form_example_checkbox has value 1'));
    $this
      ->assertPattern(t('/areacode.*!areacode/', array(
      '!areacode' => $edit['a_form_example_element_discrete[areacode]'],
    )));
    $this
      ->assertPattern(t('/prefix.*!prefix/', array(
      '!prefix' => $edit['a_form_example_element_discrete[prefix]'],
    )));
    $this
      ->assertPattern(t('/extension.*!extension/', array(
      '!extension' => $edit['a_form_example_element_discrete[extension]'],
    )));
    $this
      ->assertText(t('a_form_example_element_combined has value @value', array(
      '@value' => $edit['a_form_example_element_combined[areacode]'] . $edit['a_form_example_element_combined[prefix]'] . $edit['a_form_example_element_combined[extension]'],
    )));

    // Now flip the checkbox and check for correct behavior.
    $edit['a_form_example_checkbox'] = FALSE;
    $this
      ->drupalPost('examples/form_example/element_example', $edit, t('Submit'));
    $this
      ->assertText(t('a_form_example_checkbox has value 0'));
  }

}

Classes

Namesort descending Description
FormExampleTestCase Default test case for the form_example module.