diff --git a/core/modules/language/tests/language_test.info b/core/modules/language/tests/language_test.info
new file mode 100644
index 0000000..6a9a7aa
--- /dev/null
+++ b/core/modules/language/tests/language_test.info
@@ -0,0 +1,6 @@
+name = "Language test"
+description = "Support module for the language layer tests."
+core = 8.x
+package = Testing
+version = VERSION
+hidden = TRUE
diff --git a/core/modules/language/tests/language_test.module b/core/modules/language/tests/language_test.module
new file mode 100644
index 0000000..1f1dd0a
--- /dev/null
+++ b/core/modules/language/tests/language_test.module
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * @file
+ * Mock module for language layer tests.
+ */
+
+/**
+ * Implements hook_boot().
+ *
+ * For testing domain language negotiation, we fake it by setting
+ * the HTTP_HOST here
+ */
+function language_test_boot() {
+  if (variable_get('language_test_domain')) {
+    $_SERVER['HTTP_HOST'] = variable_get('language_test_domain');
+  }
+}
+
+/**
+ * Implements hook_init().
+ */
+function language_test_init() {
+  language_test_store_language_negotiation();
+  if (isset($GLOBALS['language_interface']) && isset($GLOBALS['language_interface']->method_id)) {
+    drupal_set_message(t('Language negotiation method: @name', array('@name' => $GLOBALS['language_interface']->method_id)));
+  }
+}
+
+/**
+ * Implements hook_language_types_info().
+ */
+function language_test_language_types_info() {
+  if (variable_get('language_test_language_types', FALSE)) {
+    return array(
+      'test_language_type' => array(
+        'name' => t('Test'),
+        'description' => t('A test language type.'),
+      ),
+      'fixed_test_language_type' => array(
+        'fixed' => array('test_language_negotiation_method'),
+      ),
+    );
+  }
+}
+
+/**
+ * Implements hook_language_types_info_alter().
+ */
+function language_test_language_types_info_alter(array &$language_types) {
+  if (variable_get('language_test_content_language_type', FALSE)) {
+    unset($language_types[LANGUAGE_TYPE_CONTENT]['fixed']);
+  }
+}
+
+/**
+ * Implements hook_language_negotiation_info().
+ */
+function language_test_language_negotiation_info() {
+  if (variable_get('language_test_language_negotiation_info', FALSE)) {
+    $info = array(
+      'callbacks' => array(
+        'negotiation' => 'language_test_language_negotiation_method',
+      ),
+      'file' => drupal_get_path('module', 'language_test') .'/language_test.module',
+      'weight' => -10,
+      'description' => t('This is a test language negotiation method.'),
+    );
+
+    return array(
+      'test_language_negotiation_method' => array(
+        'name' => t('Test'),
+        'types' => array(LANGUAGE_TYPE_CONTENT, 'test_language_type', 'fixed_test_language_type'),
+      ) + $info,
+      'test_language_negotiation_method_ts' => array(
+        'name' => t('Type-specific test'),
+        'types' => array('test_language_type'),
+      ) + $info,
+    );
+  }
+}
+
+/**
+ * Implements hook_language_negotiation_info_alter().
+ */
+function language_test_language_negotiation_info_alter(array &$negotiation_info) {
+  if (variable_get('language_test_language_negotiation_info_alter', FALSE)) {
+    unset($negotiation_info[LANGUAGE_NEGOTIATION_INTERFACE]);
+  }
+}
+
+/**
+ * Store the last negotiated languages.
+ */
+function language_test_store_language_negotiation() {
+  $last = array();
+  foreach (language_types_get_all() as $type) {
+    $last[$type] = $GLOBALS[$type]->langcode;
+  }
+  variable_set('language_test_language_negotiation_last', $last);
+}
+
+/**
+ * Provides a test language negotiation method.
+ */
+function language_test_language_negotiation_method($languages) {
+  return 'it';
+}
diff --git a/core/modules/locale/locale.test b/core/modules/locale/locale.test
index bb3c6e7..49a75fe 100644
--- a/core/modules/locale/locale.test
+++ b/core/modules/locale/locale.test
@@ -24,17 +24,17 @@
 /**
  * Functional tests for language configuration's effect on negotiation setup.
  */
