diff --git a/tests/modules/entity_module_test/entity_module_test.routing.yml b/tests/modules/entity_module_test/entity_module_test.routing.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3724a6524dfac2c86ae0f6bebf1199a87259b55e
--- /dev/null
+++ b/tests/modules/entity_module_test/entity_module_test.routing.yml
@@ -0,0 +1,7 @@
+entity.entity_test_enhanced.collection:
+  path: '/entity_test_enhanced'
+  defaults:
+    _entity_list: 'entity_test_enhanced'
+    _title: 'Entity test with enhancements'
+  requirements:
+    _permission: 'administer entity_test_enhanced'
diff --git a/tests/modules/entity_module_test/src/Entity/EnhancedEntity.php b/tests/modules/entity_module_test/src/Entity/EnhancedEntity.php
index fcad5d1adbe2de4419ff4630dd88c16146bc3f04..d199f3d653743818bc5cab93a4194190e1139bf5 100644
--- a/tests/modules/entity_module_test/src/Entity/EnhancedEntity.php
+++ b/tests/modules/entity_module_test/src/Entity/EnhancedEntity.php
@@ -32,6 +32,7 @@ use Drupal\entity\Revision\RevisionableContentEntityBase;
  *       "create" = "\Drupal\entity\Routing\CreateHtmlRouteProvider",
  *       "delete-multiple" = "\Drupal\entity\Routing\DeleteMultipleRouteProvider",
  *     },
+ *     "list_builder" = "\Drupal\Core\Entity\EntityListBuilder",
  *   },
  *   base_table = "entity_test_enhanced",
  *   data_table = "entity_test_enhanced_field_data",
@@ -50,6 +51,7 @@ use Drupal\entity\Revision\RevisionableContentEntityBase;
  *     "add-page" = "/entity_test_enhanced/add",
  *     "add-form" = "/entity_test_enhanced/add/{type}",
  *     "canonical" = "/entity_test_enhanced/{entity_test_enhanced}",
+ *     "collection" = "/entity_test_enhanced",
  *     "delete-multiple-form" = "/entity_test_enhanced/delete",
  *     "revision" = "/entity_test_enhanced/{entity_test_enhanced}/revisions/{entity_test_enhanced_revision}/view",
  *     "revision-revert-form" = "/entity_test_enhanced/{entity_test_enhanced}/revisions/{entity_test_enhanced_revision}/revert",
