diff --git a/core/modules/language/src/Tests/LanguageSwitchingTest.php b/core/modules/language/src/Tests/LanguageSwitchingTest.php
index 4896081..ff2186b 100644
--- a/core/modules/language/src/Tests/LanguageSwitchingTest.php
+++ b/core/modules/language/src/Tests/LanguageSwitchingTest.php
@@ -25,13 +25,26 @@ class LanguageSwitchingTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('locale', 'locale_test', 'language', 'block', 'language_test', 'menu_ui');
+  public static $modules = [
+    'block',
+    'language',
+    'language_test',
+    'locale',
+    'locale_test',
+    'menu_ui',
+    'path',
+  ];
 
   protected function setUp() {
     parent::setUp();
 
     // Create and login user.
-    $admin_user = $this->drupalCreateUser(array('administer blocks', 'administer languages', 'access administration pages'));
+    $admin_user = $this->drupalCreateUser([
+      'access administration pages',
+      'administer blocks',
+      'administer languages',
+      'administer url aliases',
+    ]);
     $this->drupalLogin($admin_user);
   }
 
@@ -224,6 +237,70 @@ function testLanguageBlockWithDomain() {
   }
 
   /**
+   * Test language switcher links for session-based negotiation and aliases.
+   */
+  public function testLanguageBlockWithSessionAndAlias() {
+    // Add the Italian language.
+    ConfigurableLanguage::createFromLangcode('it')->save();
+
+    // Rebuild the container so that the new language is picked up by services
+    // that hold a list of languages.
+    $this->rebuildContainer();
+
+    $languages = $this->container->get('language_manager')->getLanguages();
+
+    // Enable session language detection.
+    $this->drupalGet('/admin/config/regional/language/detection');
+    $edit = [
+      'language_interface[enabled][language-session]' => TRUE,
+      'language_interface[weight][language-session]' => -10,
+      'language_interface[enabled][language-url]' => FALSE,
+    ];
+    $this->drupalPostForm('/admin/config/regional/language/detection', $edit, 'Save settings');
+
+    // Enable the language switcher block.
+    $this->drupalPlaceBlock('language_block:' . LanguageInterface::TYPE_INTERFACE, ['id' => 'test_language_block']);
+
+    // Add aliases for both languages.
+    $url = '/user/' . $this->loggedInUser->id();
+    $english_alias = '/my-profile';
+    $edit = [
+      'langcode' => 'en',
+      'source' => $url,
+      'alias' => $english_alias,
+    ];
+    $this->drupalPostForm('/admin/config/search/path/add', $edit, 'Save');
+
+    $italian_alias = '/mio-profilo';
+    $edit = [
+      'langcode' => 'it',
+      'source' => $url,
+      'alias' => $italian_alias,
+    ];
+    $this->drupalPostForm('/admin/config/search/path/add', $edit, 'Save');
+
+    // Verify the English URL is correct
+    list($english_link) = $this->xpath('//div[@id=:id]/ul/li/a[@hreflang=:hreflang]', array(
+      ':id' => 'block-test-language-block',
+      ':hreflang' => 'en',
+    ));
+    $this->assertEqual($english_alias, (string) $english_link['href']);
+    // Make sure the alias actually works correctly with session negotiation.
+    $this->drupalGet($english_alias);
+    $this->assertResponse(200);
+
+    // Verify the Italian URL is correct
+    list($italian_link) = $this->xpath('//div[@id=:id]/ul/li/a[@hreflang=:hreflang]', array(
+      ':id' => 'block-test-language-block',
+      ':hreflang' => 'it',
+    ));
+    $this->assertEqual($italian_alias, (string) $italian_link['href']);
+    // Make sure the alias actually works correctly with session negotiation.
+    $this->drupalGet($italian_alias);
+    $this->assertResponse(200);
+  }
+
+  /**
    * Test active class on links when switching languages.
    */
   function testLanguageLinkActiveClass() {
