Chris@18: drupalCreateUser([], NULL, TRUE); Chris@18: $this->drupalLogin($admin); Chris@18: Chris@18: // Create FR. Chris@18: ConfigurableLanguage::createFromLangcode('fr')->save(); Chris@18: // Set language detection to url and browser detection. Chris@18: $this->drupalPostForm('/admin/config/regional/language/detection', [ Chris@18: 'language_interface[enabled][language-url]' => TRUE, Chris@18: 'language_interface[enabled][language-browser]' => TRUE, Chris@18: 'language_interface[enabled][language-selected]' => TRUE, Chris@18: ], 'Save settings'); Chris@18: Chris@18: // Set prefixes to en and fr. Chris@18: $this->drupalPostForm('/admin/config/regional/language/detection/url', [ Chris@18: 'prefix[en]' => 'en', Chris@18: 'prefix[fr]' => 'fr', Chris@18: ], 'Save configuration'); Chris@18: // Add language codes to browser detection. Chris@18: $this->drupalPostForm('/admin/config/regional/language/detection/browser', [ Chris@18: 'new_mapping[browser_langcode]' => 'fr', Chris@18: 'new_mapping[drupal_langcode]' => 'fr', Chris@18: ], 'Save configuration'); Chris@18: $this->drupalPostForm('/admin/config/regional/language/detection/browser', [ Chris@18: 'new_mapping[browser_langcode]' => 'en', Chris@18: 'new_mapping[drupal_langcode]' => 'en', Chris@18: ], 'Save configuration'); Chris@18: $this->drupalPostForm('/admin/config/regional/language/detection/selected', [ Chris@18: 'edit-selected-langcode' => 'en', Chris@18: ], 'Save configuration'); Chris@18: Chris@18: $this->drupalLogout(); Chris@18: } Chris@18: Chris@18: /** Chris@18: * Tests with browsers with and without Accept-Language header. Chris@18: */ Chris@18: public function testAcceptLanguageEmptyDefault() { Chris@18: Chris@18: // Check correct headers. Chris@18: $this->drupalGet('/en/system-test/echo/language test', [], ['Accept-Language' => 'en']); Chris@18: $this->assertSession()->responseHeaderEquals('Content-Language', 'en'); Chris@18: $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'MISS'); Chris@18: Chris@18: $this->drupalGet('/fr/system-test/echo/language test', [], ['Accept-Language' => 'en']); Chris@18: $this->assertSession()->responseHeaderEquals('Content-Language', 'fr'); Chris@18: $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'MISS'); Chris@18: Chris@18: $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'en']); Chris@18: $this->assertSession()->responseHeaderEquals('Content-Language', 'en'); Chris@18: $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache')); Chris@18: Chris@18: // Check with UK browser. Chris@18: $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'en-UK,en']); Chris@18: $this->assertSession()->responseHeaderEquals('Content-Language', 'en'); Chris@18: $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache')); Chris@18: Chris@18: // Check with french browser. Chris@18: $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'fr-FR,fr']); Chris@18: $this->assertSession()->responseHeaderEquals('Content-Language', 'fr'); Chris@18: $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache')); Chris@18: Chris@18: // Check with browser without language settings - should return fallback language. Chris@18: $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => NULL]); Chris@18: $this->assertSession()->responseHeaderEquals('Content-Language', 'en'); Chris@18: $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache')); Chris@18: Chris@18: // Check with french browser again. Chris@18: $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'fr-FR,fr']); Chris@18: $this->assertSession()->responseHeaderEquals('Content-Language', 'fr'); Chris@18: $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache')); Chris@18: Chris@18: // Check with UK browser. Chris@18: $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'en-UK,en']); Chris@18: $this->assertSession()->responseHeaderEquals('Content-Language', 'en'); Chris@18: $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache')); Chris@18: Chris@18: // Check if prefixed URLs are still cached. Chris@18: $this->drupalGet('/en/system-test/echo/language test', [], ['Accept-Language' => 'en']); Chris@18: $this->assertSession()->responseHeaderEquals('Content-Language', 'en'); Chris@18: $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'HIT'); Chris@18: Chris@18: $this->drupalGet('/fr/system-test/echo/language test', [], ['Accept-Language' => 'en']); Chris@18: $this->assertSession()->responseHeaderEquals('Content-Language', 'fr'); Chris@18: $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'HIT'); Chris@18: } Chris@18: Chris@18: }