-class LocaleConfigurationTest extends DrupalWebTestCase {
+class LanguageConfigurationTestCase extends DrupalWebTestCase {
   public static function getInfo() {
     return array(
       'name' => 'Language negotiation autoconfiguration',
       'description' => 'Adds and configures languages to check negotiation changes.',
-      'group' => 'Locale',
+      'group' => 'Language',
     );
   }
 
   function setUp() {
-    parent::setUp('locale');
+    parent::setUp('language');
   }
 
   /**
@@ -100,12 +100,12 @@ class LocaleJavascriptTranslationTest extends DrupalWebTestCase {
   }
 
   function setUp() {
-    parent::setUp('locale', 'locale_test');
+    parent::setUp('locale');
   }
 
   function testFileParsing() {
 
-    $filename = drupal_get_path('module', 'locale_test') . '/locale_test.js';
+    $filename = drupal_get_path('module', 'locale') . '/tests/locale_test.js';
 
     // Parse the file to look for source strings.
     _locale_parse_js_file($filename);
@@ -915,10 +915,10 @@ class LocaleImportFunctionalTest extends DrupalWebTestCase {
   protected $admin_user = NULL;
 
   function setUp() {
-    parent::setUp(array('locale', 'locale_test', 'dblog'));
+    parent::setUp(array('locale', 'dblog'));
 
     // Set the translation file directory.
-    variable_set('locale_translate_file_directory', drupal_get_path('module', 'locale_test'));
+    variable_set('locale_translate_file_directory', drupal_get_path('module', 'locale') . '/tests');
 
     $this->admin_user = $this->drupalCreateUser(array('administer languages', 'translate interface', 'access administration pages'));
     $this->drupalLogin($this->admin_user);
@@ -1392,7 +1392,7 @@ class LocaleExportFunctionalTest extends DrupalWebTestCase {
   protected $admin_user = NULL;
 
   function setUp() {
-    parent::setUp('locale', 'locale_test');
+    parent::setUp('locale');
 
     $this->admin_user = $this->drupalCreateUser(array('administer languages', 'translate interface', 'access administration pages'));
     $this->drupalLogin($this->admin_user);
@@ -1694,21 +1694,21 @@ class LocaleUninstallFrenchFunctionalTest extends LocaleUninstallFunctionalTest
 /**
  * Functional tests for the language switching feature.
  */
-class LocaleLanguageSwitchingFunctionalTest extends DrupalWebTestCase {
+class LanguageSwitchingFunctionalTestCase extends DrupalWebTestCase {
 
   public static function getInfo() {
     return array(
       'name' => 'Language switching',
       'description' => 'Tests for the language switching feature.',
-      'group' => 'Locale',
+      'group' => 'Language',
     );
   }
 
   function setUp() {
-    parent::setUp(array('locale', 'block'));
+    parent::setUp(array('language', 'block'));
 
     // Create and login user.
     $admin_user = $this->drupalCreateUser(array('administer blocks', 'administer languages', 'translate interface', 'access administration pages'));
     $this->drupalLogin($admin_user);
   }
 
@@ -1772,13 +1772,13 @@ class LocaleLanguageSwitchingFunctionalTest extends DrupalWebTestCase {
 /**
  * Test browser language detection.
  */
-class LocaleBrowserDetectionTest extends DrupalUnitTestCase {
+class LanguageBrowserDetectionTestCase extends DrupalUnitTestCase {
 
   public static function getInfo() {
     return array(
       'name' => 'Browser language detection',
       'description' => 'Tests for the browser language detection.',
-      'group' => 'Locale',
+      'group' => 'Language',
     );
   }
 
@@ -2465,20 +2465,23 @@ class LocaleContentFunctionalTest extends DrupalWebTestCase {
  *        http://example.cn/admin/config
  *          UI language in Chinese
  */
-class LocaleUILanguageNegotiationTest extends DrupalWebTestCase {
+class LanguageNegotiationTestCase extends DrupalWebTestCase {
   public static function getInfo() {
     return array(
       'name' => 'UI language negotiation',
       'description' => 'Test UI language switching by url path prefix and domain.',
-      'group' => 'Locale',
+      'group' => 'Language',
     );
   }
 
   function setUp() {
-    parent::setUp(array('locale', 'locale_test', 'block'));
+    // We marginally use interface translation functionality here, so need to
+    // use the locale module instead of language only, but the 90% of the test
+    // is about the negotiation process which is solely in language module.
+    parent::setUp(array('locale', 'language_test', 'block'));
     require_once DRUPAL_ROOT . '/core/includes/language.inc';
     drupal_load('module', 'locale');
     $admin_user = $this->drupalCreateUser(array('administer languages', 'translate interface', 'access administration pages', 'administer blocks'));
     $this->drupalLogin($admin_user);
   }
 
@@ -2619,11 +2622,11 @@ class LocaleUILanguageNegotiationTest extends DrupalWebTestCase {
         'message' => 'URL (DOMAIN) > DEFAULT: default domain should get default language',
       ),
       // Language domain specific URL, we set the $_SERVER['HTTP_HOST'] in
-      // locale_test.module hook_boot() to simulate this.
+      // language_test.module hook_boot() to simulate this.
       array(
         'language_negotiation' => array(LANGUAGE_NEGOTIATION_URL, LANGUAGE_NEGOTIATION_DEFAULT),
         'language_negotiation_url_part' => LANGUAGE_NEGOTIATION_URL_DOMAIN,
-        'locale_test_domain' => $language_domain,
+        'language_test_domain' => $language_domain,
         'path' => 'admin/config',
         'expect' => $language_string,
         'expected_method_id' => LANGUAGE_NEGOTIATION_URL,
@@ -2645,8 +2648,8 @@ class LocaleUILanguageNegotiationTest extends DrupalWebTestCase {
     if (!empty($test['language_negotiation_url_part'])) {
       variable_set('language_negotiation_url_part', $test['language_negotiation_url_part']);
     }
-    if (!empty($test['locale_test_domain'])) {
-      variable_set('locale_test_domain', $test['locale_test_domain']);
+    if (!empty($test['language_test_domain'])) {
+      variable_set('language_test_domain', $test['language_test_domain']);
     }
     $this->drupalGet($test['path'], array(), $test['http_header']);
     $this->assertText($test['expect'], $test['message']);
@@ -2759,17 +2762,17 @@ class LocaleUILanguageNegotiationTest extends DrupalWebTestCase {
 /**
  * Test that URL rewriting works as expected.
  */
-class LocaleUrlRewritingTest extends DrupalWebTestCase {
+class LanguageUrlRewritingTestCase extends DrupalWebTestCase {
   public static function getInfo() {
     return array(
       'name' => 'URL rewriting',
       'description' => 'Test that URL rewriting works as expected.',
-      'group' => 'Locale',
+      'group' => 'Language',
     );
   }
 
   function setUp() {
-    parent::setUp('locale');
+    parent::setUp('language');
 
     // Create and login user.
     $this->web_user = $this->drupalCreateUser(array('administer languages', 'access administration pages'));
@@ -2983,7 +2986,7 @@ class LocaleCommentLanguageFunctionalTest extends DrupalWebTestCase {
   }
 
   function setUp() {
-    parent::setUp('locale', 'locale_test');
+    parent::setUp('locale', 'language_test');
 
     // Create and login user.
     $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer languages', 'access administration pages', 'administer content types', 'create article content'));
@@ -2998,7 +3001,7 @@ class LocaleCommentLanguageFunctionalTest extends DrupalWebTestCase {
     $this->drupalPost('admin/structure/types/manage/article', $edit, t('Save content type'));
 
     // Enable content language negotiation UI.
-    variable_set('locale_test_content_language_type', TRUE);
+    variable_set('language_test_content_language_type', TRUE);
 
     // Set interface language detection to user and content language detection
     // to URL. Disable inheritance from interface language to ensure content
@@ -3138,18 +3141,18 @@ class LocaleDateFormatsFunctionalTest extends DrupalWebTestCase {
 /**
  * Functional test for language types/negotiation info.
  */
-class LocaleLanguageNegotiationInfoFunctionalTest extends DrupalWebTestCase {
+class LanguageNegotiationInfoTestCase extends DrupalWebTestCase {
 
   public static function getInfo() {
     return array(
       'name' => 'Language negotiation info',
       'description' => 'Tests alterations to language types/negotiation info.',
-      'group' => 'Locale',
+      'group' => 'Language',
     );
   }
 
   function setUp() {
-    parent::setUp('locale');
+    parent::setUp('language');
     require_once DRUPAL_ROOT .'/core/includes/language.inc';
     $admin_user = $this->drupalCreateUser(array('administer languages', 'access administration pages', 'view the administration theme'));
     $this->drupalLogin($admin_user);
@@ -3161,8 +3164,8 @@ class LocaleLanguageNegotiationInfoFunctionalTest extends DrupalWebTestCase {
    */
   function testInfoAlterations() {
     // Enable language type/negotiation info alterations.
-    variable_set('locale_test_language_types', TRUE);
-    variable_set('locale_test_language_negotiation_info', TRUE);
+    variable_set('language_test_language_types', TRUE);
+    variable_set('language_test_language_negotiation_info', TRUE);
     $this->languageNegotiationUpdate();
 
     // Check that fixed language types are properly configured without the need
@@ -3171,7 +3174,7 @@ class LocaleLanguageNegotiationInfoFunctionalTest extends DrupalWebTestCase {
 
     // Make the content language type configurable by updating the language
     // negotiation settings with the proper flag enabled.
-    variable_set('locale_test_content_language_type', TRUE);
+    variable_set('language_test_content_language_type', TRUE);
     $this->languageNegotiationUpdate();
     $type = LANGUAGE_TYPE_CONTENT;
     $language_types = variable_get('language_types', language_types_get_default());
@@ -3192,7 +3195,7 @@ class LocaleLanguageNegotiationInfoFunctionalTest extends DrupalWebTestCase {
 
     // Remove the interface language negotiation method by updating the language
     // negotiation settings with the proper flag enabled.
-    variable_set('locale_test_language_negotiation_info_alter', TRUE);
+    variable_set('language_test_language_negotiation_info_alter', TRUE);
     $this->languageNegotiationUpdate();
     $negotiation = variable_get("language_negotiation_$type", array());
     $this->assertFalse(isset($negotiation[$interface_method_id]), t('Interface language negotiation method removed from the stored settings.'));
@@ -3212,14 +3215,14 @@ class LocaleLanguageNegotiationInfoFunctionalTest extends DrupalWebTestCase {
 
     // Check language negotiation results.
     $this->drupalGet('');
-    $last = variable_get('locale_test_language_negotiation_last', array());
+    $last = variable_get('language_test_language_negotiation_last', array());
     foreach (language_types_get_all() as $type) {
       $langcode = $last[$type];
       $value = $type == LANGUAGE_TYPE_CONTENT || strpos($type, 'test') !== FALSE ? 'it' : 'en';
       $this->assertEqual($langcode, $value, t('The negotiated language for %type is %language', array('%type' => $type, '%language' => $langcode)));
     }
 
-    // Disable locale_test and check that everything is set back to the original
+    // Disable language_test and check that everything is set back to the original
     // status.
     $this->languageNegotiationUpdate('disable');
 
@@ -3246,14 +3249,14 @@ class LocaleLanguageNegotiationInfoFunctionalTest extends DrupalWebTestCase {
    * Update language types/negotiation information.
    *
    * Manually invoke locale_modules_enabled()/locale_modules_disabled() since
-   * they would not be invoked after enabling/disabling locale_test the first
+   * they would not be invoked after enabling/disabling language_test the first
    * time.
    */
   protected function languageNegotiationUpdate($op = 'enable') {
     static $last_op = NULL;
-    $modules = array('locale_test');
+    $modules = array('language_test');
 
-    // Enable/disable locale_test only if we did not already before.
+    // Enable/disable language_test only if we did not already before.
     if ($last_op != $op) {
       $function = "module_{$op}";
       $function($modules);
diff --git a/core/modules/locale/tests/locale_test.info b/core/modules/locale/tests/locale_test.info
deleted file mode 100644
index 83cae4f..0000000
--- a/core/modules/locale/tests/locale_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Locale Test"
-description = "Support module for the locale layer tests."
-core = 8.x
-package = Testing
-version = VERSION
-hidden = TRUE
diff --git a/core/modules/locale/tests/locale_test.module b/core/modules/locale/tests/locale_test.module
deleted file mode 100644
index 93dfaa1..0000000
--- a/core/modules/locale/tests/locale_test.module
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-
-/**
- * @file
- * Mock module for locale layer tests.
- */
-
-/**
- * Implements hook_boot().
- *
- * For testing domain language negotiation, we fake it by setting
- * the HTTP_HOST here
- */
-function locale_test_boot() {
-  if (variable_get('locale_test_domain')) {
-    $_SERVER['HTTP_HOST'] = variable_get('locale_test_domain');
-  }
-}
-
-/**
- * Implements hook_init().
- */
-function locale_test_init() {
-  locale_test_store_language_negotiation();
-  if (isset($GLOBALS['language_interface']) && isset($GLOBALS['language_interface']->method_id)) {
-    drupal_set_message(t('Language negotiation method: @name', array('@name' => $GLOBALS['language_interface']->method_id)));
-  }
-}
-
-/**
- * Implements hook_language_types_info().
- */
-function locale_test_language_types_info() {
-  if (variable_get('locale_test_language_types', FALSE)) {
-    return array(
-      'test_language_type' => array(
-        'name' => t('Test'),
-        'description' => t('A test language type.'),
-      ),
-      'fixed_test_language_type' => array(
-        'fixed' => array('test_language_negotiation_method'),
-      ),
-    );
-  }
-}
-
-/**
- * Implements hook_language_types_info_alter().
- */
-function locale_test_language_types_info_alter(array &$language_types) {
-  if (variable_get('locale_test_content_language_type', FALSE)) {
-    unset($language_types[LANGUAGE_TYPE_CONTENT]['fixed']);
-  }
-}
-
-/**
- * Implements hook_language_negotiation_info().
- */
-function locale_test_language_negotiation_info() {
-  if (variable_get('locale_test_language_negotiation_info', FALSE)) {
-    $info = array(
-      'callbacks' => array(
-        'negotiation' => 'locale_test_language_negotiation_method',
-      ),
-      'file' => drupal_get_path('module', 'locale_test') .'/locale_test.module',
-      'weight' => -10,
-      'description' => t('This is a test language negotiation method.'),
-    );
-
-    return array(
-      'test_language_negotiation_method' => array(
-        'name' => t('Test'),
-        'types' => array(LANGUAGE_TYPE_CONTENT, 'test_language_type', 'fixed_test_language_type'),
-      ) + $info,
-      'test_language_negotiation_method_ts' => array(
-        'name' => t('Type-specific test'),
-        'types' => array('test_language_type'),
-      ) + $info,
-    );
-  }
-}
-
-/**
- * Implements hook_language_negotiation_info_alter().
- */
-function locale_test_language_negotiation_info_alter(array &$negotiation_info) {
-  if (variable_get('locale_test_language_negotiation_info_alter', FALSE)) {
-    unset($negotiation_info[LANGUAGE_NEGOTIATION_INTERFACE]);
-  }
-}
-
-/**
- * Store the last negotiated languages.
- */
-function locale_test_store_language_negotiation() {
-  $last = array();
-  foreach (language_types_get_all() as $type) {
-    $last[$type] = $GLOBALS[$type]->langcode;
-  }
-  variable_set('locale_test_language_negotiation_last', $last);
-}
-
-/**
- * Provides a test language negotiation method.
- */
-function locale_test_language_negotiation_method($languages) {
-  return 'it';
-}
diff --git a/core/modules/path/path.test b/core/modules/path/path.test
index 4dcd611..91a0fdd 100644
--- a/core/modules/path/path.test
+++ b/core/modules/path/path.test
@@ -507,17 +507,17 @@ class PathLanguageUITestCase extends PathTestCase {
 /**
  * Tests that paths are not prefixed on a monolingual site.
  */
-class PathMonolingualTestCase extends PathTestCase {
+class LanguagePathMonolingualTestCase extends PathTestCase {
   public static function getInfo() {
     return array(
       'name' => 'Paths on non-English monolingual sites',
       'description' => 'Confirm that paths are not changed on monolingual non-English sites',
-      'group' => 'Path',
+      'group' => 'Language',
     );
   }
 
   function setUp() {
-    parent::setUp('path', 'locale', 'translation');
+    parent::setUp('path', 'language');
 
     // Create and login user.
     $web_user = $this->drupalCreateUser(array('administer languages', 'access administration pages'));