diff -r 07239de796bb -r e756a8c72c3d cms/drupal/modules/simpletest/tests/upgrade/upgrade.locale.test --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/drupal/modules/simpletest/tests/upgrade/upgrade.locale.test Fri Sep 08 12:04:06 2017 +0200 @@ -0,0 +1,143 @@ + 'Locale upgrade path', + 'description' => 'Upgrade path tests for the Locale module.', + 'group' => 'Upgrade path', + ); + } + + public function setUp() { + // Path to the database dump files. + $this->databaseDumpFiles = array( + drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php', + drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.locale.database.php', + ); + parent::setUp(); + + $this->uninstallModulesExcept(array('locale', 'comment')); + } + + /** + * Test a successful upgrade (no negotiation). + */ + public function testLocaleUpgrade() { + $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.'); + + // The home page should be in French. + $this->assertPageInLanguage('', 'fr'); + + // No prefixed page should exist. + $this->drupalGet('en'); + $this->assertResponse(404); + $this->drupalGet('fr'); + $this->assertResponse(404); + } + + /** + * Test an upgrade with path-based negotiation. + */ + public function testLocaleUpgradePathDefault() { + // LANGUAGE_NEGOTIATION_PATH_DEFAULT. + $this->variable_set('language_negotiation', 1); + + $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.'); + + // The home page should be in French. + $this->assertPageInLanguage('', 'fr'); + + // The language switcher block should be displayed. + $this->assertRaw('block-locale-language', 'The language switcher block is displayed.'); + + // The French prefix should not be active because French is the default language. + $this->drupalGet('fr'); + $this->assertResponse(404); + + // The English prefix should be active. + $this->assertPageInLanguage('en', 'en'); + } + + /** + * Test an upgrade with path-based (with fallback) negotiation. + */ + public function testLocaleUpgradePathFallback() { + // LANGUAGE_NEGOTIATION_PATH. + $this->variable_set('language_negotiation', 2); + + // Set the language of the admin user to English. + db_update('users') + ->fields(array('language' => 'en')) + ->condition('uid', 1) + ->execute(); + + $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.'); + + // Both prefixes should be active. + $this->assertPageInLanguage('fr', 'fr'); + $this->assertPageInLanguage('en', 'en'); + + // The home page should be in the admin user language. + $this->assertPageInLanguage('', 'en'); + + // The language switcher block should be displayed. + $this->assertRaw('block-locale-language', 'The language switcher block is displayed.'); + } + + /** + * Test an upgrade with domain-based negotiation. + */ + public function testLocaleUpgradeDomain() { + // LANGUAGE_NEGOTIATION_DOMAIN. + $this->variable_set('language_negotiation', 3); + + $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.'); + + // The home page should be in French. + $this->assertPageInLanguage('', 'fr'); + + // The language switcher block should be displayed. + $this->assertRaw('block-locale-language', 'The language switcher block is displayed.'); + + // The language switcher block should point to http://en.example.com. + $language_links = $this->xpath('//ul[contains(@class, :class)]/li/a', array(':class' => 'language-switcher-locale-url')); + $found_english_link = FALSE; + foreach ($language_links as $link) { + if ((string) $link['href'] == 'http://en.example.com/') { + $found_english_link = TRUE; + } + } + $this->assertTrue($found_english_link, 'The English link points to the correct domain.'); + + // Both prefixes should be inactive. + $this->drupalGet('en'); + $this->assertResponse(404); + $this->drupalGet('fr'); + $this->assertResponse(404); + + } + + /** + * Asserts that a page exists and is in the specified language. + */ + public function assertPageInLanguage($path = NULL, $langcode) { + if (isset($path)) { + $this->drupalGet($path); + } + + if (!$this->assertResponse(200)) { + return FALSE; + } + + if ($this->parse()) { + return $this->assertIdentical($langcode, (string) $this->elements['xml:lang']); + } + else { + return FALSE; + } + } +}