function LanguageSwitchingTest::testLanguageLinkActiveClass

Test active class on links when switching languages.

File

drupal/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php, line 96
Definition of Drupal\language\Tests\LanguageSwitchingTest.

Class

LanguageSwitchingTest
Functional tests for the language switching feature.

Namespace

Drupal\language\Tests

Code

function testLanguageLinkActiveClass() {

  // Add language.
  $edit = array(
    'predefined_langcode' => 'fr',
  );
  $this
    ->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));

  // Enable URL language detection and selection.
  $edit = array(
    'language_interface[enabled][language-url]' => '1',
  );
  $this
    ->drupalPost('admin/config/regional/language/detection', $edit, t('Save settings'));
  $function_name = 'l()';

  // Test links generated by l() on an English page.
  $current_language = 'English';
  $this
    ->drupalGet('language_test/l-active-class');

  // Language code 'none' link should be active.
  $langcode = 'none';
  $links = $this
    ->xpath('//a[@id = :id and contains(@class, :class)]', array(
    ':id' => 'no_lang_link',
    ':class' => 'active',
  ));
  $this
    ->assertTrue(isset($links[0]), t('A link generated by :function to the current :language page with langcode :langcode is marked active.', array(
    ':function' => $function_name,
    ':language' => $current_language,
    ':langcode' => $langcode,
  )));

  // Language code 'en' link should be active.
  $langcode = 'en';
  $links = $this
    ->xpath('//a[@id = :id and contains(@class, :class)]', array(
    ':id' => 'en_link',
    ':class' => 'active',
  ));
  $this
    ->assertTrue(isset($links[0]), t('A link generated by :function to the current :language page with langcode :langcode is marked active.', array(
    ':function' => $function_name,
    ':language' => $current_language,
    ':langcode' => $langcode,
  )));

  // Language code 'fr' link should not be active.
  $langcode = 'fr';
  $links = $this
    ->xpath('//a[@id = :id and not(contains(@class, :class))]', array(
    ':id' => 'fr_link',
    ':class' => 'active',
  ));
  $this
    ->assertTrue(isset($links[0]), t('A link generated by :function to the current :language page with langcode :langcode is NOT marked active.', array(
    ':function' => $function_name,
    ':language' => $current_language,
    ':langcode' => $langcode,
  )));

  // Test links generated by l() on a French page.
  $current_language = 'French';
  $this
    ->drupalGet('fr/language_test/l-active-class');

  // Language code 'none' link should be active.
  $langcode = 'none';
  $links = $this
    ->xpath('//a[@id = :id and contains(@class, :class)]', array(
    ':id' => 'no_lang_link',
    ':class' => 'active',
  ));
  $this
    ->assertTrue(isset($links[0]), t('A link generated by :function to the current :language page with langcode :langcode is marked active.', array(
    ':function' => $function_name,
    ':language' => $current_language,
    ':langcode' => $langcode,
  )));

  // Language code 'en' link should not be active.
  $langcode = 'en';
  $links = $this
    ->xpath('//a[@id = :id and not(contains(@class, :class))]', array(
    ':id' => 'en_link',
    ':class' => 'active',
  ));
  $this
    ->assertTrue(isset($links[0]), t('A link generated by :function to the current :language page with langcode :langcode is NOT marked active.', array(
    ':function' => $function_name,
    ':language' => $current_language,
    ':langcode' => $langcode,
  )));

  // Language code 'fr' link should be active.
  $langcode = 'fr';
  $links = $this
    ->xpath('//a[@id = :id and contains(@class, :class)]', array(
    ':id' => 'fr_link',
    ':class' => 'active',
  ));
  $this
    ->assertTrue(isset($links[0]), t('A link generated by :function to the current :language page with langcode :langcode is marked active.', array(
    ':function' => $function_name,
    ':language' => $current_language,
    ':langcode' => $langcode,
  )));
  $function_name = "theme('link')";

  // Test links generated by theme('link') on an English page.
  $current_language = 'English';
  $this
    ->drupalGet('language_test/theme-link-active-class');

  // Language code 'none' link should be active.
  $langcode = 'none';
  $links = $this
    ->xpath('//a[@id = :id and contains(@class, :class)]', array(
    ':id' => 'no_lang_link',
    ':class' => 'active',
  ));
  $this
    ->assertTrue(isset($links[0]), t('A link generated by :function to the current :language page with langcode :langcode is marked active.', array(
    ':function' => $function_name,
    ':language' => $current_language,
    ':langcode' => $langcode,
  )));

  // Language code 'en' link should be active.
  $langcode = 'en';
  $links = $this
    ->xpath('//a[@id = :id and contains(@class, :class)]', array(
    ':id' => 'en_link',
    ':class' => 'active',
  ));
  $this
    ->assertTrue(isset($links[0]), t('A link generated by :function to the current :language page with langcode :langcode is marked active.', array(
    ':function' => $function_name,
    ':language' => $current_language,
    ':langcode' => $langcode,
  )));

  // Language code 'fr' link should not be active.
  $langcode = 'fr';
  $links = $this
    ->xpath('//a[@id = :id and not(contains(@class, :class))]', array(
    ':id' => 'fr_link',
    ':class' => 'active',
  ));
  $this
    ->assertTrue(isset($links[0]), t('A link generated by :function to the current :language page with langcode :langcode is NOT marked active.', array(
    ':function' => $function_name,
    ':language' => $current_language,
    ':langcode' => $langcode,
  )));

  // Test links generated by theme('link') on a French page.
  $current_language = 'French';
  $this
    ->drupalGet('fr/language_test/theme-link-active-class');

  // Language code 'none' link should be active.
  $langcode = 'none';
  $links = $this
    ->xpath('//a[@id = :id and contains(@class, :class)]', array(
    ':id' => 'no_lang_link',
    ':class' => 'active',
  ));
  $this
    ->assertTrue(isset($links[0]), t('A link generated by :function to the current :language page with langcode :langcode is marked active.', array(
    ':function' => $function_name,
    ':language' => $current_language,
    ':langcode' => $langcode,
  )));

  // Language code 'en' link should not be active.
  $langcode = 'en';
  $links = $this
    ->xpath('//a[@id = :id and not(contains(@class, :class))]', array(
    ':id' => 'en_link',
    ':class' => 'active',
  ));
  $this
    ->assertTrue(isset($links[0]), t('A link generated by :function to the current :language page with langcode :langcode is NOT marked active.', array(
    ':function' => $function_name,
    ':language' => $current_language,
    ':langcode' => $langcode,
  )));

  // Language code 'fr' link should be active.
  $langcode = 'fr';
  $links = $this
    ->xpath('//a[@id = :id and contains(@class, :class)]', array(
    ':id' => 'fr_link',
    ':class' => 'active',
  ));
  $this
    ->assertTrue(isset($links[0]), t('A link generated by :function to the current :language page with langcode :langcode is marked active.', array(
    ':function' => $function_name,
    ':language' => $current_language,
    ':langcode' => $langcode,
  )));
}