function LocaleLanguageSwitchingFunctionalTest::testLanguageBlock

Functional tests for the language switcher block.

File

modules/locale/locale.test, line 1615

Class

LocaleLanguageSwitchingFunctionalTest
Functional tests for the language switching feature.

Code

function testLanguageBlock() {
    // Enable the language switching block.
    $language_type = LANGUAGE_TYPE_INTERFACE;
    $edit = array(
        "blocks[locale_{$language_type}][region]" => 'sidebar_first',
    );
    $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
    // Add language.
    $edit = array(
        'langcode' => 'fr',
    );
    $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
    // Enable URL language detection and selection.
    $edit = array(
        'language[enabled][locale-url]' => '1',
    );
    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
    // Assert that the language switching block is displayed on the frontpage.
    $this->drupalGet('');
    $this->assertText(t('Languages'), 'Language switcher block found.');
    // Assert that only the current language is marked as active.
    list($language_switcher) = $this->xpath('//div[@id=:id]/div[@class="content"]', array(
        ':id' => 'block-locale-' . $language_type,
    ));
    $links = array(
        'active' => array(),
        'inactive' => array(),
    );
    $anchors = array(
        'active' => array(),
        'inactive' => array(),
    );
    foreach ($language_switcher->ul->li as $link) {
        $classes = explode(" ", (string) $link['class']);
        list($language) = array_intersect($classes, array(
            'en',
            'fr',
        ));
        if (in_array('active', $classes)) {
            $links['active'][] = $language;
        }
        else {
            $links['inactive'][] = $language;
        }
        $anchor_classes = explode(" ", (string) $link->a['class']);
        if (in_array('active', $anchor_classes)) {
            $anchors['active'][] = $language;
        }
        else {
            $anchors['inactive'][] = $language;
        }
    }
    $this->assertIdentical($links, array(
        'active' => array(
            'en',
        ),
        'inactive' => array(
            'fr',
        ),
    ), 'Only the current language list item is marked as active on the language switcher block.');
    $this->assertIdentical($anchors, array(
        'active' => array(
            'en',
        ),
        'inactive' => array(
            'fr',
        ),
    ), 'Only the current language anchor is marked as active on the language switcher block.');
}

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