diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 4588154..3dd92fe 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -14,6 +14,7 @@
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Menu\MenuTreeParameters;
+use Drupal\Core\Extension\ModuleHandler;
 use Drupal\Core\Url;
 use Drupal\Core\Block\BlockPluginInterface;
 use Drupal\user\UserInterface;
@@ -926,12 +927,13 @@ function _system_rebuild_module_data() {
  */
 function _system_rebuild_module_data_ensure_required($module, &$modules) {
   if (!empty($module->info['required'])) {
-    foreach ($module->info['dependencies'] as $dependant) {
-      if (!isset($modules[$dependant]->info['required'])) {
-        $modules[$dependant]->info['required'] = TRUE;
-        $modules[$dependant]->info['explanation'] = t('Dependency of required module @module', array('@module' => $module->info['name']));
+    foreach ($module->info['dependencies'] as $dependency) {
+      $dependency_name = ModuleHandler::parseDependency($dependency)['name'];
+      if (!isset($modules[$dependency_name]->info['required'])) {
+        $modules[$dependency_name]->info['required'] = TRUE;
+        $modules[$dependency_name]->info['explanation'] = t('Dependency of required module @module', array('@module' => $module->info['name']));
         // Ensure any dependencies it has are required.
-        _system_rebuild_module_data_ensure_required($modules[$dependant], $modules);
+        _system_rebuild_module_data_ensure_required($modules[$dependency_name], $modules);
       }
     }
   }
diff --git a/core/modules/system/tests/modules/module_test/module_test.info.yml b/core/modules/system/tests/modules/module_test/module_test.info.yml
index 025525c..241c3ad 100644
--- a/core/modules/system/tests/modules/module_test/module_test.info.yml
+++ b/core/modules/system/tests/modules/module_test/module_test.info.yml
@@ -8,4 +8,4 @@ core: 8.x
 # hook_system_info_alter() and ensuring that its dependencies also become
 # required.
 dependencies:
-  - node
+  - drupal:node (>=8.x)
diff --git a/core/modules/user/src/Tests/UserUsernameTest.php b/core/modules/user/src/Tests/UserUsernameTest.php
new file mode 100644
index 0000000..7b28df3
--- /dev/null
+++ b/core/modules/user/src/Tests/UserUsernameTest.php
@@ -0,0 +1,146 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\user\Tests\UserUsernameTest.
+ */
+
+namespace Drupal\user\Tests;
+
+use Drupal\Component\Utility\String;
+use Drupal\Component\Utility\Unicode;
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests username functionality.
+ *
+ * @group user
+ */
+class UserUsernameTest extends WebTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array(
+    'node',
+    'block',
+    'comment',
+    'user_test_views',
+  );
+
+  /**
+   * The user with the shorter username.
+   *
+   * @var \Drupal\user\Entity\User
+   */
+  protected $userShortName;
+
+  /**
+   * The user with the longer username.
+   *
+   * @var \Drupal\user\Entity\User
+   */
+  protected $userLongName;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+
+    $this->drupalCreateContentType(array('type' => 'article'));
+    $this->container->get('comment.manager')->addDefaultField('node', 'article');
+
+    // Create user with short username.
+    $this->userShortName = $this->drupalCreateUser(
+      array(
+        'access content',
+        'access comments',
+        'post comments',
+        'skip comment approval',
+        'create article content',
+      ),
+      $this->randomString(30)
+    );
+
+    // Create user with long username.
+    $this->userLongName = $this->drupalCreateUser(
+      array(
+        'access content',
+        'access comments',
+        'post comments',
+        'skip comment approval',
+        'create article content',
+      ),
+      $this->randomString(31)
+    );
+  }
+
+  /**
+   * Tests author name display on nodes.
+   */
+  public function testTruncatedNodeAuthorName() {
+    // Test untruncated username.
+    $this->drupalLogin($this->userShortName);
+
+    $node = $this->drupalCreateNode(array('type' => 'article'));
+    $this->drupalGet('node/' . $node->id());
+    $this->assertText(String::checkPlain($this->userShortName->getUsername()), 'Untruncated username found.');
+
+    // Test truncated username.
+    $this->drupalLogin($this->userLongName);
+
+    $node = $this->drupalCreateNode(array('type' => 'article'));
+    $this->drupalGet('node/' . $node->id());
+    $this->assertNoText(String::checkPlain($this->userLongName->getUsername()), 'Untruncated username not found.');
+    $this->assertText(String::checkPlain(Unicode::truncate($this->userLongName->getUsername(), 29, FALSE, TRUE)), 'Truncated username found.');
+  }
+
+  /**
+   * Tests author name display on comments.
+   */
+  public function testTruncatedCommentAuthorName() {
+    $node = $this->drupalCreateNode(array('type' => 'article'));
+
+    $this->drupalLogin($this->userShortName);
+    $comment = array(
+      'subject[0][value]' => $this->randomMachineName(),
+      'comment_body[0][value]' => $this->randomMachineName(20),
+    );
+    $this->drupalPostForm('comment/reply/node/' . $node->id() . '/comment', $comment, t('Save'));
+    $this->assertText(String::checkPlain($this->userShortName->getUsername()), 'Untruncated username found.');
+    $this->drupalLogin($this->userLongName);
+    $comment = array(
+      'subject[0][value]' => $this->randomMachineName(),
+      'comment_body[0][value]' => $this->randomMachineName(20),
+    );
+    $this->drupalPostForm('comment/reply/node/' . $node->id() . '/comment', $comment, t('Save'));
+    $this->assertNoText(String::checkPlain($this->userLongName->getUsername()), 'Untruncated username not found.');
+    $this->assertText(String::checkPlain(Unicode::truncate($this->userLongName->getUsername(), 29, FALSE, TRUE)), 'Truncated username found.');
+  }
+
+
+  /**
+   * Tests username display in Who's New block.
+   */
+  public function testTruncatedWhosNewName() {
+    // Enable Who's New block.
+    $this->drupalPlaceBlock('views_block:who_s_new-block_1');
+
+    $this->drupalGet('<front>');
+
+    // The Who's new block requires a last access to be set.
+    // Log the users in for them to show up.
+    $this->drupalLogin($this->userShortName);
+    $this->drupalLogin($this->userLongName);
+    // Log user out to prevent a false negative
+    $this->drupalLogout();
+
+    $this->assertText(String::checkPlain($this->userShortName->getUsername()), 'Untruncated username found.');
+    $this->assertNoText(String::checkPlain($this->userLongName->getUsername()), 'Untruncated username not found.');
+    $this->assertText(String::checkPlain(Unicode::truncate($this->userLongName->getUsername(), 29, FALSE, TRUE)), 'Truncated username found.');
+  }
+
+}
\ No newline at end of file
