diff --git a/core/modules/image/src/Tests/FileMoveTest.php b/core/modules/image/src/Tests/FileMoveTest.php
deleted file mode 100644
index d9ce27f75d..0000000000
--- a/core/modules/image/src/Tests/FileMoveTest.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-namespace Drupal\image\Tests;
-
-use Drupal\file\Entity\File;
-use Drupal\simpletest\WebTestBase;
-use Drupal\image\Entity\ImageStyle;
-
-/**
- * Tests the file move function for images and image styles.
- *
- * @group image
- */
-class FileMoveTest extends WebTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['image'];
-
-  /**
-   * Tests moving a randomly generated image.
-   */
-  public function testNormal() {
-    // Pick a file for testing.
-    $file = File::create((array) current($this->drupalGetTestFiles('image')));
-
-    // Create derivative image.
-    $styles = ImageStyle::loadMultiple();
-    $style = reset($styles);
-    $original_uri = $file->getFileUri();
-    $derivative_uri = $style->buildUri($original_uri);
-    $style->createDerivative($original_uri, $derivative_uri);
-
-    // Check if derivative image exists.
-    $this->assertTrue(file_exists($derivative_uri), 'Make sure derivative image is generated successfully.');
-
-    // Clone the object so we don't have to worry about the function changing
-    // our reference copy.
-    $desired_filepath = 'public://' . $this->randomMachineName();
-    $result = file_move(clone $file, $desired_filepath, FILE_EXISTS_ERROR);
-
-    // Check if image has been moved.
-    $this->assertTrue(file_exists($result->getFileUri()), 'Make sure image is moved successfully.');
-
-    // Check if derivative image has been flushed.
-    $this->assertFalse(file_exists($derivative_uri), 'Make sure derivative image has been flushed.');
-  }
-
-}
diff --git a/core/modules/image/src/Tests/ImageDimensionsTest.php b/core/modules/image/src/Tests/ImageDimensionsTest.php
deleted file mode 100644
index b3e100dd9f..0000000000
--- a/core/modules/image/src/Tests/ImageDimensionsTest.php
+++ /dev/null
@@ -1,290 +0,0 @@
-<?php
-
-namespace Drupal\image\Tests;
-
-use Drupal\image\Entity\ImageStyle;
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Tests that images have correct dimensions when styled.
- *
- * @group image
- */
-class ImageDimensionsTest extends WebTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['image', 'image_module_test'];
-
-  protected $profile = 'testing';
-
-  /**
-   * Test styled image dimensions cumulatively.
-   */
-  public function testImageDimensions() {
-    $image_factory = $this->container->get('image.factory');
-    // Create a working copy of the file.
-    $files = $this->drupalGetTestFiles('image');
-    $file = reset($files);
-    $original_uri = file_unmanaged_copy($file->uri, 'public://', FILE_EXISTS_RENAME);
-
-    // Create a style.
-    /** @var $style \Drupal\image\ImageStyleInterface */
-    $style = ImageStyle::create(['name' => 'test', 'label' => 'Test']);
-    $style->save();
-    $generated_uri = 'public://styles/test/public/' . \Drupal::service('file_system')->basename($original_uri);
-    $url = file_url_transform_relative($style->buildUrl($original_uri));
-
-    $variables = [
-      '#theme' => 'image_style',
-      '#style_name' => 'test',
-      '#uri' => $original_uri,
-      '#width' => 40,
-      '#height' => 20,
-    ];
-    // Verify that the original image matches the hard-coded values.
-    $image_file = $image_factory->get($original_uri);
-    $this->assertEqual($image_file->getWidth(), $variables['#width']);
-    $this->assertEqual($image_file->getHeight(), $variables['#height']);
-
-    // Scale an image that is wider than it is high.
-    $effect = [
-      'id' => 'image_scale',
-      'data' => [
-        'width' => 120,
-        'height' => 90,
-        'upscale' => TRUE,
-      ],
-      'weight' => 0,
-    ];
-
-    $style->addImageEffect($effect);
-    $style->save();
-    $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="120" height="60" alt="" class="image-style-test" />');
-    $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
-    $this->drupalGet($this->getAbsoluteUrl($url));
-    $this->assertResponse(200, 'Image was generated at the URL.');
-    $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
-    $image_file = $image_factory->get($generated_uri);
-    $this->assertEqual($image_file->getWidth(), 120);
-    $this->assertEqual($image_file->getHeight(), 60);
-
-    // Rotate 90 degrees anticlockwise.
-    $effect = [
-      'id' => 'image_rotate',
-      'data' => [
-        'degrees' => -90,
-        'random' => FALSE,
-      ],
-      'weight' => 1,
-    ];
-
-    $style->addImageEffect($effect);
-    $style->save();
-    $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="60" height="120" alt="" class="image-style-test" />');
-    $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
-    $this->drupalGet($this->getAbsoluteUrl($url));
-    $this->assertResponse(200, 'Image was generated at the URL.');
-    $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
-    $image_file = $image_factory->get($generated_uri);
-    $this->assertEqual($image_file->getWidth(), 60);
-    $this->assertEqual($image_file->getHeight(), 120);
-
-    // Scale an image that is higher than it is wide (rotated by previous effect).
-    $effect = [
-      'id' => 'image_scale',
-      'data' => [
-        'width' => 120,
-        'height' => 90,
-        'upscale' => TRUE,
-      ],
-      'weight' => 2,
-    ];
-
-    $style->addImageEffect($effect);
-    $style->save();
-    $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="45" height="90" alt="" class="image-style-test" />');
-    $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
-    $this->drupalGet($this->getAbsoluteUrl($url));
-    $this->assertResponse(200, 'Image was generated at the URL.');
-    $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
-    $image_file = $image_factory->get($generated_uri);
-    $this->assertEqual($image_file->getWidth(), 45);
-    $this->assertEqual($image_file->getHeight(), 90);
-
-    // Test upscale disabled.
-    $effect = [
-      'id' => 'image_scale',
-      'data' => [
-        'width' => 400,
-        'height' => 200,
-        'upscale' => FALSE,
-      ],
-      'weight' => 3,
-    ];
-
-    $style->addImageEffect($effect);
-    $style->save();
-    $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="45" height="90" alt="" class="image-style-test" />');
-    $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
-    $this->drupalGet($this->getAbsoluteUrl($url));
-    $this->assertResponse(200, 'Image was generated at the URL.');
-    $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
-    $image_file = $image_factory->get($generated_uri);
-    $this->assertEqual($image_file->getWidth(), 45);
-    $this->assertEqual($image_file->getHeight(), 90);
-
-    // Add a desaturate effect.
-    $effect = [
-      'id' => 'image_desaturate',
-      'data' => [],
-      'weight' => 4,
-    ];
-
-    $style->addImageEffect($effect);
-    $style->save();
-    $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="45" height="90" alt="" class="image-style-test" />');
-    $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
-    $this->drupalGet($this->getAbsoluteUrl($url));
-    $this->assertResponse(200, 'Image was generated at the URL.');
-    $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
-    $image_file = $image_factory->get($generated_uri);
-    $this->assertEqual($image_file->getWidth(), 45);
-    $this->assertEqual($image_file->getHeight(), 90);
-
-    // Add a random rotate effect.
-    $effect = [
-      'id' => 'image_rotate',
-      'data' => [
-        'degrees' => 180,
-        'random' => TRUE,
-      ],
-      'weight' => 5,
-    ];
-
-    $style->addImageEffect($effect);
-    $style->save();
-    $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" alt="" class="image-style-test" />');
-    $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
-    $this->drupalGet($this->getAbsoluteUrl($url));
-    $this->assertResponse(200, 'Image was generated at the URL.');
-    $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
-
-
-    // Add a crop effect.
-    $effect = [
-      'id' => 'image_crop',
-      'data' => [
-        'width' => 30,
-        'height' => 30,
-        'anchor' => 'center-center',
-      ],
-      'weight' => 6,
-    ];
-
-    $style->addImageEffect($effect);
-    $style->save();
-    $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="30" height="30" alt="" class="image-style-test" />');
-    $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
-    $this->drupalGet($this->getAbsoluteUrl($url));
-    $this->assertResponse(200, 'Image was generated at the URL.');
-    $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
-    $image_file = $image_factory->get($generated_uri);
-    $this->assertEqual($image_file->getWidth(), 30);
-    $this->assertEqual($image_file->getHeight(), 30);
-
-    // Rotate to a non-multiple of 90 degrees.
-    $effect = [
-      'id' => 'image_rotate',
-      'data' => [
-        'degrees' => 57,
-        'random' => FALSE,
-      ],
-      'weight' => 7,
-    ];
-
-    $effect_id = $style->addImageEffect($effect);
-    $style->save();
-    $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="41" height="41" alt="" class="image-style-test" />');
-    $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
-    $this->drupalGet($this->getAbsoluteUrl($url));
-    $this->assertResponse(200, 'Image was generated at the URL.');
-    $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
-    $image_file = $image_factory->get($generated_uri);
-    $this->assertEqual($image_file->getWidth(), 41);
-    $this->assertEqual($image_file->getHeight(), 41);
-
-    $effect_plugin = $style->getEffect($effect_id);
-    $style->deleteImageEffect($effect_plugin);
-
-    // Ensure that an effect can unset dimensions.
-    $effect = [
-      'id' => 'image_module_test_null',
-      'data' => [],
-      'weight' => 8,
-    ];
-
-    $style->addImageEffect($effect);
-    $style->save();
-    $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" alt="" class="image-style-test" />');
-
-    // Test URI dependent image effect.
-    $style = ImageStyle::create(['name' => 'test_uri', 'label' => 'Test URI']);
-    $effect = [
-      'id' => 'image_module_test_uri_dependent',
-      'data' => [],
-      'weight' => 0,
-    ];
-    $style->addImageEffect($effect);
-    $style->save();
-    $variables = [
-      '#theme' => 'image_style',
-      '#style_name' => 'test_uri',
-      '#uri' => $original_uri,
-      '#width' => 40,
-      '#height' => 20,
-    ];
-    // PNG original image. Should be resized to 100x100.
-    $generated_uri = 'public://styles/test_uri/public/' . \Drupal::service('file_system')->basename($original_uri);
-    $url = file_url_transform_relative($style->buildUrl($original_uri));
-    $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="100" height="100" alt="" class="image-style-test-uri" />');
-    $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
-    $this->drupalGet($this->getAbsoluteUrl($url));
-    $this->assertResponse(200, 'Image was generated at the URL.');
-    $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
-    $image_file = $image_factory->get($generated_uri);
-    $this->assertEqual($image_file->getWidth(), 100);
-    $this->assertEqual($image_file->getHeight(), 100);
-    // GIF original image. Should be resized to 50x50.
-    $file = $files[1];
-    $original_uri = file_unmanaged_copy($file->uri, 'public://', FILE_EXISTS_RENAME);
-    $generated_uri = 'public://styles/test_uri/public/' . \Drupal::service('file_system')->basename($original_uri);
-    $url = file_url_transform_relative($style->buildUrl($original_uri));
-    $variables['#uri'] = $original_uri;
-    $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="50" height="50" alt="" class="image-style-test-uri" />');
-    $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
-    $this->drupalGet($this->getAbsoluteUrl($url));
-    $this->assertResponse(200, 'Image was generated at the URL.');
-    $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
-    $image_file = $image_factory->get($generated_uri);
-    $this->assertEqual($image_file->getWidth(), 50);
-    $this->assertEqual($image_file->getHeight(), 50);
-  }
-
-  /**
-   * Render an image style element.
-   *
-   * drupal_render() alters the passed $variables array by adding a new key
-   * '#printed' => TRUE. This prevents next call to re-render the element. We
-   * wrap drupal_render() in a helper protected method and pass each time a
-   * fresh array so that $variables won't get altered and the element is
-   * re-rendered each time.
-   */
-  protected function getImageTag($variables) {
-    return str_replace("\n", NULL, \Drupal::service('renderer')->renderRoot($variables));
-  }
-
-}
diff --git a/core/modules/image/src/Tests/ImageFieldDefaultImagesTest.php b/core/modules/image/src/Tests/ImageFieldDefaultImagesTest.php
deleted file mode 100644
index 6255e41ab3..0000000000
--- a/core/modules/image/src/Tests/ImageFieldDefaultImagesTest.php
+++ /dev/null
@@ -1,392 +0,0 @@
-<?php
-
-namespace Drupal\image\Tests;
-
-use Drupal\Component\Utility\Unicode;
-use Drupal\Core\Entity\Entity\EntityViewDisplay;
-use Drupal\field\Entity\FieldConfig;
-use Drupal\file\Entity\File;
-use Drupal\field\Entity\FieldStorageConfig;
-
-/**
- * Tests setting up default images both to the field and field storage.
- *
- * @group image
- */
-class ImageFieldDefaultImagesTest extends ImageFieldTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['field_ui'];
-
-  /**
-   * Tests CRUD for fields and field storages with default images.
-   */
-  public function testDefaultImages() {
-    $node_storage = $this->container->get('entity.manager')->getStorage('node');
-    // Create files to use as the default images.
-    $files = $this->drupalGetTestFiles('image');
-    // Create 10 files so the default image fids are not a single value.
-    for ($i = 1; $i <= 10; $i++) {
-      $filename = $this->randomMachineName() . "$i";
-      $desired_filepath = 'public://' . $filename;
-      file_unmanaged_copy($files[0]->uri, $desired_filepath, FILE_EXISTS_ERROR);
-      $file = File::create(['uri' => $desired_filepath, 'filename' => $filename, 'name' => $filename]);
-      $file->save();
-    }
-    $default_images = [];
-    foreach (['field_storage', 'field', 'field2', 'field_storage_new', 'field_new', 'field_storage_private', 'field_private'] as $image_target) {
-      $file = File::create((array) array_pop($files));
-      $file->save();
-      $default_images[$image_target] = $file;
-    }
-
-    // Create an image field storage and add a field to the article content
-    // type.
-    $field_name = strtolower($this->randomMachineName());
-    $storage_settings['default_image'] = [
-      'uuid' => $default_images['field_storage']->uuid(),
-      'alt' => '',
-      'title' => '',
-      'width' => 0,
-      'height' => 0,
-    ];
-    $field_settings['default_image'] = [
-      'uuid' => $default_images['field']->uuid(),
-      'alt' => '',
-      'title' => '',
-      'width' => 0,
-      'height' => 0,
-    ];
-    $widget_settings = [
-      'preview_image_style' => 'medium',
-    ];
-    $field = $this->createImageField($field_name, 'article', $storage_settings, $field_settings, $widget_settings);
-
-    // The field default image id should be 2.
-    $this->assertEqual($field->getSetting('default_image')['uuid'], $default_images['field']->uuid());
-
-    // Also test \Drupal\field\Entity\FieldConfig::getSettings().
-    $this->assertEqual($field->getSettings()['default_image']['uuid'], $default_images['field']->uuid());
-
-    $field_storage = $field->getFieldStorageDefinition();
-
-    // The field storage default image id should be 1.
-    $this->assertEqual($field_storage->getSetting('default_image')['uuid'], $default_images['field_storage']->uuid());
-
-    // Also test \Drupal\field\Entity\FieldStorageConfig::getSettings().
-    $this->assertEqual($field_storage->getSettings()['default_image']['uuid'], $default_images['field_storage']->uuid());
-
-    // Add another field with another default image to the page content type.
-    $field2 = FieldConfig::create([
-      'field_storage' => $field_storage,
-      'bundle' => 'page',
-      'label' => $field->label(),
-      'required' => $field->isRequired(),
-      'settings' => [
-        'default_image' => [
-          'uuid' => $default_images['field2']->uuid(),
-          'alt' => '',
-          'title' => '',
-          'width' => 0,
-          'height' => 0,
-        ],
-      ],
-    ]);
-    $field2->save();
-
-    $widget_settings = entity_get_form_display('node', $field->getTargetBundle(), 'default')->getComponent($field_name);
-    entity_get_form_display('node', 'page', 'default')
-      ->setComponent($field_name, $widget_settings)
-      ->save();
-    entity_get_display('node', 'page', 'default')
-      ->setComponent($field_name)
-      ->save();
-
-    // Confirm the defaults are present on the article field storage settings
-    // form.
-    $field_id = $field->id();
-    $this->drupalGet("admin/structure/types/manage/article/fields/$field_id/storage");
-    $this->assertFieldByXpath(
-      '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field_storage']->id(),
-      format_string(
-        'Article image field storage default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field_storage']->id()]
-      )
-    );
-    // Confirm the defaults are present on the article field edit form.
-    $this->drupalGet("admin/structure/types/manage/article/fields/$field_id");
-    $this->assertFieldByXpath(
-      '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field']->id(),
-      format_string(
-        'Article image field default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field']->id()]
-      )
-    );
-
-    // Confirm the defaults are present on the page field storage settings form.
-    $this->drupalGet("admin/structure/types/manage/page/fields/$field_id/storage");
-    $this->assertFieldByXpath(
-      '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field_storage']->id(),
-      format_string(
-        'Page image field storage default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field_storage']->id()]
-      )
-    );
-    // Confirm the defaults are present on the page field edit form.
-    $field2_id = $field2->id();
-    $this->drupalGet("admin/structure/types/manage/page/fields/$field2_id");
-    $this->assertFieldByXpath(
-      '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field2']->id(),
-      format_string(
-        'Page image field default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field2']->id()]
-      )
-    );
-
-    // Confirm that the image default is shown for a new article node.
-    $article = $this->drupalCreateNode(['type' => 'article']);
-    $article_built = $this->drupalBuildEntityView($article);
-    $this->assertEqual(
-      $article_built[$field_name][0]['#item']->target_id,
-      $default_images['field']->id(),
-      format_string(
-        'A new article node without an image has the expected default image file ID of @fid.',
-        ['@fid' => $default_images['field']->id()]
-      )
-    );
-
-    // Also check that the field renders without warnings when the label is
-    // hidden.
-    EntityViewDisplay::load('node.article.default')
-      ->setComponent($field_name, ['label' => 'hidden', 'type' => 'image'])
-      ->save();
-    $this->drupalGet('node/' . $article->id());
-
-    // Confirm that the image default is shown for a new page node.
-    $page = $this->drupalCreateNode(['type' => 'page']);
-    $page_built = $this->drupalBuildEntityView($page);
-    $this->assertEqual(
-      $page_built[$field_name][0]['#item']->target_id,
-      $default_images['field2']->id(),
-      format_string(
-        'A new page node without an image has the expected default image file ID of @fid.',
-        ['@fid' => $default_images['field2']->id()]
-      )
-    );
-
-    // Upload a new default for the field storage.
-    $default_image_settings = $field_storage->getSetting('default_image');
-    $default_image_settings['uuid'] = $default_images['field_storage_new']->uuid();
-    $field_storage->setSetting('default_image', $default_image_settings);
-    $field_storage->save();
-
-    // Confirm that the new default is used on the article field storage
-    // settings form.
-    $this->drupalGet("admin/structure/types/manage/article/fields/$field_id/storage");
-    $this->assertFieldByXpath(
-      '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field_storage_new']->id(),
-      format_string(
-        'Updated image field storage default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field_storage_new']->id()]
-      )
-    );
-
-    // Reload the nodes and confirm the field defaults are used.
-    $node_storage->resetCache([$article->id(), $page->id()]);
-    $article_built = $this->drupalBuildEntityView($article = $node_storage->load($article->id()));
-    $page_built = $this->drupalBuildEntityView($page = $node_storage->load($page->id()));
-    $this->assertEqual(
-      $article_built[$field_name][0]['#item']->target_id,
-      $default_images['field']->id(),
-      format_string(
-        'An existing article node without an image has the expected default image file ID of @fid.',
-        ['@fid' => $default_images['field']->id()]
-      )
-    );
-    $this->assertEqual(
-      $page_built[$field_name][0]['#item']->target_id,
-      $default_images['field2']->id(),
-      format_string(
-        'An existing page node without an image has the expected default image file ID of @fid.',
-        ['@fid' => $default_images['field2']->id()]
-      )
-    );
-
-    // Upload a new default for the article's field.
-    $default_image_settings = $field->getSetting('default_image');
-    $default_image_settings['uuid'] = $default_images['field_new']->uuid();
-    $field->setSetting('default_image', $default_image_settings);
-    $field->save();
-
-    // Confirm the new field default is used on the article field admin form.
-    $this->drupalGet("admin/structure/types/manage/article/fields/$field_id");
-    $this->assertFieldByXpath(
-      '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field_new']->id(),
-      format_string(
-        'Updated article image field default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field_new']->id()]
-      )
-    );
-
-    // Reload the nodes.
-    $node_storage->resetCache([$article->id(), $page->id()]);
-    $article_built = $this->drupalBuildEntityView($article = $node_storage->load($article->id()));
-    $page_built = $this->drupalBuildEntityView($page = $node_storage->load($page->id()));
-
-    // Confirm the article uses the new default.
-    $this->assertEqual(
-      $article_built[$field_name][0]['#item']->target_id,
-      $default_images['field_new']->id(),
-      format_string(
-        'An existing article node without an image has the expected default image file ID of @fid.',
-        ['@fid' => $default_images['field_new']->id()]
-      )
-    );
-    // Confirm the page remains unchanged.
-    $this->assertEqual(
-      $page_built[$field_name][0]['#item']->target_id,
-      $default_images['field2']->id(),
-      format_string(
-        'An existing page node without an image has the expected default image file ID of @fid.',
-        ['@fid' => $default_images['field2']->id()]
-      )
-    );
-
-    // Confirm the default image is shown on the node form.
-    $file = File::load($default_images['field_new']->id());
-    $this->drupalGet('node/add/article');
-    $this->assertRaw($file->getFilename());
-
-    // Remove the field default from articles.
-    $default_image_settings = $field->getSetting('default_image');
-    $default_image_settings['uuid'] = 0;
-    $field->setSetting('default_image', $default_image_settings);
-    $field->save();
-
-    // Confirm the article field default has been removed.
-    $this->drupalGet("admin/structure/types/manage/article/fields/$field_id");
-    $this->assertFieldByXpath(
-      '//input[@name="settings[default_image][uuid][fids]"]',
-      '',
-      'Updated article image field default has been successfully removed.'
-    );
-
-    // Reload the nodes.
-    $node_storage->resetCache([$article->id(), $page->id()]);
-    $article_built = $this->drupalBuildEntityView($article = $node_storage->load($article->id()));
-    $page_built = $this->drupalBuildEntityView($page = $node_storage->load($page->id()));
-    // Confirm the article uses the new field storage (not field) default.
-    $this->assertEqual(
-      $article_built[$field_name][0]['#item']->target_id,
-      $default_images['field_storage_new']->id(),
-      format_string(
-        'An existing article node without an image has the expected default image file ID of @fid.',
-        ['@fid' => $default_images['field_storage_new']->id()]
-      )
-    );
-    // Confirm the page remains unchanged.
-    $this->assertEqual(
-      $page_built[$field_name][0]['#item']->target_id,
-      $default_images['field2']->id(),
-      format_string(
-        'An existing page node without an image has the expected default image file ID of @fid.',
-        ['@fid' => $default_images['field2']->id()]
-      )
-    );
-
-    $non_image = $this->drupalGetTestFiles('text');
-    $this->drupalPostForm(NULL, ['files[settings_default_image_uuid]' => drupal_realpath($non_image[0]->uri)], t("Upload"));
-    $this->assertText('The specified file text-0.txt could not be uploaded.');
-    $this->assertText('Only files with the following extensions are allowed: png gif jpg jpeg.');
-
-    // Confirm the default image is shown on the node form.
-    $file = File::load($default_images['field_storage_new']->id());
-    $this->drupalGet('node/add/article');
-    $this->assertRaw($file->getFilename());
-
-    // Change the default image for the field storage and also change the upload
-    // destination to the private filesystem at the same time.
-    $default_image_settings = $field_storage->getSetting('default_image');
-    $default_image_settings['uuid'] = $default_images['field_storage_private']->uuid();
-    $field_storage->setSetting('default_image', $default_image_settings);
-    $field_storage->setSetting('uri_scheme', 'private');
-    $field_storage->save();
-
-    // Confirm that the new default is used on the article field storage
-    // settings form.
-    $this->drupalGet("admin/structure/types/manage/article/fields/$field_id/storage");
-    $this->assertFieldByXpath(
-      '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field_storage_private']->id(),
-      format_string(
-        'Updated image field storage default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field_storage_private']->id()]
-      )
-    );
-
-    // Upload a new default for the article's field after setting the field
-    // storage upload destination to 'private'.
-    $default_image_settings = $field->getSetting('default_image');
-    $default_image_settings['uuid'] = $default_images['field_private']->uuid();
-    $field->setSetting('default_image', $default_image_settings);
-    $field->save();
-
-    // Confirm the new field field default is used on the article field
-    // admin form.
-    $this->drupalGet("admin/structure/types/manage/article/fields/$field_id");
-    $this->assertFieldByXpath(
-      '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field_private']->id(),
-      format_string(
-        'Updated article image field default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field_private']->id()]
-      )
-    );
-  }
-
-  /**
-   * Tests image field and field storage having an invalid default image.
-   */
-  public function testInvalidDefaultImage() {
-    $field_storage = FieldStorageConfig::create([
-      'field_name' => Unicode::strtolower($this->randomMachineName()),
-      'entity_type' => 'node',
-      'type' => 'image',
-      'settings' => [
-        'default_image' => [
-          'uuid' => 100000,
-        ]
-      ],
-    ]);
-    $field_storage->save();
-    $settings = $field_storage->getSettings();
-    // The non-existent default image should not be saved.
-    $this->assertNull($settings['default_image']['uuid']);
-
-    $field = FieldConfig::create([
-      'field_storage' => $field_storage,
-      'bundle' => 'page',
-      'label' => $this->randomMachineName(),
-      'settings' => [
-        'default_image' => [
-          'uuid' => 100000,
-        ]
-      ],
-    ]);
-    $field->save();
-    $settings = $field->getSettings();
-    // The non-existent default image should not be saved.
-    $this->assertNull($settings['default_image']['uuid']);
-  }
-
-}
diff --git a/core/modules/image/src/Tests/ImageFieldDisplayTest.php b/core/modules/image/src/Tests/ImageFieldDisplayTest.php
deleted file mode 100644
index 8061526da2..0000000000
--- a/core/modules/image/src/Tests/ImageFieldDisplayTest.php
+++ /dev/null
@@ -1,461 +0,0 @@
-<?php
-
-namespace Drupal\image\Tests;
-
-use Drupal\Core\Field\FieldStorageDefinitionInterface;
-use Drupal\field\Entity\FieldStorageConfig;
-use Drupal\user\RoleInterface;
-use Drupal\image\Entity\ImageStyle;
-
-/**
- * Tests the display of image fields.
- *
- * @group image
- */
-class ImageFieldDisplayTest extends ImageFieldTestBase {
-
-  protected $dumpHeaders = TRUE;
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['field_ui'];
-
-  /**
-   * Test image formatters on node display for public files.
-   */
-  public function testImageFieldFormattersPublic() {
-    $this->_testImageFieldFormatters('public');
-  }
-
-  /**
-   * Test image formatters on node display for private files.
-   */
-  public function testImageFieldFormattersPrivate() {
-    // Remove access content permission from anonymous users.
-    user_role_change_permissions(RoleInterface::ANONYMOUS_ID, ['access content' => FALSE]);
-    $this->_testImageFieldFormatters('private');
-  }
-
-  /**
-   * Test image formatters on node display.
-   */
-  public function _testImageFieldFormatters($scheme) {
-    /** @var \Drupal\Core\Render\RendererInterface $renderer */
-    $renderer = $this->container->get('renderer');
-    $node_storage = $this->container->get('entity.manager')->getStorage('node');
-    $field_name = strtolower($this->randomMachineName());
-    $field_settings = ['alt_field_required' => 0];
-    $instance = $this->createImageField($field_name, 'article', ['uri_scheme' => $scheme], $field_settings);
-
-    // Go to manage display page.
-    $this->drupalGet("admin/structure/types/manage/article/display");
-
-    // Test for existence of link to image styles configuration.
-    $this->drupalPostAjaxForm(NULL, [], "{$field_name}_settings_edit");
-    $this->assertLinkByHref(\Drupal::url('entity.image_style.collection'), 0, 'Link to image styles configuration is found');
-
-    // Remove 'administer image styles' permission from testing admin user.
-    $admin_user_roles = $this->adminUser->getRoles(TRUE);
-    user_role_change_permissions(reset($admin_user_roles), ['administer image styles' => FALSE]);
-
-    // Go to manage display page again.
-    $this->drupalGet("admin/structure/types/manage/article/display");
-
-    // Test for absence of link to image styles configuration.
-    $this->drupalPostAjaxForm(NULL, [], "{$field_name}_settings_edit");
-    $this->assertNoLinkByHref(\Drupal::url('entity.image_style.collection'), 'Link to image styles configuration is absent when permissions are insufficient');
-
-    // Restore 'administer image styles' permission to testing admin user
-    user_role_change_permissions(reset($admin_user_roles), ['administer image styles' => TRUE]);
-
-    // Create a new node with an image attached.
-    $test_image = current($this->drupalGetTestFiles('image'));
-
-    // Ensure that preview works.
-    $this->previewNodeImage($test_image, $field_name, 'article');
-
-    // After previewing, make the alt field required. It cannot be required
-    // during preview because the form validation will fail.
-    $instance->setSetting('alt_field_required', 1);
-    $instance->save();
-
-    // Create alt text for the image.
-    $alt = $this->randomMachineName();
-
-    // Save node.
-    $nid = $this->uploadNodeImage($test_image, $field_name, 'article', $alt);
-    $node_storage->resetCache([$nid]);
-    $node = $node_storage->load($nid);
-
-    // Test that the default formatter is being used.
-    $file = $node->{$field_name}->entity;
-    $image_uri = $file->getFileUri();
-    $image = [
-      '#theme' => 'image',
-      '#uri' => $image_uri,
-      '#width' => 40,
-      '#height' => 20,
-      '#alt' => $alt,
-    ];
-    $default_output = str_replace("\n", NULL, $renderer->renderRoot($image));
-    $this->assertRaw($default_output, 'Default formatter displaying correctly on full node view.');
-
-    // Test the image linked to file formatter.
-    $display_options = [
-      'type' => 'image',
-      'settings' => ['image_link' => 'file'],
-    ];
-    $display = entity_get_display('node', $node->getType(), 'default');
-    $display->setComponent($field_name, $display_options)
-      ->save();
-
-    $image = [
-      '#theme' => 'image',
-      '#uri' => $image_uri,
-      '#width' => 40,
-      '#height' => 20,
-      '#alt' => $alt,
-    ];
-    $default_output = '<a href="' . file_create_url($image_uri) . '">' . $renderer->renderRoot($image) . '</a>';
-    $this->drupalGet('node/' . $nid);
-    $this->assertCacheTag($file->getCacheTags()[0]);
-    // @todo Remove in https://www.drupal.org/node/2646744.
-    $this->assertCacheContext('url.site');
-    $cache_tags_header = $this->drupalGetHeader('X-Drupal-Cache-Tags');
-    $this->assertTrue(!preg_match('/ image_style\:/', $cache_tags_header), 'No image style cache tag found.');
-    $this->assertRaw($default_output, 'Image linked to file formatter displaying correctly on full node view.');
-    // Verify that the image can be downloaded.
-    $this->assertEqual(file_get_contents($test_image->uri), $this->drupalGet(file_create_url($image_uri)), 'File was downloaded successfully.');
-    if ($scheme == 'private') {
-      // Only verify HTTP headers when using private scheme and the headers are
-      // sent by Drupal.
-      $this->assertEqual($this->drupalGetHeader('Content-Type'), 'image/png', 'Content-Type header was sent.');
-      $this->assertTrue(strstr($this->drupalGetHeader('Cache-Control'), 'private') !== FALSE, 'Cache-Control header was sent.');
-
-      // Log out and try to access the file.
-      $this->drupalLogout();
-      $this->drupalGet(file_create_url($image_uri));
-      $this->assertResponse('403', 'Access denied to original image as anonymous user.');
-
-      // Log in again.
-      $this->drupalLogin($this->adminUser);
-    }
-
-    // Test the image linked to content formatter.
-    $display_options['settings']['image_link'] = 'content';
-    $display->setComponent($field_name, $display_options)
-      ->save();
-    $image = [
-      '#theme' => 'image',
-      '#uri' => $image_uri,
-      '#width' => 40,
-      '#height' => 20,
-    ];
-    $this->drupalGet('node/' . $nid);
-    $this->assertCacheTag($file->getCacheTags()[0]);
-    $cache_tags_header = $this->drupalGetHeader('X-Drupal-Cache-Tags');
-    $this->assertTrue(!preg_match('/ image_style\:/', $cache_tags_header), 'No image style cache tag found.');
-    $elements = $this->xpath(
-      '//a[@href=:path]/img[@src=:url and @alt=:alt and @width=:width and @height=:height]',
-      [
-        ':path' => $node->url(),
-        ':url' => file_url_transform_relative(file_create_url($image['#uri'])),
-        ':width' => $image['#width'],
-        ':height' => $image['#height'],
-        ':alt' => $alt,
-      ]
-    );
-    $this->assertEqual(count($elements), 1, 'Image linked to content formatter displaying correctly on full node view.');
-
-    // Test the image style 'thumbnail' formatter.
-    $display_options['settings']['image_link'] = '';
-    $display_options['settings']['image_style'] = 'thumbnail';
-    $display->setComponent($field_name, $display_options)
-      ->save();
-
-    // Ensure the derivative image is generated so we do not have to deal with
-    // image style callback paths.
-    $this->drupalGet(ImageStyle::load('thumbnail')->buildUrl($image_uri));
-    $image_style = [
-      '#theme' => 'image_style',
-      '#uri' => $image_uri,
-      '#width' => 40,
-      '#height' => 20,
-      '#style_name' => 'thumbnail',
-      '#alt' => $alt,
-    ];
-    $default_output = $renderer->renderRoot($image_style);
-    $this->drupalGet('node/' . $nid);
-    $image_style = ImageStyle::load('thumbnail');
-    $this->assertCacheTag($image_style->getCacheTags()[0]);
-    $this->assertRaw($default_output, 'Image style thumbnail formatter displaying correctly on full node view.');
-
-    if ($scheme == 'private') {
-      // Log out and try to access the file.
-      $this->drupalLogout();
-      $this->drupalGet(ImageStyle::load('thumbnail')->buildUrl($image_uri));
-      $this->assertResponse('403', 'Access denied to image style thumbnail as anonymous user.');
-    }
-
-    // Test the image URL formatter without an image style.
-    $display_options = [
-      'type' => 'image_url',
-      'settings' => ['image_style' => ''],
-    ];
-    $expected_url = file_url_transform_relative(file_create_url($image_uri));
-    $this->assertEqual($expected_url, $node->{$field_name}->view($display_options)[0]['#markup']);
-
-    // Test the image URL formatter with an image style.
-    $display_options['settings']['image_style'] = 'thumbnail';
-    $expected_url = file_url_transform_relative(ImageStyle::load('thumbnail')->buildUrl($image_uri));
-    $this->assertEqual($expected_url, $node->{$field_name}->view($display_options)[0]['#markup']);
-  }
-
-  /**
-   * Tests for image field settings.
-   */
-  public function testImageFieldSettings() {
-    /** @var \Drupal\Core\Render\RendererInterface $renderer */
-    $renderer = $this->container->get('renderer');
-    $node_storage = $this->container->get('entity.manager')->getStorage('node');
-    $test_image = current($this->drupalGetTestFiles('image'));
-    list(, $test_image_extension) = explode('.', $test_image->filename);
-    $field_name = strtolower($this->randomMachineName());
-    $field_settings = [
-      'alt_field' => 1,
-      'file_extensions' => $test_image_extension,
-      'max_filesize' => '50 KB',
-      'max_resolution' => '100x100',
-      'min_resolution' => '10x10',
-      'title_field' => 1,
-    ];
-    $widget_settings = [
-      'preview_image_style' => 'medium',
-    ];
-    $field = $this->createImageField($field_name, 'article', [], $field_settings, $widget_settings);
-
-    // Verify that the min/max resolution set on the field are properly
-    // extracted, and displayed, on the image field's configuration form.
-    $this->drupalGet('admin/structure/types/manage/article/fields/' . $field->id());
-    $this->assertFieldByName('settings[max_resolution][x]', '100', 'Expected max resolution X value of 100.');
-    $this->assertFieldByName('settings[max_resolution][y]', '100', 'Expected max resolution Y value of 100.');
-    $this->assertFieldByName('settings[min_resolution][x]', '10', 'Expected min resolution X value of 10.');
-    $this->assertFieldByName('settings[min_resolution][y]', '10', 'Expected min resolution Y value of 10.');
-
-    $this->drupalGet('node/add/article');
-    $this->assertText(t('50 KB limit.'), 'Image widget max file size is displayed on article form.');
-    $this->assertText(t('Allowed types: @extensions.', ['@extensions' => $test_image_extension]), 'Image widget allowed file types displayed on article form.');
-    $this->assertText(t('Images must be larger than 10x10 pixels. Images larger than 100x100 pixels will be resized.'), 'Image widget allowed resolution displayed on article form.');
-
-    // We have to create the article first and then edit it because the alt
-    // and title fields do not display until the image has been attached.
-
-    // Create alt text for the image.
-    $alt = $this->randomMachineName();
-
-    $nid = $this->uploadNodeImage($test_image, $field_name, 'article', $alt);
-    $this->drupalGet('node/' . $nid . '/edit');
-    $this->assertFieldByName($field_name . '[0][alt]', '', 'Alt field displayed on article form.');
-    $this->assertFieldByName($field_name . '[0][title]', '', 'Title field displayed on article form.');
-    // Verify that the attached image is being previewed using the 'medium'
-    // style.
-    $node_storage->resetCache([$nid]);
-    $node = $node_storage->load($nid);
-    $file = $node->{$field_name}->entity;
-
-    $url = file_url_transform_relative(file_create_url(ImageStyle::load('medium')->buildUrl($file->getFileUri())));
-    $this->assertTrue($this->cssSelect('img[width=40][height=20][class=image-style-medium][src="' . $url . '"]'));
-
-    // Add alt/title fields to the image and verify that they are displayed.
-    $image = [
-      '#theme' => 'image',
-      '#uri' => $file->getFileUri(),
-      '#alt' => $alt,
-      '#title' => $this->randomMachineName(),
-      '#width' => 40,
-      '#height' => 20,
-    ];
-    $edit = [
-      $field_name . '[0][alt]' => $image['#alt'],
-      $field_name . '[0][title]' => $image['#title'],
-    ];
-    $this->drupalPostForm('node/' . $nid . '/edit', $edit, t('Save'));
-    $default_output = str_replace("\n", NULL, $renderer->renderRoot($image));
-    $this->assertRaw($default_output, 'Image displayed using user supplied alt and title attributes.');
-
-    // Verify that alt/title longer than allowed results in a validation error.
-    $test_size = 2000;
-    $edit = [
-      $field_name . '[0][alt]' => $this->randomMachineName($test_size),
-      $field_name . '[0][title]' => $this->randomMachineName($test_size),
-    ];
-    $this->drupalPostForm('node/' . $nid . '/edit', $edit, t('Save'));
-    $schema = $field->getFieldStorageDefinition()->getSchema();
-    $this->assertRaw(t('Alternative text cannot be longer than %max characters but is currently %length characters long.', [
-      '%max' => $schema['columns']['alt']['length'],
-      '%length' => $test_size,
-    ]));
-    $this->assertRaw(t('Title cannot be longer than %max characters but is currently %length characters long.', [
-      '%max' => $schema['columns']['title']['length'],
-      '%length' => $test_size,
-    ]));
-
-    // Set cardinality to unlimited and add upload a second image.
-    // The image widget is extending on the file widget, but the image field
-    // type does not have the 'display_field' setting which is expected by
-    // the file widget. This resulted in notices before when cardinality is not
-    // 1, so we need to make sure the file widget prevents these notices by
-    // providing all settings, even if they are not used.
-    // @see FileWidget::formMultipleElements().
-    $this->drupalPostForm('admin/structure/types/manage/article/fields/node.article.' . $field_name . '/storage', ['cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED], t('Save field settings'));
-    $edit = [
-      'files[' . $field_name . '_1][]' => drupal_realpath($test_image->uri),
-    ];
-    $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save'));
-    // Add the required alt text.
-    $this->drupalPostForm(NULL, [$field_name . '[1][alt]' => $alt], t('Save'));
-    $this->assertText(format_string('Article @title has been updated.', ['@title' => $node->getTitle()]));
-
-    // Assert ImageWidget::process() calls FieldWidget::process().
-    $this->drupalGet('node/' . $node->id() . '/edit');
-    $edit = [
-      'files[' . $field_name . '_2][]' => drupal_realpath($test_image->uri),
-    ];
-    $this->drupalPostAjaxForm(NULL, $edit, $field_name . '_2_upload_button');
-    $this->assertNoRaw('<input multiple type="file" id="edit-' . strtr($field_name, '_', '-') . '-2-upload" name="files[' . $field_name . '_2][]" size="22" class="js-form-file form-file">');
-    $this->assertRaw('<input multiple type="file" id="edit-' . strtr($field_name, '_', '-') . '-3-upload" name="files[' . $field_name . '_3][]" size="22" class="js-form-file form-file">');
-  }
-
-  /**
-   * Test use of a default image with an image field.
-   */
-  public function testImageFieldDefaultImage() {
-    /** @var \Drupal\Core\Render\RendererInterface $renderer */
-    $renderer = $this->container->get('renderer');
-
-    $node_storage = $this->container->get('entity.manager')->getStorage('node');
-    // Create a new image field.
-    $field_name = strtolower($this->randomMachineName());
-    $this->createImageField($field_name, 'article');
-
-    // Create a new node, with no images and verify that no images are
-    // displayed.
-    $node = $this->drupalCreateNode(['type' => 'article']);
-    $this->drupalGet('node/' . $node->id());
-    // Verify that no image is displayed on the page by checking for the class
-    // that would be used on the image field.
-    $this->assertNoPattern('<div class="(.*?)field--name-' . strtr($field_name, '_', '-') . '(.*?)">', 'No image displayed when no image is attached and no default image specified.');
-    $cache_tags_header = $this->drupalGetHeader('X-Drupal-Cache-Tags');
-    $this->assertTrue(!preg_match('/ image_style\:/', $cache_tags_header), 'No image style cache tag found.');
-
-    // Add a default image to the public image field.
-    $images = $this->drupalGetTestFiles('image');
-    $alt = $this->randomString(512);
-    $title = $this->randomString(1024);
-    $edit = [
-      // Get the path of the 'image-test.png' file.
-      'files[settings_default_image_uuid]' => drupal_realpath($images[0]->uri),
-      'settings[default_image][alt]' => $alt,
-      'settings[default_image][title]' => $title,
-    ];
-    $this->drupalPostForm("admin/structure/types/manage/article/fields/node.article.$field_name/storage", $edit, t('Save field settings'));
-    // Clear field definition cache so the new default image is detected.
-    \Drupal::entityManager()->clearCachedFieldDefinitions();
-    $field_storage = FieldStorageConfig::loadByName('node', $field_name);
-    $default_image = $field_storage->getSetting('default_image');
-    $file = \Drupal::entityManager()->loadEntityByUuid('file', $default_image['uuid']);
-    $this->assertTrue($file->isPermanent(), 'The default image status is permanent.');
-    $image = [
-      '#theme' => 'image',
-      '#uri' => $file->getFileUri(),
-      '#alt' => $alt,
-      '#title' => $title,
-      '#width' => 40,
-      '#height' => 20,
-    ];
-    $default_output = str_replace("\n", NULL, $renderer->renderRoot($image));
-    $this->drupalGet('node/' . $node->id());
-    $this->assertCacheTag($file->getCacheTags()[0]);
-    $cache_tags_header = $this->drupalGetHeader('X-Drupal-Cache-Tags');
-    $this->assertTrue(!preg_match('/ image_style\:/', $cache_tags_header), 'No image style cache tag found.');
-    $this->assertRaw($default_output, 'Default image displayed when no user supplied image is present.');
-
-    // Create a node with an image attached and ensure that the default image
-    // is not displayed.
-
-    // Create alt text for the image.
-    $alt = $this->randomMachineName();
-
-    // Upload the 'image-test.gif' file.
-    $nid = $this->uploadNodeImage($images[2], $field_name, 'article', $alt);
-    $node_storage->resetCache([$nid]);
-    $node = $node_storage->load($nid);
-    $file = $node->{$field_name}->entity;
-    $image = [
-      '#theme' => 'image',
-      '#uri' => $file->getFileUri(),
-      '#width' => 40,
-      '#height' => 20,
-      '#alt' => $alt,
-    ];
-    $image_output = str_replace("\n", NULL, $renderer->renderRoot($image));
-    $this->drupalGet('node/' . $nid);
-    $this->assertCacheTag($file->getCacheTags()[0]);
-    $cache_tags_header = $this->drupalGetHeader('X-Drupal-Cache-Tags');
-    $this->assertTrue(!preg_match('/ image_style\:/', $cache_tags_header), 'No image style cache tag found.');
-    $this->assertNoRaw($default_output, 'Default image is not displayed when user supplied image is present.');
-    $this->assertRaw($image_output, 'User supplied image is displayed.');
-
-    // Remove default image from the field and make sure it is no longer used.
-    $edit = [
-      'settings[default_image][uuid][fids]' => 0,
-    ];
-    $this->drupalPostForm("admin/structure/types/manage/article/fields/node.article.$field_name/storage", $edit, t('Save field settings'));
-    // Clear field definition cache so the new default image is detected.
-    \Drupal::entityManager()->clearCachedFieldDefinitions();
-    $field_storage = FieldStorageConfig::loadByName('node', $field_name);
-    $default_image = $field_storage->getSetting('default_image');
-    $this->assertFalse($default_image['uuid'], 'Default image removed from field.');
-    // Create an image field that uses the private:// scheme and test that the
-    // default image works as expected.
-    $private_field_name = strtolower($this->randomMachineName());
-    $this->createImageField($private_field_name, 'article', ['uri_scheme' => 'private']);
-    // Add a default image to the new field.
-    $edit = [
-      // Get the path of the 'image-test.gif' file.
-      'files[settings_default_image_uuid]' => drupal_realpath($images[2]->uri),
-      'settings[default_image][alt]' => $alt,
-      'settings[default_image][title]' => $title,
-    ];
-    $this->drupalPostForm('admin/structure/types/manage/article/fields/node.article.' . $private_field_name . '/storage', $edit, t('Save field settings'));
-    // Clear field definition cache so the new default image is detected.
-    \Drupal::entityManager()->clearCachedFieldDefinitions();
-
-    $private_field_storage = FieldStorageConfig::loadByName('node', $private_field_name);
-    $default_image = $private_field_storage->getSetting('default_image');
-    $file = \Drupal::entityManager()->loadEntityByUuid('file', $default_image['uuid']);
-    $this->assertEqual('private', file_uri_scheme($file->getFileUri()), 'Default image uses private:// scheme.');
-    $this->assertTrue($file->isPermanent(), 'The default image status is permanent.');
-    // Create a new node with no image attached and ensure that default private
-    // image is displayed.
-    $node = $this->drupalCreateNode(['type' => 'article']);
-    $image = [
-      '#theme' => 'image',
-      '#uri' => $file->getFileUri(),
-      '#alt' => $alt,
-      '#title' => $title,
-      '#width' => 40,
-      '#height' => 20,
-    ];
-    $default_output = str_replace("\n", NULL, $renderer->renderRoot($image));
-    $this->drupalGet('node/' . $node->id());
-    $this->assertCacheTag($file->getCacheTags()[0]);
-    $cache_tags_header = $this->drupalGetHeader('X-Drupal-Cache-Tags');
-    $this->assertTrue(!preg_match('/ image_style\:/', $cache_tags_header), 'No image style cache tag found.');
-    $this->assertRaw($default_output, 'Default private image displayed when no user supplied image is present.');
-  }
-
-}
diff --git a/core/modules/image/src/Tests/ImageFieldTestBase.php b/core/modules/image/src/Tests/ImageFieldTestBase.php
index c023917e36..6ac64b81ec 100644
--- a/core/modules/image/src/Tests/ImageFieldTestBase.php
+++ b/core/modules/image/src/Tests/ImageFieldTestBase.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\image\Tests;
 
+@trigger_error('The ' . __NAMESPACE__ . '\ImageFieldTestBase is deprecated in Drupal 8.4.x and will be removed before Drupal 9.0.0. Use \Drupal\Tests\image\Functional\ImageFieldTestBase instead. See https://www.drupal.org/node/2863626.', E_USER_DEPRECATED);
+
 use Drupal\Tests\image\Kernel\ImageFieldCreationTrait;
 use Drupal\simpletest\WebTestBase;
 
diff --git a/core/modules/image/src/Tests/ImageFieldValidateTest.php b/core/modules/image/src/Tests/ImageFieldValidateTest.php
deleted file mode 100644
index e429d0bb20..0000000000
--- a/core/modules/image/src/Tests/ImageFieldValidateTest.php
+++ /dev/null
@@ -1,159 +0,0 @@
-<?php
-
-namespace Drupal\image\Tests;
-
-/**
- * Tests validation functions such as min/max resolution.
- *
- * @group image
- */
-class ImageFieldValidateTest extends ImageFieldTestBase {
-  /**
-   * Test min/max resolution settings.
-   */
-  public function testResolution() {
-    $field_names = [
-      0 => strtolower($this->randomMachineName()),
-      1 => strtolower($this->randomMachineName()),
-      2 => strtolower($this->randomMachineName()),
-    ];
-    $min_resolution = [
-      'width' => 50,
-      'height' => 50
-    ];
-    $max_resolution = [
-      'width' => 100,
-      'height' => 100
-    ];
-    $no_height_min_resolution = [
-      'width' => 50,
-      'height' => NULL
-    ];
-    $no_height_max_resolution = [
-      'width' => 100,
-      'height' => NULL
-    ];
-    $no_width_min_resolution = [
-      'width' => NULL,
-      'height' => 50
-    ];
-    $no_width_max_resolution = [
-      'width' => NULL,
-      'height' => 100
-    ];
-    $field_settings = [
-      0 => $this->getFieldSettings($min_resolution, $max_resolution),
-      1 => $this->getFieldSettings($no_height_min_resolution, $no_height_max_resolution),
-      2 => $this->getFieldSettings($no_width_min_resolution, $no_width_max_resolution),
-    ];
-    $this->createImageField($field_names[0], 'article', [], $field_settings[0]);
-    $this->createImageField($field_names[1], 'article', [], $field_settings[1]);
-    $this->createImageField($field_names[2], 'article', [], $field_settings[2]);
-
-    // We want a test image that is too small, and a test image that is too
-    // big, so cycle through test image files until we have what we need.
-    $image_that_is_too_big = FALSE;
-    $image_that_is_too_small = FALSE;
-    $image_factory = $this->container->get('image.factory');
-    foreach ($this->drupalGetTestFiles('image') as $image) {
-      $image_file = $image_factory->get($image->uri);
-      if ($image_file->getWidth() > $max_resolution['width']) {
-        $image_that_is_too_big = $image;
-      }
-      if ($image_file->getWidth() < $min_resolution['width']) {
-        $image_that_is_too_small = $image;
-      }
-      if ($image_that_is_too_small && $image_that_is_too_big) {
-        break;
-      }
-    }
-    $this->uploadNodeImage($image_that_is_too_small, $field_names[0], 'article');
-    $this->assertRaw(t('The specified file %name could not be uploaded.', ['%name' => $image_that_is_too_small->filename]));
-    $this->assertRaw(t('The image is too small; the minimum dimensions are %dimensions pixels.', ['%dimensions' => '50x50']));
-    $this->uploadNodeImage($image_that_is_too_big, $field_names[0], 'article');
-    $this->assertText(t('The image was resized to fit within the maximum allowed dimensions of 100x100 pixels.'));
-    $this->uploadNodeImage($image_that_is_too_small, $field_names[1], 'article');
-    $this->assertRaw(t('The specified file %name could not be uploaded.', ['%name' => $image_that_is_too_small->filename]));
-    $this->uploadNodeImage($image_that_is_too_big, $field_names[1], 'article');
-    $this->assertText(t('The image was resized to fit within the maximum allowed width of 100 pixels.'));
-    $this->uploadNodeImage($image_that_is_too_small, $field_names[2], 'article');
-    $this->assertRaw(t('The specified file %name could not be uploaded.', ['%name' => $image_that_is_too_small->filename]));
-    $this->uploadNodeImage($image_that_is_too_big, $field_names[2], 'article');
-    $this->assertText(t('The image was resized to fit within the maximum allowed height of 100 pixels.'));
-  }
-
-  /**
-   * Test that required alt/title fields gets validated right.
-   */
-  public function testRequiredAttributes() {
-    $field_name = strtolower($this->randomMachineName());
-    $field_settings = [
-      'alt_field' => 1,
-      'alt_field_required' => 1,
-      'title_field' => 1,
-      'title_field_required' => 1,
-      'required' => 1,
-    ];
-    $instance = $this->createImageField($field_name, 'article', [], $field_settings);
-    $images = $this->drupalGetTestFiles('image');
-    // Let's just use the first image.
-    $image = $images[0];
-    $this->uploadNodeImage($image, $field_name, 'article');
-
-    // Look for form-required for the alt text.
-    $elements = $this->xpath('//label[@for="edit-' . $field_name . '-0-alt" and @class="js-form-required form-required"]/following-sibling::input[@id="edit-' . $field_name . '-0-alt"]');
-
-    $this->assertTrue(isset($elements[0]), 'Required marker is shown for the required alt text.');
-
-    $elements = $this->xpath('//label[@for="edit-' . $field_name . '-0-title" and @class="js-form-required form-required"]/following-sibling::input[@id="edit-' . $field_name . '-0-title"]');
-
-    $this->assertTrue(isset($elements[0]), 'Required marker is shown for the required title text.');
-
-    $this->assertText(t('Alternative text field is required.'));
-    $this->assertText(t('Title field is required.'));
-
-    $instance->setSetting('alt_field_required', 0);
-    $instance->setSetting('title_field_required', 0);
-    $instance->save();
-
-    $edit = [
-      'title[0][value]' => $this->randomMachineName(),
-    ];
-    $this->drupalPostForm('node/add/article', $edit, t('Save'));
-
-    $this->assertNoText(t('Alternative text field is required.'));
-    $this->assertNoText(t('Title field is required.'));
-
-    $instance->setSetting('required', 0);
-    $instance->setSetting('alt_field_required', 1);
-    $instance->setSetting('title_field_required', 1);
-    $instance->save();
-
-    $edit = [
-      'title[0][value]' => $this->randomMachineName(),
-    ];
-    $this->drupalPostForm('node/add/article', $edit, t('Save'));
-
-    $this->assertNoText(t('Alternative text field is required.'));
-    $this->assertNoText(t('Title field is required.'));
-  }
-
-  /**
-   * Returns field settings.
-   *
-   * @param int[] $min_resolution
-   *   The minimum width and height resolution setting.
-   * @param int[] $max_resolution
-   *   The maximum width and height resolution setting.
-   *
-   * @return array
-   */
-  protected function getFieldSettings($min_resolution, $max_resolution) {
-    return [
-      'max_resolution' => $max_resolution['width'] . 'x' . $max_resolution['height'],
-      'min_resolution' => $min_resolution['width'] . 'x' . $min_resolution['height'],
-      'alt_field' => 0,
-    ];
-  }
-
-}
diff --git a/core/modules/image/src/Tests/ImageOnTranslatedEntityTest.php b/core/modules/image/src/Tests/ImageOnTranslatedEntityTest.php
deleted file mode 100644
index c5f16cff07..0000000000
--- a/core/modules/image/src/Tests/ImageOnTranslatedEntityTest.php
+++ /dev/null
@@ -1,228 +0,0 @@
-<?php
-
-namespace Drupal\image\Tests;
-
-use Drupal\file\Entity\File;
-
-/**
- * Uploads images to translated nodes.
- *
- * @group image
- */
-class ImageOnTranslatedEntityTest extends ImageFieldTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['language', 'content_translation', 'field_ui'];
-
-  /**
-   * The name of the image field used in the test.
-   *
-   * @var string
-   */
-  protected $fieldName;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    // This test expects unused managed files to be marked as a temporary file.
-    $this->config('file.settings')->set('make_unused_managed_files_temporary', TRUE)->save();
-
-    // Create the "Basic page" node type.
-    // @todo Remove the disabling of new revision creation in
-    //   https://www.drupal.org/node/1239558.
-    $this->drupalCreateContentType(['type' => 'basicpage', 'name' => 'Basic page', 'new_revision' => FALSE]);
-
-    // Create a image field on the "Basic page" node type.
-    $this->fieldName = strtolower($this->randomMachineName());
-    $this->createImageField($this->fieldName, 'basicpage', [], ['title_field' => 1]);
-
-    // Create and log in user.
-    $permissions = [
-      'access administration pages',
-      'administer content translation',
-      'administer content types',
-      'administer languages',
-      'administer node fields',
-      'create content translations',
-      'create basicpage content',
-      'edit any basicpage content',
-      'translate any entity',
-      'delete any basicpage content',
-    ];
-    $admin_user = $this->drupalCreateUser($permissions);
-    $this->drupalLogin($admin_user);
-
-    // Add a second and third language.
-    $edit = [];
-    $edit['predefined_langcode'] = 'fr';
-    $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add language'));
-
-    $edit = [];
-    $edit['predefined_langcode'] = 'nl';
-    $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add language'));
-  }
-
-  /**
-   * Tests synced file fields on translated nodes.
-   */
-  public function testSyncedImages() {
-    // Enable translation for "Basic page" nodes.
-    $edit = [
-      'entity_types[node]' => 1,
-      'settings[node][basicpage][translatable]' => 1,
-      "settings[node][basicpage][fields][$this->fieldName]" => 1,
-      "settings[node][basicpage][columns][$this->fieldName][file]" => 1,
-      // Explicitly disable alt and title since the javascript disables the
-      // checkboxes on the form.
-      "settings[node][basicpage][columns][$this->fieldName][alt]" => FALSE,
-      "settings[node][basicpage][columns][$this->fieldName][title]" => FALSE,
-    ];
-    $this->drupalPostForm('admin/config/regional/content-language', $edit, 'Save configuration');
-
-    // Verify that the image field on the "Basic basic" node type is
-    // translatable.
-    $definitions = \Drupal::entityManager()->getFieldDefinitions('node', 'basicpage');
-    $this->assertTrue($definitions[$this->fieldName]->isTranslatable(), 'Node image field is translatable.');
-
-    // Create a default language node.
-    $default_language_node = $this->drupalCreateNode(['type' => 'basicpage', 'title' => 'Lost in translation']);
-
-    // Edit the node to upload a file.
-    $edit = [];
-    $name = 'files[' . $this->fieldName . '_0]';
-    $edit[$name] = drupal_realpath($this->drupalGetTestFiles('image')[0]->uri);
-    $this->drupalPostForm('node/' . $default_language_node->id() . '/edit', $edit, t('Save'));
-    $edit = [$this->fieldName . '[0][alt]' => 'Lost in translation image', $this->fieldName . '[0][title]' => 'Lost in translation image title'];
-    $this->drupalPostForm(NULL, $edit, t('Save'));
-    $first_fid = $this->getLastFileId();
-
-    // Translate the node into French: remove the existing file.
-    $this->drupalPostForm('node/' . $default_language_node->id() . '/translations/add/en/fr', [], t('Remove'));
-
-    // Upload a different file.
-    $edit = [];
-    $edit['title[0][value]'] = 'Scarlett Johansson';
-    $name = 'files[' . $this->fieldName . '_0]';
-    $edit[$name] = drupal_realpath($this->drupalGetTestFiles('image')[1]->uri);
-    $this->drupalPostForm(NULL, $edit, t('Save (this translation)'));
-    $edit = [$this->fieldName . '[0][alt]' => 'Scarlett Johansson image', $this->fieldName . '[0][title]' => 'Scarlett Johansson image title'];
-    $this->drupalPostForm(NULL, $edit, t('Save (this translation)'));
-    // This inspects the HTML after the post of the translation, the image
-    // should be displayed on the original node.
-    $this->assertRaw('alt="Lost in translation image"');
-    $this->assertRaw('title="Lost in translation image title"');
-    $second_fid = $this->getLastFileId();
-    // View the translated node.
-    $this->drupalGet('fr/node/' . $default_language_node->id());
-    $this->assertRaw('alt="Scarlett Johansson image"');
-
-    \Drupal::entityTypeManager()->getStorage('file')->resetCache();
-
-    /* @var $file \Drupal\file\FileInterface */
-
-    // Ensure the file status of the first file permanent.
-    $file = File::load($first_fid);
-    $this->assertTrue($file->isPermanent());
-
-    // Ensure the file status of the second file is permanent.
-    $file = File::load($second_fid);
-    $this->assertTrue($file->isPermanent());
-
-    // Translate the node into dutch: remove the existing file.
-    $this->drupalPostForm('node/' . $default_language_node->id() . '/translations/add/en/nl', [], t('Remove'));
-
-    // Upload a different file.
-    $edit = [];
-    $edit['title[0][value]'] = 'Akiko Takeshita';
-    $name = 'files[' . $this->fieldName . '_0]';
-    $edit[$name] = drupal_realpath($this->drupalGetTestFiles('image')[2]->uri);
-    $this->drupalPostForm(NULL, $edit, t('Save (this translation)'));
-    $edit = [$this->fieldName . '[0][alt]' => 'Akiko Takeshita image', $this->fieldName . '[0][title]' => 'Akiko Takeshita image title'];
-    $this->drupalPostForm(NULL, $edit, t('Save (this translation)'));
-    $third_fid = $this->getLastFileId();
-
-    \Drupal::entityTypeManager()->getStorage('file')->resetCache();
-
-    // Ensure the first file is untouched.
-    $file = File::load($first_fid);
-    $this->assertTrue($file->isPermanent(), 'First file still exists and is permanent.');
-    // This inspects the HTML after the post of the translation, the image
-    // should be displayed on the original node.
-    $this->assertRaw('alt="Lost in translation image"');
-    $this->assertRaw('title="Lost in translation image title"');
-    // View the translated node.
-    $this->drupalGet('nl/node/' . $default_language_node->id());
-    $this->assertRaw('alt="Akiko Takeshita image"');
-    $this->assertRaw('title="Akiko Takeshita image title"');
-
-    // Ensure the file status of the second file is permanent.
-    $file = File::load($second_fid);
-    $this->assertTrue($file->isPermanent());
-
-    // Ensure the file status of the third file is permanent.
-    $file = File::load($third_fid);
-    $this->assertTrue($file->isPermanent());
-
-    // Edit the second translation: remove the existing file.
-    $this->drupalPostForm('fr/node/' . $default_language_node->id() . '/edit', [], t('Remove'));
-
-    // Upload a different file.
-    $edit = [];
-    $edit['title[0][value]'] = 'Giovanni Ribisi';
-    $name = 'files[' . $this->fieldName . '_0]';
-    $edit[$name] = drupal_realpath($this->drupalGetTestFiles('image')[3]->uri);
-    $this->drupalPostForm(NULL, $edit, t('Save (this translation)'));
-    $name = $this->fieldName . '[0][alt]';
-
-    $edit = [$name => 'Giovanni Ribisi image'];
-    $this->drupalPostForm(NULL, $edit, t('Save (this translation)'));
-    $replaced_second_fid = $this->getLastFileId();
-
-    \Drupal::entityTypeManager()->getStorage('file')->resetCache();
-
-    // Ensure the first and third files are untouched.
-    $file = File::load($first_fid);
-    $this->assertTrue($file->isPermanent(), 'First file still exists and is permanent.');
-
-    $file = File::load($third_fid);
-    $this->assertTrue($file->isPermanent());
-
-    // Ensure the file status of the replaced second file is permanent.
-    $file = File::load($replaced_second_fid);
-    $this->assertTrue($file->isPermanent());
-
-    // Delete the third translation.
-    $this->drupalPostForm('nl/node/' . $default_language_node->id() . '/delete', [], t('Delete Dutch translation'));
-
-    \Drupal::entityTypeManager()->getStorage('file')->resetCache();
-
-    // Ensure the first and replaced second files are untouched.
-    $file = File::load($first_fid);
-    $this->assertTrue($file->isPermanent(), 'First file still exists and is permanent.');
-
-    $file = File::load($replaced_second_fid);
-    $this->assertTrue($file->isPermanent());
-
-    // Ensure the file status of the third file is now temporary.
-    $file = File::load($third_fid);
-    $this->assertTrue($file->isTemporary());
-
-    // Delete the all translations.
-    $this->drupalPostForm('node/' . $default_language_node->id() . '/delete', [], t('Delete all translations'));
-
-    \Drupal::entityTypeManager()->getStorage('file')->resetCache();
-
-    // Ensure the file status of the all files are now temporary.
-    $file = File::load($first_fid);
-    $this->assertTrue($file->isTemporary(), 'First file still exists and is temporary.');
-
-    $file = File::load($replaced_second_fid);
-    $this->assertTrue($file->isTemporary());
-  }
-
-}
diff --git a/core/modules/image/src/Tests/ImageStyleFlushTest.php b/core/modules/image/src/Tests/ImageStyleFlushTest.php
deleted file mode 100644
index 4e8cd2c779..0000000000
--- a/core/modules/image/src/Tests/ImageStyleFlushTest.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-
-namespace Drupal\image\Tests;
-
-use Drupal\image\Entity\ImageStyle;
-
-/**
- * Tests flushing of image styles.
- *
- * @group image
- */
-class ImageStyleFlushTest extends ImageFieldTestBase {
-
-  /**
-   * Given an image style and a wrapper, generate an image.
-   */
-  public function createSampleImage($style, $wrapper) {
-    static $file;
-
-    if (!isset($file)) {
-      $files = $this->drupalGetTestFiles('image');
-      $file = reset($files);
-    }
-
-    // Make sure we have an image in our wrapper testing file directory.
-    $source_uri = file_unmanaged_copy($file->uri, $wrapper . '://');
-    // Build the derivative image.
-    $derivative_uri = $style->buildUri($source_uri);
-    $derivative = $style->createDerivative($source_uri, $derivative_uri);
-
-    return $derivative ? $derivative_uri : FALSE;
-  }
-
-  /**
-   * Count the number of images currently created for a style in a wrapper.
-   */
-  public function getImageCount($style, $wrapper) {
-    return count(file_scan_directory($wrapper . '://styles/' . $style->id(), '/.*/'));
-  }
-
-  /**
-   * General test to flush a style.
-   */
-  public function testFlush() {
-
-    // Setup a style to be created and effects to add to it.
-    $style_name = strtolower($this->randomMachineName(10));
-    $style_label = $this->randomString();
-    $style_path = 'admin/config/media/image-styles/manage/' . $style_name;
-    $effect_edits = [
-      'image_resize' => [
-        'data[width]' => 100,
-        'data[height]' => 101,
-      ],
-      'image_scale' => [
-        'data[width]' => 110,
-        'data[height]' => 111,
-        'data[upscale]' => 1,
-      ],
-    ];
-
-    // Add style form.
-    $edit = [
-      'name' => $style_name,
-      'label' => $style_label,
-    ];
-    $this->drupalPostForm('admin/config/media/image-styles/add', $edit, t('Create new style'));
-
-    // Add each sample effect to the style.
-    foreach ($effect_edits as $effect => $edit) {
-      // Add the effect.
-      $this->drupalPostForm($style_path, ['new' => $effect], t('Add'));
-      if (!empty($edit)) {
-        $this->drupalPostForm(NULL, $edit, t('Add effect'));
-      }
-    }
-
-    // Load the saved image style.
-    $style = ImageStyle::load($style_name);
-
-    // Create an image for the 'public' wrapper.
-    $image_path = $this->createSampleImage($style, 'public');
-    // Expecting to find 2 images, one is the sample.png image shown in
-    // image style preview.
-    $this->assertEqual($this->getImageCount($style, 'public'), 2, format_string('Image style %style image %file successfully generated.', ['%style' => $style->label(), '%file' => $image_path]));
-
-    // Create an image for the 'private' wrapper.
-    $image_path = $this->createSampleImage($style, 'private');
-    $this->assertEqual($this->getImageCount($style, 'private'), 1, format_string('Image style %style image %file successfully generated.', ['%style' => $style->label(), '%file' => $image_path]));
-
-    // Remove the 'image_scale' effect and updates the style, which in turn
-    // forces an image style flush.
-    $style_path = 'admin/config/media/image-styles/manage/' . $style->id();
-    $uuids = [];
-    foreach ($style->getEffects() as $uuid => $effect) {
-      $uuids[$effect->getPluginId()] = $uuid;
-    }
-    $this->drupalPostForm($style_path . '/effects/' . $uuids['image_scale'] . '/delete', [], t('Delete'));
-    $this->assertResponse(200);
-    $this->drupalPostForm($style_path, [], t('Update style'));
-    $this->assertResponse(200);
-
-    // Post flush, expected 1 image in the 'public' wrapper (sample.png).
-    $this->assertEqual($this->getImageCount($style, 'public'), 1, format_string('Image style %style flushed correctly for %wrapper wrapper.', ['%style' => $style->label(), '%wrapper' => 'public']));
-
-    // Post flush, expected no image in the 'private' wrapper.
-    $this->assertEqual($this->getImageCount($style, 'private'), 0, format_string('Image style %style flushed correctly for %wrapper wrapper.', ['%style' => $style->label(), '%wrapper' => 'private']));
-  }
-
-}
diff --git a/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php b/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php
deleted file mode 100644
index 8296601bab..0000000000
--- a/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php
+++ /dev/null
@@ -1,268 +0,0 @@
-<?php
-
-namespace Drupal\image\Tests;
-
-use Drupal\image\Entity\ImageStyle;
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Tests the functions for generating paths and URLs for image styles.
- *
- * @group image
- */
-class ImageStylesPathAndUrlTest extends WebTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['image', 'image_module_test'];
-
-  /**
-   * @var \Drupal\image\ImageStyleInterface
-   */
-  protected $style;
-
-  protected function setUp() {
-    parent::setUp();
-
-    $this->style = ImageStyle::create(['name' => 'style_foo', 'label' => $this->randomString()]);
-    $this->style->save();
-  }
-
-  /**
-   * Tests \Drupal\image\ImageStyleInterface::buildUri().
-   */
-  public function testImageStylePath() {
-    $scheme = 'public';
-    $actual = $this->style->buildUri("$scheme://foo/bar.gif");
-    $expected = "$scheme://styles/" . $this->style->id() . "/$scheme/foo/bar.gif";
-    $this->assertEqual($actual, $expected, 'Got the path for a file URI.');
-
-    $actual = $this->style->buildUri('foo/bar.gif');
-    $expected = "$scheme://styles/" . $this->style->id() . "/$scheme/foo/bar.gif";
-    $this->assertEqual($actual, $expected, 'Got the path for a relative file path.');
-  }
-
-  /**
-   * Tests an image style URL using the "public://" scheme.
-   */
-  public function testImageStyleUrlAndPathPublic() {
-    $this->doImageStyleUrlAndPathTests('public');
-  }
-
-  /**
-   * Tests an image style URL using the "private://" scheme.
-   */
-  public function testImageStyleUrlAndPathPrivate() {
-    $this->doImageStyleUrlAndPathTests('private');
-  }
-
-  /**
-   * Tests an image style URL with the "public://" scheme and unclean URLs.
-   */
-  public function testImageStyleUrlAndPathPublicUnclean() {
-    $this->doImageStyleUrlAndPathTests('public', FALSE);
-  }
-
-  /**
-   * Tests an image style URL with the "private://" schema and unclean URLs.
-   */
-  public function testImageStyleUrlAndPathPrivateUnclean() {
-    $this->doImageStyleUrlAndPathTests('private', FALSE);
-  }
-
-  /**
-   * Tests an image style URL with a file URL that has an extra slash in it.
-   */
-  public function testImageStyleUrlExtraSlash() {
-    $this->doImageStyleUrlAndPathTests('public', TRUE, TRUE);
-  }
-
-  /**
-   * Tests that an invalid source image returns a 404.
-   */
-  public function testImageStyleUrlForMissingSourceImage() {
-    $non_existent_uri = 'public://foo.png';
-    $generated_url = $this->style->buildUrl($non_existent_uri);
-    $this->drupalGet($generated_url);
-    $this->assertResponse(404, 'Accessing an image style URL with a source image that does not exist provides a 404 error response.');
-  }
-
-  /**
-   * Tests building an image style URL.
-   */
-  public function doImageStyleUrlAndPathTests($scheme, $clean_url = TRUE, $extra_slash = FALSE) {
-    $this->prepareRequestForGenerator($clean_url);
-
-    // Make the default scheme neither "public" nor "private" to verify the
-    // functions work for other than the default scheme.
-    $this->config('system.file')->set('default_scheme', 'temporary')->save();
-
-    // Create the directories for the styles.
-    $directory = $scheme . '://styles/' . $this->style->id();
-    $status = file_prepare_directory($directory, FILE_CREATE_DIRECTORY);
-    $this->assertNotIdentical(FALSE, $status, 'Created the directory for the generated images for the test style.');
-
-    // Create a working copy of the file.
-    $files = $this->drupalGetTestFiles('image');
-    $file = array_shift($files);
-    $original_uri = file_unmanaged_copy($file->uri, $scheme . '://', FILE_EXISTS_RENAME);
-    // Let the image_module_test module know about this file, so it can claim
-    // ownership in hook_file_download().
-    \Drupal::state()->set('image.test_file_download', $original_uri);
-    $this->assertNotIdentical(FALSE, $original_uri, 'Created the generated image file.');
-
-    // Get the URL of a file that has not been generated and try to create it.
-    $generated_uri = $this->style->buildUri($original_uri);
-    $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
-    $generate_url = $this->style->buildUrl($original_uri, $clean_url);
-
-    // Ensure that the tests still pass when the file is generated by accessing
-    // a poorly constructed (but still valid) file URL that has an extra slash
-    // in it.
-    if ($extra_slash) {
-      $modified_uri = str_replace('://', ':///', $original_uri);
-      $this->assertNotEqual($original_uri, $modified_uri, 'An extra slash was added to the generated file URI.');
-      $generate_url = $this->style->buildUrl($modified_uri, $clean_url);
-    }
-    if (!$clean_url) {
-      $this->assertTrue(strpos($generate_url, 'index.php/') !== FALSE, 'When using non-clean URLS, the system path contains the script name.');
-    }
-    // Add some extra chars to the token.
-    $this->drupalGet(str_replace(IMAGE_DERIVATIVE_TOKEN . '=', IMAGE_DERIVATIVE_TOKEN . '=Zo', $generate_url));
-    $this->assertResponse(403, 'Image was inaccessible at the URL with an invalid token.');
-    // Change the parameter name so the token is missing.
-    $this->drupalGet(str_replace(IMAGE_DERIVATIVE_TOKEN . '=', 'wrongparam=', $generate_url));
-    $this->assertResponse(403, 'Image was inaccessible at the URL with a missing token.');
-
-    // Check that the generated URL is the same when we pass in a relative path
-    // rather than a URI. We need to temporarily switch the default scheme to
-    // match the desired scheme before testing this, then switch it back to the
-    // "temporary" scheme used throughout this test afterwards.
-    $this->config('system.file')->set('default_scheme', $scheme)->save();
-    $relative_path = file_uri_target($original_uri);
-    $generate_url_from_relative_path = $this->style->buildUrl($relative_path, $clean_url);
-    $this->assertEqual($generate_url, $generate_url_from_relative_path);
-    $this->config('system.file')->set('default_scheme', 'temporary')->save();
-
-    // Fetch the URL that generates the file.
-    $this->drupalGet($generate_url);
-    $this->assertResponse(200, 'Image was generated at the URL.');
-    $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
-    $this->assertRaw(file_get_contents($generated_uri), 'URL returns expected file.');
-    $image = $this->container->get('image.factory')->get($generated_uri);
-    $this->assertEqual($this->drupalGetHeader('Content-Type'), $image->getMimeType(), 'Expected Content-Type was reported.');
-    $this->assertEqual($this->drupalGetHeader('Content-Length'), $image->getFileSize(), 'Expected Content-Length was reported.');
-
-    // Check that we did not download the original file.
-    $original_image = $this->container->get('image.factory')->get($original_uri);
-    $this->assertNotEqual($this->drupalGetHeader('Content-Length'), $original_image->getFileSize());
-
-    if ($scheme == 'private') {
-      $this->assertEqual($this->drupalGetHeader('Expires'), 'Sun, 19 Nov 1978 05:00:00 GMT', 'Expires header was sent.');
-      $this->assertNotEqual(strpos($this->drupalGetHeader('Cache-Control'), 'no-cache'), FALSE, 'Cache-Control header contains \'no-cache\' to prevent caching.');
-      $this->assertEqual($this->drupalGetHeader('X-Image-Owned-By'), 'image_module_test', 'Expected custom header has been added.');
-
-      // Make sure that a second request to the already existing derivative
-      // works too.
-      $this->drupalGet($generate_url);
-      $this->assertResponse(200, 'Image was generated at the URL.');
-
-      // Check that the second request also returned the generated image.
-      $this->assertEqual($this->drupalGetHeader('Content-Length'), $image->getFileSize());
-
-      // Check that we did not download the original file.
-      $this->assertNotEqual($this->drupalGetHeader('Content-Length'), $original_image->getFileSize());
-
-      // Make sure that access is denied for existing style files if we do not
-      // have access.
-      \Drupal::state()->delete('image.test_file_download');
-      $this->drupalGet($generate_url);
-      $this->assertResponse(403, 'Confirmed that access is denied for the private image style.');
-
-      // Repeat this with a different file that we do not have access to and
-      // make sure that access is denied.
-      $file_noaccess = array_shift($files);
-      $original_uri_noaccess = file_unmanaged_copy($file_noaccess->uri, $scheme . '://', FILE_EXISTS_RENAME);
-      $generated_uri_noaccess = $scheme . '://styles/' . $this->style->id() . '/' . $scheme . '/' . drupal_basename($original_uri_noaccess);
-      $this->assertFalse(file_exists($generated_uri_noaccess), 'Generated file does not exist.');
-      $generate_url_noaccess = $this->style->buildUrl($original_uri_noaccess);
-
-      $this->drupalGet($generate_url_noaccess);
-      $this->assertResponse(403, 'Confirmed that access is denied for the private image style.');
-      // Verify that images are not appended to the response. Currently this test only uses PNG images.
-      if (strpos($generate_url, '.png') === FALSE ) {
-        $this->fail('Confirming that private image styles are not appended require PNG file.');
-      }
-      else {
-        // Check for PNG-Signature (cf. http://www.libpng.org/pub/png/book/chapter08.html#png.ch08.div.2) in the
-        // response body.
-        $this->assertNoRaw(chr(137) . chr(80) . chr(78) . chr(71) . chr(13) . chr(10) . chr(26) . chr(10), 'No PNG signature found in the response body.');
-      }
-    }
-    else {
-      $this->assertEqual($this->drupalGetHeader('Expires'), 'Sun, 19 Nov 1978 05:00:00 GMT', 'Expires header was sent.');
-      $this->assertEqual(strpos($this->drupalGetHeader('Cache-Control'), 'no-cache'), FALSE, 'Cache-Control header contains \'no-cache\' to prevent caching.');
-
-      if ($clean_url) {
-        // Add some extra chars to the token.
-        $this->drupalGet(str_replace(IMAGE_DERIVATIVE_TOKEN . '=', IMAGE_DERIVATIVE_TOKEN . '=Zo', $generate_url));
-        $this->assertResponse(200, 'Existing image was accessible at the URL with an invalid token.');
-      }
-    }
-
-    // Allow insecure image derivatives to be created for the remainder of this
-    // test.
-    $this->config('image.settings')->set('allow_insecure_derivatives', TRUE)->save();
-
-    // Create another working copy of the file.
-    $files = $this->drupalGetTestFiles('image');
-    $file = array_shift($files);
-    $original_uri = file_unmanaged_copy($file->uri, $scheme . '://', FILE_EXISTS_RENAME);
-    // Let the image_module_test module know about this file, so it can claim
-    // ownership in hook_file_download().
-    \Drupal::state()->set('image.test_file_download', $original_uri);
-
-    // Suppress the security token in the URL, then get the URL of a file that
-    // has not been created and try to create it. Check that the security token
-    // is not present in the URL but that the image is still accessible.
-    $this->config('image.settings')->set('suppress_itok_output', TRUE)->save();
-    $generated_uri = $this->style->buildUri($original_uri);
-    $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
-    $generate_url = $this->style->buildUrl($original_uri, $clean_url);
-    $this->assertIdentical(strpos($generate_url, IMAGE_DERIVATIVE_TOKEN . '='), FALSE, 'The security token does not appear in the image style URL.');
-    $this->drupalGet($generate_url);
-    $this->assertResponse(200, 'Image was accessible at the URL with a missing token.');
-
-    // Stop supressing the security token in the URL.
-    $this->config('image.settings')->set('suppress_itok_output', FALSE)->save();
-    // Ensure allow_insecure_derivatives is enabled.
-    $this->assertEqual($this->config('image.settings')->get('allow_insecure_derivatives'), TRUE);
-    // Check that a security token is still required when generating a second
-    // image derivative using the first one as a source.
-    $nested_url = $this->style->buildUrl($generated_uri, $clean_url);
-    $matches_expected_url_format = (boolean) preg_match('/styles\/' . $this->style->id() . '\/' . $scheme . '\/styles\/' . $this->style->id() . '\/' . $scheme . '/', $nested_url);
-    $this->assertTrue($matches_expected_url_format, "URL for a derivative of an image style matches expected format.");
-    $nested_url_with_wrong_token = str_replace(IMAGE_DERIVATIVE_TOKEN . '=', 'wrongparam=', $nested_url);
-    $this->drupalGet($nested_url_with_wrong_token);
-    $this->assertResponse(403, 'Image generated from an earlier derivative was inaccessible at the URL with a missing token.');
-    // Check that this restriction cannot be bypassed by adding extra slashes
-    // to the URL.
-    $this->drupalGet(substr_replace($nested_url_with_wrong_token, '//styles/', strrpos($nested_url_with_wrong_token, '/styles/'), strlen('/styles/')));
-    $this->assertResponse(403, 'Image generated from an earlier derivative was inaccessible at the URL with a missing token, even with an extra forward slash in the URL.');
-    $this->drupalGet(substr_replace($nested_url_with_wrong_token, '////styles/', strrpos($nested_url_with_wrong_token, '/styles/'), strlen('/styles/')));
-    $this->assertResponse(403, 'Image generated from an earlier derivative was inaccessible at the URL with a missing token, even with multiple forward slashes in the URL.');
-    // Make sure the image can still be generated if a correct token is used.
-    $this->drupalGet($nested_url);
-    $this->assertResponse(200, 'Image was accessible when a correct token was provided in the URL.');
-
-    // Check that requesting a nonexistent image does not create any new
-    // directories in the file system.
-    $directory = $scheme . '://styles/' . $this->style->id() . '/' . $scheme . '/' . $this->randomMachineName();
-    $this->drupalGet(file_create_url($directory . '/' . $this->randomString()));
-    $this->assertFalse(file_exists($directory), 'New directory was not created in the filesystem when requesting an unauthorized image.');
-  }
-
-}
diff --git a/core/modules/image/src/Tests/ImageThemeFunctionTest.php b/core/modules/image/src/Tests/ImageThemeFunctionTest.php
deleted file mode 100644
index 54c5c64a19..0000000000
--- a/core/modules/image/src/Tests/ImageThemeFunctionTest.php
+++ /dev/null
@@ -1,221 +0,0 @@
-<?php
-
-namespace Drupal\image\Tests;
-
-use Drupal\Core\Field\FieldStorageDefinitionInterface;
-use Drupal\Core\Url;
-use Drupal\entity_test\Entity\EntityTest;
-use Drupal\field\Entity\FieldConfig;
-use Drupal\file\Entity\File;
-use Drupal\image\Entity\ImageStyle;
-use Drupal\simpletest\WebTestBase;
-use Drupal\field\Entity\FieldStorageConfig;
-
-/**
- * Tests image theme functions.
- *
- * @group image
- */
-class ImageThemeFunctionTest extends WebTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['image', 'entity_test'];
-
-  /**
-   * Created file entity.
-   *
-   * @var \Drupal\file\Entity\File
-   */
-  protected $image;
-
-  /**
-   * @var \Drupal\Core\Image\ImageFactory
-   */
-  protected $imageFactory;
-
-  protected function setUp() {
-    parent::setUp();
-
-    FieldStorageConfig::create([
-      'entity_type' => 'entity_test',
-      'field_name' => 'image_test',
-      'type' => 'image',
-      'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
-    ])->save();
-    FieldConfig::create([
-      'entity_type' => 'entity_test',
-      'field_name' => 'image_test',
-      'bundle' => 'entity_test',
-    ])->save();
-    file_unmanaged_copy(\Drupal::root() . '/core/misc/druplicon.png', 'public://example.jpg');
-    $this->image = File::create([
-      'uri' => 'public://example.jpg',
-    ]);
-    $this->image->save();
-    $this->imageFactory = $this->container->get('image.factory');
-  }
-
-  /**
-   * Tests usage of the image field formatters.
-   */
-  public function testImageFormatterTheme() {
-    /** @var \Drupal\Core\Render\RendererInterface $renderer */
-    $renderer = $this->container->get('renderer');
-
-    // Create an image.
-    $files = $this->drupalGetTestFiles('image');
-    $file = reset($files);
-    $original_uri = file_unmanaged_copy($file->uri, 'public://', FILE_EXISTS_RENAME);
-
-    // Create a style.
-    $style = ImageStyle::create(['name' => 'test', 'label' => 'Test']);
-    $style->save();
-    $url = file_url_transform_relative($style->buildUrl($original_uri));
-
-    // Create a test entity with the image field set.
-    $entity = EntityTest::create();
-    $entity->image_test->target_id = $this->image->id();
-    $entity->image_test->alt = NULL;
-    $entity->image_test->uri = $original_uri;
-    $image = $this->imageFactory->get('public://example.jpg');
-    $entity->save();
-
-    // Create the base element that we'll use in the tests below.
-    $path = $this->randomMachineName();
-    $base_element = [
-      '#theme' => 'image_formatter',
-      '#image_style' => 'test',
-      '#item' => $entity->image_test,
-      '#url' => Url::fromUri('base:' . $path),
-    ];
-
-    // Test using theme_image_formatter() with a NULL value for the alt option.
-    $element = $base_element;
-    $this->setRawContent($renderer->renderRoot($element));
-    $elements = $this->xpath('//a[@href=:path]/img[@class="image-style-test" and @src=:url and @width=:width and @height=:height]', [':path' => base_path() . $path, ':url' => $url, ':width' => $image->getWidth(), ':height' => $image->getHeight()]);
-    $this->assertEqual(count($elements), 1, 'theme_image_formatter() correctly renders with a NULL value for the alt option.');
-
-    // Test using theme_image_formatter() without an image title, alt text, or
-    // link options.
-    $element = $base_element;
-    $element['#item']->alt = '';
-    $this->setRawContent($renderer->renderRoot($element));
-    $elements = $this->xpath('//a[@href=:path]/img[@class="image-style-test" and @src=:url and @width=:width and @height=:height and @alt=""]', [':path' => base_path() . $path, ':url' => $url, ':width' => $image->getWidth(), ':height' => $image->getHeight()]);
-    $this->assertEqual(count($elements), 1, 'theme_image_formatter() correctly renders without title, alt, or path options.');
-
-    // Link the image to a fragment on the page, and not a full URL.
-    $fragment = $this->randomMachineName();
-    $element = $base_element;
-    $element['#url'] = Url::fromRoute('<none>', [], ['fragment' => $fragment]);
-    $this->setRawContent($renderer->renderRoot($element));
-    $elements = $this->xpath('//a[@href=:fragment]/img[@class="image-style-test" and @src=:url and @width=:width and @height=:height and @alt=""]', [
-      ':fragment' => '#' . $fragment,
-      ':url' => $url,
-      ':width' => $image->getWidth(),
-      ':height' => $image->getHeight()
-    ]);
-    $this->assertEqual(count($elements), 1, 'theme_image_formatter() correctly renders a link fragment.');
-  }
-
-  /**
-   * Tests usage of the image style theme function.
-   */
-  public function testImageStyleTheme() {
-    /** @var \Drupal\Core\Render\RendererInterface $renderer */
-    $renderer = $this->container->get('renderer');
-
-    // Create an image.
-    $files = $this->drupalGetTestFiles('image');
-    $file = reset($files);
-    $original_uri = file_unmanaged_copy($file->uri, 'public://', FILE_EXISTS_RENAME);
-
-    // Create a style.
-    $style = ImageStyle::create(['name' => 'image_test', 'label' => 'Test']);
-    $style->save();
-    $url = file_url_transform_relative($style->buildUrl($original_uri));
-
-    // Create the base element that we'll use in the tests below.
-    $base_element = [
-      '#theme' => 'image_style',
-      '#style_name' => 'image_test',
-      '#uri' => $original_uri,
-    ];
-
-    $element = $base_element;
-    $this->setRawContent($renderer->renderRoot($element));
-    $elements = $this->xpath('//img[@class="image-style-image-test" and @src=:url and @alt=""]', [':url' => $url]);
-    $this->assertEqual(count($elements), 1, 'theme_image_style() renders an image correctly.');
-
-    // Test using theme_image_style() with a NULL value for the alt option.
-    $element = $base_element;
-    $element['#alt'] = NULL;
-    $this->setRawContent($renderer->renderRoot($element));
-    $elements = $this->xpath('//img[@class="image-style-image-test" and @src=:url]', [':url' => $url]);
-    $this->assertEqual(count($elements), 1, 'theme_image_style() renders an image correctly with a NULL value for the alt option.');
-  }
-
-  /**
-   * Tests image alt attribute functionality.
-   */
-  public function testImageAltFunctionality() {
-    /** @var \Drupal\Core\Render\RendererInterface $renderer */
-    $renderer = $this->container->get('renderer');
-
-    // Test using alt directly with alt attribute.
-    $image_with_alt_property = [
-      '#theme' => 'image',
-      '#uri' => '/core/themes/bartik/logo.svg',
-      '#alt' => 'Regular alt',
-      '#title' => 'Test title',
-      '#width' => '50%',
-      '#height' => '50%',
-      '#attributes' => ['class' => 'image-with-regular-alt', 'id' => 'my-img'],
-    ];
-
-    $this->setRawContent($renderer->renderRoot($image_with_alt_property));
-    $elements = $this->xpath('//img[contains(@class, class) and contains(@alt, :alt)]', [":class" => "image-with-regular-alt", ":alt" => "Regular alt"]);
-    $this->assertEqual(count($elements), 1, 'Regular alt displays correctly');
-
-    // Test using alt attribute inside attributes.
-    $image_with_alt_attribute_alt_attribute = [
-      '#theme' => 'image',
-      '#uri' => '/core/themes/bartik/logo.svg',
-      '#width' => '50%',
-      '#height' => '50%',
-      '#attributes' => [
-        'class' => 'image-with-attribute-alt',
-        'id' => 'my-img',
-        'title' => 'New test title',
-        'alt' => 'Attribute alt',
-      ],
-    ];
-
-    $this->setRawContent($renderer->renderRoot($image_with_alt_attribute_alt_attribute));
-    $elements = $this->xpath('//img[contains(@class, class) and contains(@alt, :alt)]', [":class" => "image-with-attribute-alt", ":alt" => "Attribute alt"]);
-    $this->assertEqual(count($elements), 1, 'Attribute alt displays correctly');
-
-    // Test using alt attribute as property and inside attributes.
-    $image_with_alt_attribute_both = [
-      '#theme' => 'image',
-      '#uri' => '/core/themes/bartik/logo.svg',
-      '#width' => '50%',
-      '#height' => '50%',
-      '#alt' => 'Kitten sustainable',
-      '#attributes' => [
-        'class' => 'image-with-attribute-alt',
-        'id' => 'my-img',
-        'title' => 'New test title',
-        'alt' => 'Attribute alt',
-      ],
-    ];
-
-    $this->setRawContent($renderer->renderRoot($image_with_alt_attribute_both));
-    $elements = $this->xpath('//img[contains(@class, class) and contains(@alt, :alt)]', [":class" => "image-with-attribute-alt", ":alt" => "Attribute alt"]);
-    $this->assertEqual(count($elements), 1, 'Attribute alt overrides alt property if both set.');
-  }
-
-}
diff --git a/core/modules/image/src/Tests/QuickEditImageControllerTest.php b/core/modules/image/src/Tests/QuickEditImageControllerTest.php
deleted file mode 100644
index 870c1bb5d5..0000000000
--- a/core/modules/image/src/Tests/QuickEditImageControllerTest.php
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-
-namespace Drupal\image\Tests;
-
-use Drupal\Tests\image\Kernel\ImageFieldCreationTrait;
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Tests the endpoints used by the "image" in-place editor.
- *
- * @group image
- */
-class QuickEditImageControllerTest extends WebTestBase {
-
-  use ImageFieldCreationTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['node', 'image', 'quickedit'];
-
-  /**
-   * The machine name of our image field.
-   *
-   * @var string
-   */
-  protected $fieldName;
-
-  /**
-   * A user with permissions to edit articles and use Quick Edit.
-   *
-   * @var \Drupal\user\UserInterface
-   */
-  protected $contentAuthorUser;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    // Create the Article node type.
-    $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
-
-    // Log in as a content author who can use Quick Edit and edit Articles.
-    $this->contentAuthorUser = $this->drupalCreateUser([
-      'access contextual links',
-      'access in-place editing',
-      'access content',
-      'create article content',
-      'edit any article content',
-      'delete any article content',
-    ]);
-    $this->drupalLogin($this->contentAuthorUser);
-
-    // Create a field with basic resolution validators.
-    $this->fieldName = strtolower($this->randomMachineName());
-    $field_settings = [
-      'max_resolution' => '100x',
-      'min_resolution' => '50x',
-    ];
-    $this->createImageField($this->fieldName, 'article', [], $field_settings);
-  }
-
-  /**
-   * Tests that routes restrict access for un-privileged users.
-   */
-  public function testAccess() {
-    // Create an anonymous user.
-    $user = $this->createUser();
-    $this->drupalLogin($user);
-
-    // Create a test Node.
-    $node = $this->drupalCreateNode([
-      'type' => 'article',
-      'title' => t('Test Node'),
-    ]);
-    $this->drupalGet('quickedit/image/info/node/' . $node->id() . '/' . $this->fieldName . '/' . $node->language()->getId() . '/default');
-    $this->assertResponse('403');
-    $this->drupalPost('quickedit/image/upload/node/' . $node->id() . '/' . $this->fieldName . '/' . $node->language()->getId() . '/default', 'application/json', []);
-    $this->assertResponse('403');
-  }
-
-  /**
-   * Tests that the field info route returns expected data.
-   */
-  public function testFieldInfo() {
-    // Create a test Node.
-    $node = $this->drupalCreateNode([
-      'type' => 'article',
-      'title' => t('Test Node'),
-    ]);
-    $info = $this->drupalGetJSON('quickedit/image/info/node/' . $node->id() . '/' . $this->fieldName . '/' . $node->language()->getId() . '/default');
-    // Assert that the default settings for our field are respected by our JSON
-    // endpoint.
-    $this->assertTrue($info['alt_field']);
-    $this->assertFalse($info['title_field']);
-  }
-
-  /**
-   * Tests that uploading a valid image works.
-   */
-  public function testValidImageUpload() {
-    // Create a test Node.
-    $node = $this->drupalCreateNode([
-      'type' => 'article',
-      'title' => t('Test Node'),
-    ]);
-
-    // We want a test image that is a valid size.
-    $valid_image = FALSE;
-    $image_factory = $this->container->get('image.factory');
-    foreach ($this->drupalGetTestFiles('image') as $image) {
-      $image_file = $image_factory->get($image->uri);
-      if ($image_file->getWidth() > 50 && $image_file->getWidth() < 100) {
-        $valid_image = $image;
-        break;
-      }
-    }
-    $this->assertTrue($valid_image);
-    $this->uploadImage($valid_image, $node->id(), $this->fieldName, $node->language()->getId());
-    $this->assertText('fid', t('Valid upload completed successfully.'));
-  }
-
-  /**
-   * Tests that uploading a invalid image does not work.
-   */
-  public function testInvalidUpload() {
-    // Create a test Node.
-    $node = $this->drupalCreateNode([
-      'type' => 'article',
-      'title' => t('Test Node'),
-    ]);
-
-    // We want a test image that will fail validation.
-    $invalid_image = FALSE;
-    /** @var \Drupal\Core\Image\ImageFactory $image_factory */
-    $image_factory = $this->container->get('image.factory');
-    foreach ($this->drupalGetTestFiles('image') as $image) {
-      /** @var \Drupal\Core\Image\ImageInterface $image_file */
-      $image_file = $image_factory->get($image->uri);
-      if ($image_file->getWidth() < 50 || $image_file->getWidth() > 100 ) {
-        $invalid_image = $image;
-        break;
-      }
-    }
-    $this->assertTrue($invalid_image);
-    $this->uploadImage($invalid_image, $node->id(), $this->fieldName, $node->language()->getId());
-    $this->assertText('main_error', t('Invalid upload returned errors.'));
-  }
-
-  /**
-   * Uploads an image using the image module's Quick Edit route.
-   *
-   * @param object $image
-   *   The image to upload.
-   * @param int $nid
-   *   The target node ID.
-   * @param string $field_name
-   *   The target field machine name.
-   * @param string $langcode
-   *   The langcode to use when setting the field's value.
-   *
-   * @return mixed
-   *   The content returned from the call to $this->curlExec().
-   */
-  public function uploadImage($image, $nid, $field_name, $langcode) {
-    $filepath = $this->container->get('file_system')->realpath($image->uri);
-    $data = [
-      'files[image]' => curl_file_create($filepath),
-    ];
-    $path = 'quickedit/image/upload/node/' . $nid . '/' . $field_name . '/' . $langcode . '/default';
-    // We assemble the curl request ourselves as drupalPost cannot process file
-    // uploads, and drupalPostForm only works with typical Drupal forms.
-    return $this->curlExec([
-      CURLOPT_URL => $this->buildUrl($path, []),
-      CURLOPT_POST => TRUE,
-      CURLOPT_POSTFIELDS => $data,
-      CURLOPT_HTTPHEADER => [
-        'Accept: application/json',
-        'Content-Type: multipart/form-data',
-      ],
-    ]);
-  }
-
-}
diff --git a/core/modules/image/tests/src/Functional/ImageFieldTestBase.php b/core/modules/image/tests/src/Functional/ImageFieldTestBase.php
index 5fa0614040..7a226dc3b3 100644
--- a/core/modules/image/tests/src/Functional/ImageFieldTestBase.php
+++ b/core/modules/image/tests/src/Functional/ImageFieldTestBase.php
@@ -86,11 +86,12 @@ public function uploadNodeImage($image, $field_name, $type, $alt = '') {
     $edit = [
       'title[0][value]' => $this->randomMachineName(),
     ];
+
     $edit['files[' . $field_name . '_0]'] = drupal_realpath($image->uri);
-    $this->drupalPostForm('node/add/' . $type, $edit, t('Save and publish'));
+    $this->drupalPostForm('node/add/' . $type, $edit, t('Save'));
     if ($alt) {
       // Add alt text.
-      $this->drupalPostForm(NULL, [$field_name . '[0][alt]' => $alt], t('Save and publish'));
+      $this->drupalPostForm(NULL, [$field_name . '[0][alt]' => $alt], t('Save'));
     }
 
     // Retrieve ID of the newly created node from the current URL.
diff --git a/core/tests/Drupal/Tests/BrowserTestBase.php b/core/tests/Drupal/Tests/BrowserTestBase.php
index abdedd9c03..727020af5b 100644
--- a/core/tests/Drupal/Tests/BrowserTestBase.php
+++ b/core/tests/Drupal/Tests/BrowserTestBase.php
@@ -669,6 +669,43 @@ protected function drupalGet($path, array $options = [], array $headers = []) {
     return $out;
   }
 
+  /**
+   * Retrieves a Drupal path or an absolute path and JSON decodes the result.
+   *
+   * @param \Drupal\Core\Url|string $path
+   *   Drupal path or URL to request AJAX from.
+   * @param array $options
+   *   Array of URL options.
+   * @param array $headers
+   *   Array of headers. Eg array('Accept: application/vnd.drupal-ajax').
+   *
+   * @return array
+   *   Decoded json.
+   */
+  protected function drupalGetJSON($path, array $options = [], array $headers = []) {
+    return Json::decode($this->drupalGetWithFormat($path, 'json', $options, $headers));
+  }
+
+  /**
+   * Retrieves a Drupal path or an absolute path for a given format.
+   *
+   * @param \Drupal\Core\Url|string $path
+   *   Drupal path or URL to request given format from.
+   * @param string $format
+   *   The wanted request format.
+   * @param array $options
+   *   Array of URL options.
+   * @param array $headers
+   *   Array of headers.
+   *
+   * @return mixed
+   *   The result of the request.
+   */
+  protected function drupalGetWithFormat($path, $format, array $options = [], array $headers = []) {
+    $options += ['query' => ['_format' => $format]];
+    return $this->drupalGet($path, $options, $headers);
+  }
+
   /**
    * Takes a path and returns an absolute path.
    *
