Functional tests for the language switcher block.

File

modules/locale/locale.test, line 1628
Tests for locale.module.

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