function AJAXMultiFormTestCase::testMultiForm

Test that a page with the 'page_node_form' included twice works correctly.

File

modules/simpletest/tests/ajax.test, line 475

Class

AJAXMultiFormTestCase
Tests that Ajax-enabled forms work when multiple instances of the same form are on a page.

Code

function testMultiForm() {
    // HTML IDs for elements within the field are potentially modified with
    // each Ajax submission, but these variables are stable and help target the
    // desired elements.
    $field_name = 'field_ajax_test';
    $field_xpaths = array(
        'page-node-form' => '//form[@id="page-node-form"]//div[contains(@class, "field-name-field-ajax-test")]',
        'page-node-form--2' => '//form[@id="page-node-form--2"]//div[contains(@class, "field-name-field-ajax-test")]',
    );
    $button_name = $field_name . '_add_more';
    $button_value = t('Add another item');
    $button_xpath_suffix = '//input[@name="' . $button_name . '"]';
    $field_items_xpath_suffix = '//input[@type="text"]';
    // Ensure the initial page contains both node forms and the correct number
    // of field items and "add more" button for the multi-valued field within
    // each form.
    $this->drupalGet('form-test/two-instances-of-same-form');
    foreach ($field_xpaths as $form_html_id => $field_xpath) {
        $this->assert(count($this->xpath($field_xpath . $field_items_xpath_suffix)) == 1, t('Found the correct number of field items on the initial page.'));
        $this->assertFieldByXPath($field_xpath . $button_xpath_suffix, NULL, t('Found the "add more" button on the initial page.'));
    }
    $this->assertNoDuplicateIds(t('Initial page contains unique IDs'), 'Other');
    // Submit the "add more" button of each form twice. After each corresponding
    // page update, ensure the same as above.
    foreach ($field_xpaths as $form_html_id => $field_xpath) {
        for ($i = 0; $i < 2; $i++) {
            $this->drupalPostAJAX(NULL, array(), array(
                $button_name => $button_value,
            ), 'system/ajax', array(), array(), $form_html_id);
            $this->assert(count($this->xpath($field_xpath . $field_items_xpath_suffix)) == $i + 2, t('Found the correct number of field items after an AJAX submission.'));
            $this->assertFieldByXPath($field_xpath . $button_xpath_suffix, NULL, t('Found the "add more" button after an AJAX submission.'));
            $this->assertNoDuplicateIds(t('Updated page contains unique IDs'), 'Other');
        }
    }
}

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