diff --git a/core/modules/node/src/Tests/Views/NodeRevisionLinksTest.php b/core/modules/node/src/Tests/Views/NodeRevisionLinksTest.php
new file mode 100644
index 0000000..317e9a2
--- /dev/null
+++ b/core/modules/node/src/Tests/Views/NodeRevisionLinksTest.php
@@ -0,0 +1,136 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\node\Tests\Views\NodeRevisionLinksTest.
+ */
+
+namespace Drupal\node\Tests\Views;
+
+use Drupal\Core\Url;
+use Drupal\node\Entity\Node;
+use Drupal\user\Entity\User;
+use Drupal\views\Entity\View;
+use Drupal\views\Tests\ViewKernelTestBase;
+use Drupal\views\Views;
+
+/**
+ * Tests the node revision link field handlers.
+ *
+ * @group node
+ */
+class NodeRevisionLinksTest extends ViewKernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['node', 'field', 'text', 'node_test_config', 'user', 'entity_reference'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp($import_test_views = TRUE) {
+    parent::setUp($import_test_views);
+
+    $this->installEntitySchema('node');
+    $this->installEntitySchema('user');
+    $this->installSchema('node', ['node_access']);
+    $this->installConfig(['node', 'field']);
+
+    $admin_user = User::create([
+      'name' => $this->randomMachineName(),
+      'permissions' => ['administer nodes', 'view all revisions', 'revert all revisions', 'delete all revisions'],
+    ]);
+    $admin_user->save();
+    \Drupal::currentUser()->setAccount($admin_user);
+  }
+
+  /**
+   * Tests the node revision link handlers.
+   */
+  public function testRevisionLinkHandlers() {
+    $view_id = $this->randomMachineName();
+    $view = View::create([
+      'id' => $view_id,
+      'base_table' => 'node_field_revision',
+      'display' => [
+        'default' => [
+          'display_plugin' => 'default',
+          'id' => 'default',
+          'display_options' => [
+            'fields' => [
+              'link_to_revision' => [
+                'table' => 'node_field_revision',
+                'field' => 'link_to_revision',
+                'id' => 'link_to_revision',
+                'plugin_id' => 'node_revision_link',
+              ],
+              'delete_revision' => [
+                'table' => 'node_field_revision',
+                'field' => 'delete_revision',
+                'id' => 'delete_revision',
+                'plugin_id' => 'node_revision_link_delete',
+              ],
+              'revert_revision' => [
+                'table' => 'node_field_revision',
+                'field' => 'revert_revision',
+                'id' => 'revert_revision',
+                'plugin_id' => 'node_revision_link_revert',
+              ],
+            ],
+          ],
+        ],
+      ],
+    ]);
+    $view->save();
+
+    $node_original = Node::create([
+      'type' => 'default',
+      'title' => $this->randomMachineName(),
+    ]);
+    $node_original->save();
+
+    $executable = Views::getView($view_id);
+    $executable->preview();
+
+    // Verify that I just see the node link when I'm at the current revision.
+    $view_node_revision = $executable->style_plugin->getField(0, 'link_to_revision');
+    $options = ['query' => ['destination' => '/']];
+    $this->assertEqual(\Drupal::l('View', $node_original->urlInfo('canonical', $options)), (string) $view_node_revision, 'Found the view node link.');
+
+    // Verify that I can't delete or revert the current revision.
+    $delete_node_revision = $executable->style_plugin->getField(0, 'delete_revision');
+    $this->assertEqual('', (string) $delete_node_revision);
+    $revert_node_revision = $executable->style_plugin->getField(0, 'revert_revision');
+    $this->assertEqual('', (string) $revert_node_revision);
+
+    // Create a new revision for the node.
+    $node_updated = clone $node_original;
+    $node_updated->setTitle($this->randomMachineName());
+    $node_updated->setNewRevision();
+    $node_updated->save();
+
+    $executable = Views::getView($view_id);
+    $executable->preview();
+
+    // Verify that I can see the revision link when I'm not at the current
+    // revision.
+    $view_node_revision = $executable->style_plugin->getField(0, 'link_to_revision');
+    $url = Url::fromRoute('entity.node.revision', ['node' => $node_original->id(), 'node_revision' => $node_original->getRevisionId()], $options);
+    $this->assertEqual(\Drupal::l('View', $url), (string) $view_node_revision, 'Found the view revision link.');
+
+    // Verify that I can see the link to delete the previous revision.
+    $delete_node_revision = $executable->style_plugin->getField(0, 'delete_revision');
+    $url = Url::fromRoute('node.revision_delete_confirm', ['node' => $node_original->id(), 'node_revision' => $node_original->getRevisionId()], $options);
+    $this->assertEqual(\Drupal::l('Delete', $url), (string) $delete_node_revision);
+
+    // Verify that I can see the revert revision link of the previous revision.
+    $revert_node_revision = $executable->style_plugin->getField(0, 'revert_revision');
+    $url = Url::fromRoute('node.revision_revert_confirm', ['node' => $node_original->id(), 'node_revision' => $node_original->getRevisionId()], $options);
+    $this->assertEqual(\Drupal::l('Revert', $url), (string) $revert_node_revision);
+
+    // Verify that the second revision is the current revision now.
+    $view_node_revision = $executable->style_plugin->getField(1, 'link_to_revision');
+    $this->assertEqual(\Drupal::l('View', $node_original->urlInfo('canonical', $options)), (string) $view_node_revision, 'Found the view node link.');
+  }
+}