diff --git a/tests/src/Functional/DeleteMultipleFormTest.php b/tests/src/Functional/DeleteMultipleFormTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..50fb6cd8796cd45c19c22c18756d2e55ccfe06df
--- /dev/null
+++ b/tests/src/Functional/DeleteMultipleFormTest.php
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\entity\Functional\DeleteMultipleFormTest.
+ */
+
+namespace Drupal\Tests\entity\Functional;
+
+use Drupal\entity_module_test\Entity\EnhancedEntity;
+use Drupal\entity_module_test\Entity\EnhancedEntityBundle;
+use Drupal\simpletest\BrowserTestBase;
+
+/**
+ * Tests the delete multiple confirmation form.
+ *
+ * @group entity
+ * @runTestsInSeparateProcesses
+ * @preserveGlobalState disabled
+ */
+class DeleteMultipleFormTest extends BrowserTestBase {
+
+  /**
+   * The current user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface;
+   */
+  protected $account;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['entity_module_test', 'user', 'entity'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    EnhancedEntityBundle::create([
+      'id' => 'default',
+      'label' => 'Default',
+    ])->save();
+    $this->account = $this->drupalCreateUser(['administer entity_test_enhanced']);
+    $this->drupalLogin($this->account);
+  }
+
+  /**
+   * Tests the add page.
+   */
+  public function testForm() {
+    $entities = [];
+    $selection = [];
+    for ($i = 0; $i < 2; $i++) {
+      $entity = EnhancedEntity::create([
+        'type' => 'default',
+      ]);
+      $entity->save();
+      $entities[$entity->id()] = $entity;
+
+      $langcode = $entity->language()->getId();
+      $selection[$entity->id()][$langcode] = $langcode;
+    }
+    // Add the selection to the tempstore just like DeleteAction would.
+    $tempstore = \Drupal::service('user.private_tempstore')->get('entity_delete_multiple_confirm');
+    $tempstore->set($this->account->id(), $selection);
+
+    $this->drupalGet('/entity_test_enhanced/delete');
+    $assert = $this->assertSession();
+    $assert->statusCodeEquals(200);
+    $assert->elementTextContains('css', '.page-title', 'Are you sure you want to delete these items?');
+    $delete_button = $this->getSession()->getPage()->findButton('Delete');
+    $delete_button->click();
+    $assert = $this->assertSession();
+    $assert->addressEquals('/entity_test_enhanced');
+    $assert->responseContains('Deleted 2 items.');
+
+    \Drupal::entityTypeManager()->getStorage('entity_test_enhanced')->resetCache();
+    $remaining_entities = EnhancedEntity::loadMultiple(array_keys($selection));
+    $this->assertEmpty($remaining_entities);
+  }
+
+}
diff --git a/tests/src/Kernel/DeleteActionTest.php b/tests/src/Kernel/DeleteActionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..411ced102e96a94751b69fdbc8c75c1d1c466b36
--- /dev/null
+++ b/tests/src/Kernel/DeleteActionTest.php
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\entity\Kernel\DeleteActionTest.
+ */
+
+namespace Drupal\Tests\entity\Kernel;
+
+use Drupal\entity\Plugin\Action\DeleteAction;
+use Drupal\entity_module_test\Entity\EnhancedEntity;
+use Drupal\entity_module_test\Entity\EnhancedEntityBundle;
+use Drupal\system\Entity\Action;
+use Drupal\user\Entity\User;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Tests the delete entity action.
+ */
+class DeleteActionTest extends KernelTestBase {
+
+  /**
+   * The current user.
+   *
+   * @var \Drupal\user\UserInterface
+   */
+  protected $user;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['action', 'node', 'entity_module_test', 'entity',
+                            'user', 'system'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installEntitySchema('user');
+    $this->installEntitySchema('entity_test_enhanced');
+    $this->installSchema('system', ['key_value_expire', 'sequences']);
+
+    $bundle = EnhancedEntityBundle::create([
+      'id' => 'default',
+      'label' => 'Default',
+    ]);
+    $bundle->save();
+
+    $this->user = User::create([
+      'name' => 'username',
+      'status' => 1,
+    ]);
+    $this->user->save();
+    \Drupal::service('current_user')->setAccount($this->user);
+  }
+
+  public function testAction() {
+    /** @var \Drupal\system\ActionConfigEntityInterface $action */
+    $action = Action::create([
+      'id' => 'enhanced_entity_delete_action',
+      'label' => 'Delete enhanced entity',
+      'plugin' => 'entity_delete_action:entity_test_enhanced',
+    ]);
+    $status = $action->save();
+    $this->assertEquals(SAVED_NEW, $status);
+    $this->assertInstanceOf(DeleteAction::class, $action->getPlugin());
+
+    $entities = [];
+    for ($i = 0; $i < 2; $i++) {
+      $entity = EnhancedEntity::create([
+        'type' => 'default',
+      ]);
+      $entity->save();
+      $entities[$entity->id()] = $entity;
+    }
+
+    $action->execute($entities);
+    // Confirm that the entity ids and langcodes are now in the tempstore.
+    $tempstore = \Drupal::service('user.private_tempstore')->get('entity_delete_multiple_confirm');
+    $selection = $tempstore->get($this->user->id());
+    $this->assertEquals(array_keys($entities), array_keys($selection));
+    $this->assertEquals([['en' => 'en'], ['en' => 'en']], array_values($selection));
+  }
+
+}