diff --git a/core/core.services.yml b/core/core.services.yml
index 7608878..f2e4b3d 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -510,12 +510,6 @@ services:
       - { name: module_install.uninstall_validator }
     arguments: ['@entity.manager', '@string_translation']
     lazy: true
-  field_uninstall_validator:
-    class: Drupal\Core\Field\FieldModuleUninstallValidator
-    tags:
-      - { name: module_install.uninstall_validator }
-    arguments: ['@entity.manager', '@string_translation']
-    lazy: true
   required_module_uninstall_validator:
     class: Drupal\Core\Extension\RequiredModuleUninstallValidator
     tags:
diff --git a/core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php b/core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php
index 4fd6a32..0523dd9 100644
--- a/core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php
+++ b/core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php
@@ -272,7 +272,7 @@ public function setExtraColumns($table_name, array $column_names) {
    *   TRUE if the field can be stored in a dedicated table, FALSE otherwise.
    */
   public function allowsSharedTableStorage(FieldStorageDefinitionInterface $storage_definition) {
-    return !$storage_definition->hasCustomStorage() && $storage_definition->isBaseField() && !$storage_definition->isMultiple();
+    return !$storage_definition->hasCustomStorage() && $storage_definition->isBaseField() && !$storage_definition->isMultiple() && !$storage_definition->isDeleted();
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
index 1172406..201c7ae 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
@@ -1468,9 +1468,7 @@ public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $
       $this->entityManager->getLastInstalledFieldStorageDefinitions($this->entityType->id())
     );
 
-    // @todo Remove the FieldStorageConfigInterface check when non-configurable
-    //   fields support purging: https://www.drupal.org/node/2282119.
-    if ($storage_definition instanceof FieldStorageConfigInterface && $table_mapping->requiresDedicatedTableStorage($storage_definition)) {
+    if ($table_mapping->requiresDedicatedTableStorage($storage_definition)) {
       // Mark all data associated with the field for deletion.
       $table = $table_mapping->getDedicatedDataTableName($storage_definition);
       $revision_table = $table_mapping->getDedicatedRevisionTableName($storage_definition);
diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
index 915af91..bb5e300 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
@@ -15,6 +15,7 @@
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Field\FieldException;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\field\FieldStorageConfigInterface;
 
 /**
@@ -420,26 +421,10 @@ public function onFieldStorageDefinitionUpdate(FieldStorageDefinitionInterface $
    * {@inheritdoc}
    */
   public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $storage_definition) {
-    // Only configurable fields currently support purging, so prevent deletion
-    // of ones we can't purge if they have existing data.
-    // @todo Add purging to all fields: https://www.drupal.org/node/2282119.
-    try {
-      if (!($storage_definition instanceof FieldStorageConfigInterface) && $this->storage->countFieldData($storage_definition, TRUE)) {
-        throw new FieldStorageDefinitionUpdateForbiddenException('Unable to delete a field (' . $storage_definition->getName() . ' in ' . $storage_definition->getTargetEntityTypeId() . ' entity) with data that cannot be purged.');
-      }
-    }
-    catch (DatabaseException $e) {
-      // This may happen when changing field storage schema, since we are not
-      // able to use a table mapping matching the passed storage definition.
-      // @todo Revisit this once we are able to instantiate the table mapping
-      //   properly. See https://www.drupal.org/node/2274017.
-      return;
-    }
-
     // Retrieve a table mapping which contains the deleted field still.
-    $table_mapping = $this->storage->getTableMapping(
-      $this->entityManager->getLastInstalledFieldStorageDefinitions($this->entityType->id())
-    );
+    $storage_definitions = $this->entityManager->getLastInstalledFieldStorageDefinitions($this->entityType->id());
+    $table_mapping = $this->storage->getTableMapping($storage_definitions);
+
     if ($table_mapping->requiresDedicatedTableStorage($storage_definition)) {
       // Move the table to a unique name while the table contents are being
       // deleted.
@@ -452,11 +437,66 @@ public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $
         $this->database->schema()->renameTable($revision_table, $revision_new_table);
       }
     }
+    else {
+      // Move the field data from the shared table to a dedicated one in order
+      // to allow it to be purged like a configurable field.
+      $shared_table_field_columns = $table_mapping->getColumnNames($storage_definition->getName());
+
+      $storage_definition->setDeleted(TRUE);
+
+      // Refresh the table mapping with the updated storage definition.
+      $storage_definitions[$storage_definition->getName()] = $storage_definition;
+      $table_mapping = $this->storage->getTableMapping($storage_definitions);
+
+      $dedicated_table_field_schema = $this->getDedicatedTableSchema($storage_definition);
+      $dedicated_table_field_columns = $table_mapping->getColumnNames($storage_definition->getName());
+
+      $dedicated_table_name = $table_mapping->getDedicatedDataTableName($storage_definition, TRUE);
+      $dedicated_table_name_mapping[$table_mapping->getDedicatedDataTableName($storage_definition)] = $dedicated_table_name;
+      if ($this->entityType->isRevisionable()) {
+        $dedicated_revision_table_name = $table_mapping->getDedicatedRevisionTableName($storage_definition, TRUE);
+        $dedicated_table_name_mapping[$table_mapping->getDedicatedRevisionTableName($storage_definition)] = $dedicated_revision_table_name;
+      }
 
-    // @todo Remove when finalizePurge() is invoked from the outside for all
-    //   fields: https://www.drupal.org/node/2282119.
-    if (!($storage_definition instanceof FieldStorageConfigInterface)) {
-      $this->performFieldSchemaOperation('delete', $storage_definition);
+      // Create the dedicated field tables using "deleted" table names.
+      foreach ($dedicated_table_field_schema as $name => $table) {
+        if (!$this->database->schema()->tableExists($dedicated_table_name_mapping[$name])) {
+          $this->database->schema()->createTable($dedicated_table_name_mapping[$name], $table);
+        }
+      }
+
+      if ($this->database->supportsTransactionalDDL()) {
+        // If the database supports transactional DDL, we can go ahead and rely
+        // on it. If not, we will have to rollback manually if something fails.
+        $transaction = $this->database->startTransaction();
+      }
+      try {
+        // Copy the data from the base table.
+        $base_table = $this->entityType->isTranslatable() ? $this->storage->getDataTable() : $this->storage->getBaseTable();
+        $this->database->insert($dedicated_table_name)
+          ->from($this->getSelectQueryForFieldStorageDeletion($base_table, $shared_table_field_columns, $dedicated_table_field_columns))
+          ->execute();
+
+        // Copy the data from the revision table.
+        if ($this->entityType->isRevisionable()) {
+          $revision_table = $this->entityType->isTranslatable() ? $this->storage->getRevisionDataTable() : $this->storage->getRevisionTable();
+          $this->database->insert($dedicated_revision_table_name)
+          ->from($this->getSelectQueryForFieldStorageDeletion($revision_table, $shared_table_field_columns, $dedicated_table_field_columns, $base_table))
+          ->execute();
+        }
+      }
+      catch (\Exception $e) {
+        if ($this->database->supportsTransactionalDDL()) {
+          $transaction->rollBack();
+        }
+        else {
+          // Delete the dedicated tables.
+          foreach ($dedicated_table_field_schema as $name => $table) {
+            $this->database->schema()->dropTable($dedicated_table_name_mapping[$name]);
+          }
+        }
+        throw $e;
+      }
     }
   }
 
@@ -468,6 +508,76 @@ public function finalizePurge(FieldStorageDefinitionInterface $storage_definitio
   }
 
   /**
+   * Returns a SELECT query suitable for inserting data into a dedicated table.
+   *
+   * @param string $table_name
+   *   The entity table name to select from.
+   * @param array $shared_table_field_columns
+   *   An array of field column names for a shared table schema.
+   * @param array $dedicated_table_field_columns
+   *   An array of field column names for a dedicated table schema.
+   * @param string $base_table
+   *   (optional) The name of the base entity table.
+   *
+   * @return \Drupal\Core\Database\Query\SelectInterface
+   *   A database select query.
+   */
+  protected function getSelectQueryForFieldStorageDeletion($table_name, array $shared_table_field_columns, array $dedicated_table_field_columns, $base_table = NULL) {
+    // Create a SELECT query that generates a result suitable for writing into
+    // a dedicated field table.
+    $select = $this->database->select($table_name, 'entity_table');
+
+    // Add the bundle column.
+    if ($bundle = $this->entityType->getKey('bundle')) {
+      if ($base_table) {
+        $select->join($base_table, 'base_table', "entity_table.{$this->entityType->getKey('id')} = %alias.{$this->entityType->getKey('id')}");
+        $select->addField('base_table', $bundle, 'bundle');
+      }
+      else {
+        $select->addField('entity_table', $bundle, 'bundle');
+      }
+    }
+    else {
+      $select->addExpression(':bundle', 'bundle', [':bundle' => $this->entityType->id()]);
+    }
+
+    // Add the deleted column.
+    $select->addExpression(':deleted', 'deleted', [':deleted' => 1]);
+
+    // Add the entity_id column.
+    $select->addField('entity_table', $this->entityType->getKey('id'), 'entity_id');
+
+    // Add the revision_id column.
+    if ($this->entityType->isRevisionable()) {
+      $select->addField('entity_table', $this->entityType->getKey('revision'), 'revision_id');
+    }
+    else {
+      $select->addField('entity_table', $this->entityType->getKey('id'), 'revision_id');
+    }
+
+    // Add the langcode column.
+    if ($langcode = $this->entityType->getKey('langcode')) {
+      $select->addField('entity_table', $langcode, 'langcode');
+    }
+    else {
+      $select->addExpression(':langcode', 'langcode', [':langcode' => LanguageInterface::LANGCODE_DEFAULT]);
+    }
+
+    // Add the delta column.
+    $select->addExpression(':delta', 'delta', [':delta' => 0]);
+
+    // Add all the dynamic field columns.
+    foreach ($shared_table_field_columns as $field_column_name => $schema_column_name) {
+      $select->addField('entity_table', $schema_column_name, $dedicated_table_field_columns[$field_column_name]);
+    }
+
+    // Lock the table rows.
+    $select->forUpdate(TRUE);
+
+    return $select;
+  }
+
+  /**
    * Checks that we are dealing with the correct entity type.
    *
    * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
diff --git a/core/lib/Drupal/Core/Field/BaseFieldDefinition.php b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
index 25df63b..f81939e 100644
--- a/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
+++ b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
@@ -804,6 +804,26 @@ public function getUniqueStorageIdentifier() {
   /**
    * {@inheritdoc}
    */
+  public function isDeleted() {
+    return isset($this->definition['deleted']) ? (bool) $this->definition['deleted'] : FALSE;
+  }
+
+  /**
+   * Sets whether the field storage is deleted.
+   *
+   * @param bool $deleted
+   *   Whether the field storage is deleted.
+   *
+   * @return $this
+   */
+  public function setDeleted($deleted) {
+    $this->definition['deleted'] = $deleted;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function getConfig($bundle) {
     $override = BaseFieldOverride::loadByName($this->getTargetEntityTypeId(), $bundle, $this->getName());
     if ($override) {
diff --git a/core/lib/Drupal/Core/Field/FieldModuleUninstallValidator.php b/core/lib/Drupal/Core/Field/FieldModuleUninstallValidator.php
deleted file mode 100644
index 08a27cb..0000000
--- a/core/lib/Drupal/Core/Field/FieldModuleUninstallValidator.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-namespace Drupal\Core\Field;
-
-use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\Entity\FieldableEntityInterface;
-use Drupal\Core\Entity\FieldableEntityStorageInterface;
-use Drupal\Core\Extension\ModuleUninstallValidatorInterface;
-use Drupal\Core\StringTranslation\StringTranslationTrait;
-use Drupal\Core\StringTranslation\TranslationInterface;
-
-/**
- * Validates module uninstall readiness based on defined storage definitions.
- *
- * @todo Remove this once we support field purging for base fields. See
- *   https://www.drupal.org/node/2282119.
- */
-class FieldModuleUninstallValidator implements ModuleUninstallValidatorInterface {
-  use StringTranslationTrait;
-
-  /**
-   * Constructs the object.
-   *
-   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
-   *   The entity manager.
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
-   *   The string translation service.
-   */
-  public function __construct(EntityManagerInterface $entity_manager, TranslationInterface $string_translation) {
-    $this->entityManager = $entity_manager;
-    $this->stringTranslation = $string_translation;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function validate($module_name) {
-    $reasons = [];
-
-    // We skip fields provided by the Field module as it implements field
-    // purging.
-    if ($module_name != 'field') {
-      foreach ($this->entityManager->getDefinitions() as $entity_type_id => $entity_type) {
-        // We skip entity types defined by the module as there must be no
-        // content to be able to uninstall them anyway.
-        // See \Drupal\Core\Entity\ContentUninstallValidator.
-        if ($entity_type->getProvider() != $module_name && $entity_type->entityClassImplements(FieldableEntityInterface::class)) {
-          foreach ($this->entityManager->getFieldStorageDefinitions($entity_type_id) as $storage_definition) {
-            if ($storage_definition->getProvider() == $module_name) {
-              $storage = $this->entityManager->getStorage($entity_type_id);
-              if ($storage instanceof FieldableEntityStorageInterface && $storage->countFieldData($storage_definition, TRUE)) {
-                $reasons[] = $this->t('There is data for the field @field-name on entity type @entity_type', [
-                  '@field-name' => $storage_definition->getName(),
-                  '@entity_type' => $entity_type->getLabel(),
-                ]);
-              }
-            }
-          }
-        }
-      }
-    }
-
-    return $reasons;
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Field/FieldStorageDefinitionInterface.php b/core/lib/Drupal/Core/Field/FieldStorageDefinitionInterface.php
index d703659..97f9d28 100644
--- a/core/lib/Drupal/Core/Field/FieldStorageDefinitionInterface.php
+++ b/core/lib/Drupal/Core/Field/FieldStorageDefinitionInterface.php
@@ -339,4 +339,12 @@ public function isBaseField();
    */
   public function getUniqueStorageIdentifier();
 
+  /**
+   * Returns whether the field is deleted or not.
+   *
+   * @return bool
+   *   TRUE if the field is deleted, FALSE otherwise.
+   */
+  public function isDeleted();
+
 }
diff --git a/core/lib/Drupal/Core/ProxyClass/Field/FieldModuleUninstallValidator.php b/core/lib/Drupal/Core/ProxyClass/Field/FieldModuleUninstallValidator.php
deleted file mode 100644
index f15745f..0000000
--- a/core/lib/Drupal/Core/ProxyClass/Field/FieldModuleUninstallValidator.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-// @codingStandardsIgnoreFile
-
-/**
- * This file was generated via php core/scripts/generate-proxy-class.php 'Drupal\Core\Field\FieldModuleUninstallValidator' "core/lib/Drupal/Core".
- */
-
-namespace Drupal\Core\ProxyClass\Field {
-
-    /**
-     * Provides a proxy class for \Drupal\Core\Field\FieldModuleUninstallValidator.
-     *
-     * @see \Drupal\Component\ProxyBuilder
-     */
-    class FieldModuleUninstallValidator implements \Drupal\Core\Extension\ModuleUninstallValidatorInterface
-    {
-
-        use \Drupal\Core\DependencyInjection\DependencySerializationTrait;
-
-        /**
-         * The id of the original proxied service.
-         *
-         * @var string
-         */
-        protected $drupalProxyOriginalServiceId;
-
-        /**
-         * The real proxied service, after it was lazy loaded.
-         *
-         * @var \Drupal\Core\Field\FieldModuleUninstallValidator
-         */
-        protected $service;
-
-        /**
-         * The service container.
-         *
-         * @var \Symfony\Component\DependencyInjection\ContainerInterface
-         */
-        protected $container;
-
-        /**
-         * Constructs a ProxyClass Drupal proxy object.
-         *
-         * @param \Symfony\Component\DependencyInjection\ContainerInterface $container
-         *   The container.
-         * @param string $drupal_proxy_original_service_id
-         *   The service ID of the original service.
-         */
-        public function __construct(\Symfony\Component\DependencyInjection\ContainerInterface $container, $drupal_proxy_original_service_id)
-        {
-            $this->container = $container;
-            $this->drupalProxyOriginalServiceId = $drupal_proxy_original_service_id;
-        }
-
-        /**
-         * Lazy loads the real service from the container.
-         *
-         * @return object
-         *   Returns the constructed real service.
-         */
-        protected function lazyLoadItself()
-        {
-            if (!isset($this->service)) {
-                $this->service = $this->container->get($this->drupalProxyOriginalServiceId);
-            }
-
-            return $this->service;
-        }
-
-        /**
-         * {@inheritdoc}
-         */
-        public function validate($module_name)
-        {
-            return $this->lazyLoadItself()->validate($module_name);
-        }
-
-        /**
-         * {@inheritdoc}
-         */
-        public function setStringTranslation(\Drupal\Core\StringTranslation\TranslationInterface $translation)
-        {
-            return $this->lazyLoadItself()->setStringTranslation($translation);
-        }
-
-    }
-
-}
diff --git a/core/modules/field/src/FieldStorageConfigInterface.php b/core/modules/field/src/FieldStorageConfigInterface.php
index 1b66621..1f3fed2 100644
--- a/core/modules/field/src/FieldStorageConfigInterface.php
+++ b/core/modules/field/src/FieldStorageConfigInterface.php
@@ -35,14 +35,6 @@ public function getTypeProvider();
   public function getBundles();
 
   /**
-   * Returns whether the field is deleted or not.
-   *
-   * @return bool
-   *   TRUE if the field is deleted.
-   */
-  public function isDeleted();
-
-  /**
    * Checks if the field storage can be deleted.
    *
    * @return bool
diff --git a/core/tests/Drupal/KernelTests/Core/Field/FieldModuleUninstallValidatorTest.php b/core/tests/Drupal/KernelTests/Core/Field/FieldModuleUninstallValidatorTest.php
deleted file mode 100644
index b9d545e..0000000
--- a/core/tests/Drupal/KernelTests/Core/Field/FieldModuleUninstallValidatorTest.php
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-
-namespace Drupal\KernelTests\Core\Field;
-
-use Drupal\Core\Extension\ModuleUninstallValidatorException;
-use Drupal\Core\Field\BaseFieldDefinition;
-use Drupal\entity_test\FieldStorageDefinition;
-use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
-
-/**
- * Tests FieldModuleUninstallValidator functionality.
- *
- * @group Field
- */
-class FieldModuleUninstallValidatorTest extends EntityKernelTestBase {
-
-  /**
-   * The entity definition update manager.
-   *
-   * @var \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface
-   */
-  protected $entityDefinitionUpdateManager;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-    $this->installSchema('user', 'users_data');
-    $this->entityDefinitionUpdateManager = $this->container->get('entity.definition_update_manager');
-
-    // Setup some fields for entity_test_extra to create.
-    $definitions['extra_base_field'] = BaseFieldDefinition::create('string')
-      ->setName('extra_base_field')
-      ->setTargetEntityTypeId('entity_test')
-      ->setTargetBundle('entity_test');
-    $this->state->set('entity_test.additional_base_field_definitions', $definitions);
-    $definitions['extra_bundle_field'] = FieldStorageDefinition::create('string')
-      ->setName('extra_bundle_field')
-      ->setTargetEntityTypeId('entity_test')
-      ->setTargetBundle('entity_test');
-    $this->state->set('entity_test.additional_field_storage_definitions', $definitions);
-    $this->state->set('entity_test.entity_test.additional_bundle_field_definitions', $definitions);
-    $this->entityManager->clearCachedDefinitions();
-  }
-
-  /**
-   * Tests uninstall entity_test module with and without content for the field.
-   */
-  public function testUninstallingModule() {
-    // Test uninstall works fine without content.
-    $this->assertModuleInstallUninstall('entity_test_extra');
-
-    // Test uninstalling works fine with content having no field values.
-    $entity = $this->entityManager->getStorage('entity_test')->create([
-      'name' => $this->randomString(),
-    ]);
-    $entity->save();
-    $this->assertModuleInstallUninstall('entity_test_extra');
-    $entity->delete();
-
-    // Verify uninstall works fine without content again.
-    $this->assertModuleInstallUninstall('entity_test_extra');
-    // Verify uninstalling entity_test is not possible when there is content for
-    // the base field.
-    $this->enableModules(['entity_test_extra']);
-    $this->entityDefinitionUpdateManager->applyUpdates();
-    $entity = $this->entityManager->getStorage('entity_test')->create([
-      'name' => $this->randomString(),
-      'extra_base_field' => $this->randomString(),
-    ]);
-    $entity->save();
-
-    try {
-      $message = 'Module uninstallation fails as the module provides a base field which has content.';
-      $this->getModuleInstaller()->uninstall(['entity_test_extra']);
-      $this->fail($message);
-    }
-    catch (ModuleUninstallValidatorException $e) {
-      $this->pass($message);
-      $this->assertEqual($e->getMessage(), 'The following reasons prevent the modules from being uninstalled: There is data for the field extra_base_field on entity type Test entity');
-    }
-
-    // Verify uninstalling entity_test is not possible when there is content for
-    // the bundle field.
-    $entity->delete();
-    $this->assertModuleInstallUninstall('entity_test_extra');
-    $this->enableModules(['entity_test_extra']);
-    $this->entityDefinitionUpdateManager->applyUpdates();
-    $entity = $this->entityManager->getStorage('entity_test')->create([
-      'name' => $this->randomString(),
-      'extra_bundle_field' => $this->randomString(),
-    ]);
-    $entity->save();
-    try {
-      $this->getModuleInstaller()->uninstall(['entity_test_extra']);
-      $this->fail('Module uninstallation fails as the module provides a bundle field which has content.');
-    }
-    catch (ModuleUninstallValidatorException $e) {
-      $this->pass('Module uninstallation fails as the module provides a bundle field which has content.');
-    }
-  }
-
-  /**
-   * Asserts the given module can be installed and uninstalled.
-   *
-   * @param string $module_name
-   *   The module to install and uninstall.
-   */
-  protected function assertModuleInstallUninstall($module_name) {
-    // Install the module if it is not installed yet.
-    if (!\Drupal::moduleHandler()->moduleExists($module_name)) {
-      $this->enableModules([$module_name]);
-    }
-    $this->entityDefinitionUpdateManager->applyUpdates();
-    $this->assertTrue($this->getModuleHandler()->moduleExists($module_name), $module_name . ' module is enabled.');
-    $this->getModuleInstaller()->uninstall([$module_name]);
-    $this->entityDefinitionUpdateManager->applyUpdates();
-    $this->assertFalse($this->getModuleHandler()->moduleExists($module_name), $module_name . ' module is disabled.');
-  }
-
-  /**
-   * Returns the ModuleHandler.
-   *
-   * @return \Drupal\Core\Extension\ModuleHandlerInterface
-   */
-  protected function getModuleHandler() {
-    return $this->container->get('module_handler');
-  }
-
-  /**
-   * Returns the ModuleInstaller.
-   *
-   * @return \Drupal\Core\Extension\ModuleInstallerInterface
-   */
-  protected function getModuleInstaller() {
-    return $this->container->get('module_installer');
-  }
-
-}
