diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeTemplateSuggestionsTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeTemplateSuggestionsTest.php
new file mode 100644
index 0000000..fbf03e9
--- /dev/null
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeTemplateSuggestionsTest.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @file
+ * Contains of \Drupal\node\Tests\NodeTemplateSuggestionsTest.
+ */
+
+namespace Drupal\node\Tests;
+
+/**
+ * Checks node template suggestions.
+ */
+class NodeTemplateSuggestionsTest extends NodeTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Node template suggestions',
+      'description' => 'Tests the node template suggestions.',
+      'group' => 'Node',
+    );
+  }
+
+  /**
+   * Tests if template_preprocess_node() generates the correct suggestions.
+   */
+  function testNodeThemeHookSuggestions() {
+    // Create node to be rendered.
+    $node = $this->drupalCreateNode();
+    $view_mode = 'full';
+
+    // Simulate theming of the node.
+    $build = \Drupal::entityManager()->getViewBuilder('node')->view($node, $view_mode);
+
+    $variables['elements'] = $build;
+    $suggestions = \Drupal::moduleHandler()->invokeAll('theme_suggestions_node', array($variables));
+
+    $this->assertEqual($suggestions, array('node__full', 'node__page', 'node__page__full', 'node__' . $node->id(), 'node__' . $node->id() . '__full'), 'Found expected node suggestions.');
+
+    // Change the view mode.
+    $view_mode = 'node.my_custom_view_mode';
+    $build = \Drupal::entityManager()->getViewBuilder('node')->view($node, $view_mode);
+
+    $variables['elements'] = $build;
+    $suggestions = \Drupal::moduleHandler()->invokeAll('theme_suggestions_node', array($variables));
+
+    $this->assertEqual($suggestions, array('node__node_my_custom_view_mode', 'node__page', 'node__page__node_my_custom_view_mode', 'node__' . $node->id(), 'node__' . $node->id() . '__node_my_custom_view_mode'), 'Found expected node suggestions.');
+  }
+
+}
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 63c2174..143af32 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -606,9 +606,13 @@ function node_preprocess_block(&$variables) {
 function node_theme_suggestions_node(array $variables) {
   $suggestions = array();
   $node = $variables['elements']['#node'];
+  $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_');
 
+  $suggestions[] = 'node__' . $sanitized_view_mode;
   $suggestions[] = 'node__' . $node->bundle();
+  $suggestions[] = 'node__' . $node->bundle() . '__' . $sanitized_view_mode;
   $suggestions[] = 'node__' . $node->id();
+  $suggestions[] = 'node__' . $node->id() . '__' . $sanitized_view_mode;
 
   return $suggestions;
 }
