diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityFile.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityFile.php
index 77b471f115d06974cb5e2dd9267d453b6ee19378..f945164f65e6fa3b1b4b9d53905e120b3b3032bb 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityFile.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityFile.php
@@ -7,12 +7,16 @@
 
 namespace Drupal\migrate\Plugin\migrate\destination;
 
+use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\File\FileSystemInterface;
+use Drupal\Core\StreamWrapper\LocalStream;
+use Drupal\Core\StreamWrapper\StreamWrapperManagerInterface;
 use Drupal\migrate\Entity\MigrationInterface;
-use Drupal\migrate\Plugin\MigratePluginManager;
 use Drupal\migrate\Row;
 use Drupal\migrate\MigrateException;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Every migration that uses this destination must have an optional
@@ -24,10 +28,20 @@
  */
 class EntityFile extends EntityContentBase {
 
+  /**
+   * @var \Drupal\Core\StreamWrapper\StreamWrapperManagerInterface
+   */
+  protected $streamWrapperManager;
+
+  /**
+   * @var \Drupal\Core\File\FileSystemInterface
+   */
+  protected $fileSystem;
+
   /**
    * {@inheritdoc}
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, StreamWrapperManagerInterface $stream_wrappers, FileSystemInterface $file_system) {
     $configuration += array(
       'source_base_path' => '',
       'source_path_property' => 'filepath',
@@ -36,6 +50,27 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
       'urlencode' => FALSE,
     );
     parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $entity_manager);
+
+    $this->streamWrapperManager = $stream_wrappers;
+    $this->fileSystem = $file_system;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
+    $entity_type = static::getEntityTypeId($plugin_id);
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $migration,
+      $container->get('entity.manager')->getStorage($entity_type),
+      array_keys($container->get('entity.manager')->getBundleInfo($entity_type)),
+      $container->get('entity.manager'),
+      $container->get('stream_wrapper_manager'),
+      $container->get('file_system')
+    );
   }
 
   /**
@@ -44,51 +79,144 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
   public function import(Row $row, array $old_destination_id_values = array()) {
     $file = $row->getSourceProperty($this->configuration['source_path_property']);
     $destination = $row->getDestinationProperty($this->configuration['destination_path_property']);
+    $source = $this->configuration['source_base_path'] . $file;
 
-    // We check the destination to see if this is a temporary file. If it is
-    // then we do not prepend the source_base_path because temporary files are
-    // already absolute.
-    $source = $this->isTempFile($destination) ? $file : $this->configuration['source_base_path'] . $file;
-
-    $dirname = drupal_dirname($destination);
-    if (!file_prepare_directory($dirname, FILE_CREATE_DIRECTORY)) {
-      throw new MigrateException(t('Could not create directory %dirname', array('%dirname' => $dirname)));
+    // Ensure the source file exists, if it's a local URI or path.
+    if ($this->isLocalUri($source) && !file_exists($source)) {
+      throw new MigrateException(SafeMarkup::format('File @source does not exist.', ['@source' => $source]));
     }
 
     // If the start and end file is exactly the same, there is nothing to do.
-    if (drupal_realpath($source) === drupal_realpath($destination)) {
+    if ($this->isLocationUnchanged($source, $destination)) {
       return parent::import($row, $old_destination_id_values);
     }
 
-    $replace = FILE_EXISTS_REPLACE;
-    if (!empty($this->configuration['rename'])) {
-      $entity_id = $row->getDestinationProperty($this->getKey('id'));
-      if (!empty($entity_id) && ($entity = $this->storage->load($entity_id))) {
-        $replace = FILE_EXISTS_RENAME;
+    $replace = $this->getOverwriteMode($row);
+    $success = $this->writeFile($source, $destination, $replace);
+    if (!$success) {
+      $dir = $this->getDirectory($destination);
+      if (file_prepare_directory($dir, FILE_CREATE_DIRECTORY)) {
+        $success = $this->writeFile($source, $destination, $replace);
+      }
+      else {
+        throw new MigrateException(SafeMarkup::format('Could not create directory @dir', ['@dir' => $dir]));
       }
     }
 
+    if ($success) {
+      return parent::import($row, $old_destination_id_values);
+    }
+    else {
+      throw new MigrateException(SafeMarkup::format('File %source could not be copied to %destination.', ['%source' => $source, '%destination' => $destination]));
+    }
+  }
+
+  /**
+   * Tries to move or copy a file.
+   *
+   * @param string $source
+   *  The source path or URI.
+   * @param string $destination
+   *  The destination path or URI.
+   * @param integer $replace
+   *  FILE_EXISTS_REPLACE (default) or FILE_EXISTS_RENAME.
+   *
+   * @return boolean
+   *  TRUE on success, FALSE on failure.
+   */
+  protected function writeFile($source, $destination, $replace = FILE_EXISTS_REPLACE) {
     if ($this->configuration['move']) {
-      $copied = file_unmanaged_move($source, $destination, $replace);
+      return (boolean) file_unmanaged_move($source, $destination, $replace);
     }
     else {
-      // Determine whether we can perform this operation based on overwrite rules.
-      $original_destination = $destination;
       $destination = file_destination($destination, $replace);
-      if ($destination === FALSE) {
-        throw new MigrateException(t('File %file could not be copied because a file by that name already exists in the destination directory (%destination)', array('%file' => $source, '%destination' => $original_destination)));
-      }
       $source = $this->urlencode($source);
-      $copied = @copy($source, $destination);
+      return @copy($source, $destination);
     }
-    if ($copied) {
-      return parent::import($row, $old_destination_id_values);
+  }
+
+  /**
+   * Determines how to handle file conflicts.
+   *
+   * @param \Drupal\migrate\Row $row
+   *
+   * @return integer
+   *  Either FILE_EXISTS_REPLACE (default) or FILE_EXISTS_RENAME, depending
+   *  on the current configuration.
+   */
+  protected function getOverwriteMode(Row $row) {
+    if (!empty($this->configuration['rename'])) {
+      $entity_id = $row->getDestinationProperty($this->getKey('id'));
+      if ($entity_id && ($entity = $this->storage->load($entity_id))) {
+        return FILE_EXISTS_RENAME;
+      }
+    }
+    return FILE_EXISTS_REPLACE;
+  }
+
+  /**
+   * Returns the directory component of a URI or path.
+   *
+   * For URIs like public://foo.txt, the full physical path of public://
+   * will be returned, since a scheme by itself will trip up certain file
+   * API functions (such as file_prepare_directory()).
+   *
+   * @param string $uri
+   *  The URI or path.
+   *
+   * @return boolean|string
+   *  The directory component of the path or URI, or FALSE if it could not
+   *  be determined.
+   */
+  protected function getDirectory($uri) {
+    $dir = $this->fileSystem->dirname($uri);
+    if (substr($dir, -3) == '://') {
+      return $this->fileSystem->realpath($dir);
+    }
+    else {
+      return $dir;
+    }
+  }
+
+  /**
+   * Returns if the source and destination URIs represent identical paths.
+   * If either URI is a remote stream, will return FALSE.
+   *
+   * @param string $source
+   *  The source URI.
+   * @param string $destination
+   *  The destination URI.
+   *
+   * @return boolean
+   *  TRUE if the source and destination URIs refer to the same physical path,
+   *  otherwise FALSE.
+   */
+  protected function isLocationUnchanged($source, $destination) {
+    if ($this->isLocalUri($source) && $this->isLocalUri($destination)) {
+      return $this->fileSystem->realpath($source) === $this->fileSystem->realpath($destination);
     }
     else {
-      throw new MigrateException(t('File %source could not be copied to %destination.', array('%source' => $source, '%destination' => $destination)));
+      return FALSE;
     }
   }
 
+  /**
+   * Returns if the given URI or path is considered local.
+   *
+   * A URI or path is considered local if it either has no scheme component,
+   * or the scheme is implemented by a stream wrapper which extends
+   * \Drupal\Core\StreamWrapper\LocalStream.
+   *
+   * @param string $uri
+   *  The URI or path to test.
+   *
+   * @return boolean
+   */
+  protected function isLocalUri($uri) {
+    $scheme = $this->fileSystem->uriScheme($uri);
+    return $scheme === FALSE || $this->streamWrapperManager->getViaScheme($scheme) instanceof LocalStream;
+  }
+
   /**
    * Urlencode all the components of a remote filename.
    *
@@ -114,18 +242,4 @@ protected function urlencode($filename) {
     return $filename;
   }
 
-  /**
-   * Check if a file is a temp file.
-   *
-   * @param string $file
-   *   The destination file path.
-   *
-   * @return bool
-   *   TRUE if the file is temporary otherwise FALSE.
-   */
-  protected function isTempFile($file) {
-    $tmp = 'temporary://';
-    return substr($file, 0, strlen($tmp)) === $tmp;
-  }
-
 }
diff --git a/core/modules/migrate/src/Tests/EntityFileTest.php b/core/modules/migrate/src/Tests/EntityFileTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..509e98b6f9df579e8bae6577df4ad947ec33e647
--- /dev/null
+++ b/core/modules/migrate/src/Tests/EntityFileTest.php
@@ -0,0 +1,295 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Tests\EntityFileTest.
+ */
+
+namespace Drupal\migrate\Tests;
+
+use Drupal\Core\Site\Settings;
+use Drupal\migrate\Row;
+use Drupal\migrate\Plugin\migrate\destination\EntityFile;
+use Drupal\Core\Entity\ContentEntityInterface;
+use Drupal\entity_test\Entity\EntityTest;
+use Drupal\migrate\MigrateException;
+use Drupal\simpletest\KernelTestBase;
+
+/**
+ * Tests the entity file destination plugin.
+ *
+ * @group migrate
+ */
+class EntityFileTest extends KernelTestBase {
+
+  /**
+   * Modules to install.
+   *
+   * @var array
+   */
+  public static $modules = array('system', 'entity_test', 'user', 'file');
+
+  /**
+   * @var \Drupal\migrate\Tests\TestEntityFile $destination
+   */
+  protected $destination;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+    $this->destination = new TestEntityFile([]);
+    $this->destination->streamWrapperManager = \Drupal::getContainer()->get('stream_wrapper_manager');
+    $this->destination->fileSystem = \Drupal::getContainer()->get('file_system');
+    $this->installEntitySchema('file');
+
+    file_put_contents('/tmp/test-file.jpg', '');
+  }
+
+  /**
+   * Test successful imports/copies.
+   */
+  public function testSuccessfulCopies() {
+    foreach ($this->localFileDataProvider() as $data) {
+      list($row_values, $destination_path, $expected, $source_base_path) = $data;
+
+      $this->doImport($row_values, $destination_path, $source_base_path);
+      $message = $expected ? sprintf('File %s exists', $destination_path) : sprintf('File %s does not exist', $destination_path);
+      $this->assertIdentical($expected, is_file($destination_path), $message);
+    }
+  }
+
+  /**
+   * The data provider for testing the file destination.
+   *
+   * @return array
+   *   An array of file permutations to test.
+   */
+  protected function localFileDataProvider() {
+    global $base_url;
+    return [
+      // Test a local to local copy.
+      [['filepath' => 'core/modules/simpletest/files/image-test.jpg'], 'public://file1.jpg', TRUE, DRUPAL_ROOT . '/'],
+      // Test a temporary file using an absolute path.
+      [['filepath' => '/tmp/test-file.jpg'], 'temporary://test.jpg', TRUE, ''],
+      // Test a temporary file using a relative path.
+      [['filepath' => 'test-file.jpg'], 'temporary://core/modules/simpletest/files/test.jpg', TRUE, '/tmp/'],
+      // Test a remote path to local.
+      [['filepath' => 'core/modules/simpletest/files/image-test.jpg'], 'public://remote-file.jpg', TRUE, $base_url . '/'],
+      // Test a remote path to local inside a folder that doesn't exist.
+      [['filepath' => 'core/modules/simpletest/files/image-test.jpg'], 'public://folder/remote-file.jpg', TRUE, DRUPAL_ROOT . '/'],
+    ];
+  }
+
+  /**
+   * Test that non-existent files throw an exception.
+   */
+  public function testNonExistentSourceFile() {
+    $destination = '/non/existent/file';
+    try {
+      // If this test passes, doImport() will raise a MigrateException and
+      // we'll never reach fail().
+      $this->doImport(['filepath' => $destination], 'public://wontmatter.jpg');
+      $this->fail('Expected Drupal\migrate\MigrateException when importing ' . $destination);
+    }
+    catch (MigrateException $e) {
+      $this->assertIdentical($e->getMessage(), 'File ' . $destination . ' does not exist.');
+    }
+  }
+
+  /**
+   * Tests various invocations of the writeFile() method.
+   */
+  public function testWriteFile() {
+    $plugin = $this->destination;
+    $method = new \ReflectionMethod($plugin, 'writeFile');
+    $method->setAccessible(TRUE);
+
+    touch('temporary://baz.txt');
+
+    // Moving an actual file should return TRUE.
+    $plugin->configuration['move'] = TRUE;
+    $this->assertTrue($method->invoke($plugin, 'temporary://baz.txt', 'public://foo.txt'));
+
+    // Trying to move a non-existent file should return FALSE.
+    $this->assertFalse($method->invoke($plugin, 'temporary://invalid.txt', 'public://invalid.txt'));
+
+    // Copying over a file that already exists should replace the existing file.
+    $plugin->configuration['move'] = FALSE;
+    touch('temporary://baz.txt');
+    $this->assertTrue($method->invoke($plugin, 'temporary://baz.txt', 'public://foo.txt'));
+    // Copying over a file that already exists should rename the resulting file
+    // if FILE_EXISTS_RENAME is specified.
+    $method->invoke($plugin, 'temporary://baz.txt', 'public://foo.txt', FILE_EXISTS_RENAME);
+    $this->assertTrue(file_exists('public://foo_0.txt'));
+
+    // Trying to copy a non-existent file should return FALSE.
+    $this->assertFalse($method->invoke($plugin, 'temporary://invalid.txt', 'public://invalid.txt'));
+  }
+
+  /**
+   * Tests various invocations of the getOverwriteMode() method.
+   */
+  public function testGetOverwriteMode() {
+    $plugin = $this->destination;
+    $method = new \ReflectionMethod($plugin, 'getOverwriteMode');
+    $method->setAccessible(TRUE);
+
+    $row = new Row([], []);
+    // If the plugin is not configured to rename the destination file, we should
+    // always get FILE_EXISTS_REPLACE.
+    $this->assertIdentical(FILE_EXISTS_REPLACE, $method->invoke($plugin, $row));
+
+    // When the plugin IS configured to rename the destination file, it should
+    // return FILE_EXISTS_RENAME if the destination entity already exists,
+    // and FILE_EXISTS_REPLACE otherwise.
+    $plugin->configuration['rename'] = TRUE;
+    $plugin->storage = \Drupal::entityManager()->getStorage('file');
+    /** @var \Drupal\file\FileInterface $file */
+    $file = $plugin->storage->create();
+    touch('public://foo.txt');
+    $file->setFileUri('public://foo.txt');
+    $file->save();
+    $row->setDestinationProperty($plugin->storage->getEntityType()->getKey('id'), $file->id());
+    $this->assertIdentical(FILE_EXISTS_RENAME, $method->invoke($plugin, $row));
+    unlink('public://foo.txt');
+  }
+
+  /**
+   * Tests various invocations of the getDirectory() method.
+   */
+  public function testGetDirectory() {
+    $plugin = $this->destination;
+    $method = new \ReflectionMethod($plugin, 'getDirectory');
+    $method->setAccessible(TRUE);
+
+    $this->assertEqual('public://foo', $method->invoke($plugin, 'public://foo/baz.txt'));
+    $this->assertEqual('/path/to', $method->invoke($plugin, '/path/to/foo.txt'));
+    // A directory like public:// (no path) needs to resolve to a physical path.
+    $fs = \Drupal::getContainer()->get('file_system');
+    $this->assertEqual($fs->realpath(Settings::get('file_public_path')), $method->invoke($plugin, 'public://foo.txt'));
+  }
+
+  /**
+   * Tests various invocations of the isLocationUnchanged() method.
+   */
+  public function testIsLocationUnchanged() {
+    $plugin = $this->destination;
+    $method = new \ReflectionMethod($plugin, 'isLocationUnchanged');
+    $method->setAccessible(TRUE);
+
+    $public_dir = Settings::get('file_public_path');
+
+    // Due to the limitations of realpath(), the source file must exist.
+    touch('public://foo.txt');
+    $this->assertTrue($method->invoke($plugin, $public_dir . '/foo.txt', 'public://foo.txt'));
+    unlink('public://foo.txt');
+
+    $temporary_file = '/tmp/foo.txt';
+    touch($temporary_file);
+    $this->assertTrue($method->invoke($plugin, $temporary_file, 'temporary://foo.txt'));
+    unlink($temporary_file);
+  }
+
+  /**
+   * Tests various invocations of the isLocalUri() method.
+   */
+  public function testIsLocalUri() {
+    $plugin = $this->destination;
+    $method = new \ReflectionMethod($plugin, 'isLocalUri');
+    $method->setAccessible(TRUE);
+
+    $this->assertTrue($method->invoke($plugin, 'public://foo.txt'));
+    $this->assertTrue($method->invoke($plugin, 'public://path/to/foo.txt'));
+    $this->assertTrue($method->invoke($plugin, 'temporary://foo.txt'));
+    $this->assertTrue($method->invoke($plugin, 'temporary://path/to/foo.txt'));
+    $this->assertTrue($method->invoke($plugin, 'foo.txt'));
+    $this->assertTrue($method->invoke($plugin, '/path/to/files/foo.txt'));
+    $this->assertTrue($method->invoke($plugin, 'relative/path/to/foo.txt'));
+    $this->assertFalse($method->invoke($plugin, 'http://www.example.com/foo.txt'));
+  }
+
+  /**
+   * Do an import using the destination.
+   *
+   * @param array $row_values
+   *   An array of row values.
+   * @param string $destination_path
+   *   The destination path to copy to.
+   * @param string $source_base_path
+   *   The source base path.
+   * @return array
+   *   An array of saved entities ids.
+   *
+   * @throws \Drupal\migrate\MigrateException
+   */
+  protected function doImport($row_values, $destination_path, $source_base_path = '') {
+    $row = new Row($row_values, []);
+    $row->setDestinationProperty('uri', $destination_path);
+    $this->destination->configuration['source_base_path'] = $source_base_path;
+
+    // Importing asserts there are no errors, then we just check the file has
+    // been copied into place.
+    return $this->destination->import($row, array());
+  }
+
+}
+
+class TestEntityFile extends EntityFile {
+
+  /**
+   * This is needed to be passed to $this->save().
+   *
+   * @var \Drupal\Core\Entity\ContentEntityInterface
+   */
+  public $mockEntity;
+
+  /**
+   * Make this public for easy writing during tests.
+   *
+   * @var array
+   */
+  public $configuration;
+
+  /**
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  public $storage;
+
+  /**
+   * @var \Drupal\Core\StreamWrapper\StreamWrapperManagerInterface
+   */
+  public $streamWrapperManager;
+
+  /**
+   * @var \Drupal\Core\File\FileSystemInterface
+   */
+  public $fileSystem;
+
+  public function __construct($configuration) {
+    $configuration +=  array(
+      'source_base_path' => '',
+      'source_path_property' => 'filepath',
+      'destination_path_property' => 'uri',
+      'move' => FALSE,
+      'urlencode' => FALSE,
+    );
+    $this->configuration = $configuration;
+    // We need a mock entity to be passed to save to prevent strict exceptions.
+    $this->mockEntity = EntityTest::create();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getEntity(Row $row, array $old_destination_id_values) {
+    return $this->mockEntity;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function save(ContentEntityInterface $entity, array $old_destination_id_values = array()) {}
+
+}
diff --git a/core/modules/migrate/tests/src/Unit/destination/EntityFileTest.php b/core/modules/migrate/tests/src/Unit/destination/EntityFileTest.php
deleted file mode 100644
index 731c722da0759a45c1fc1fa88316c77a34b46428..0000000000000000000000000000000000000000
--- a/core/modules/migrate/tests/src/Unit/destination/EntityFileTest.php
+++ /dev/null
@@ -1,160 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Tests\migrate\Unit\destination\EntityFileTest.
- */
-
-namespace Drupal\Tests\migrate\Unit\destination;
-
-use Drupal\migrate\Row;
-use Drupal\migrate\Plugin\migrate\destination\EntityFile;
-use Drupal\simpletest\KernelTestBase;
-use Drupal\Core\Entity\ContentEntityInterface;
-use Drupal\entity_test\Entity\EntityTest;
-use Drupal\migrate\MigrateException;
-
-/**
- * Tests the entity file destination plugin.
- *
- * @group migrate
- */
-class EntityFileTest extends KernelTestBase {
-
-  /**
-   * Modules to install.
-   *
-   * @var array
-   */
-  public static $modules = array('system', 'entity_test', 'user');
-
-  /**
-   * @var \Drupal\Tests\migrate\Unit\destination\TestEntityFile $destination
-   */
-  protected $destination;
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setUp() {
-    parent::setUp();
-    $this->destination = new TestEntityFile([]);
-
-    $this->installConfig(['system']);
-    file_put_contents('/tmp/test-file.jpg', '');
-  }
-
-  /**
-   * Test successful imports/copies.
-   */
-  public function testSuccessfulCopies() {
-    foreach ($this->localFileDataProvider() as $data) {
-      list($row_values, $destination_path, $expected, $source_base_path) = $data;
-
-      $this->doImport($row_values, $destination_path, $source_base_path);
-      $message = $expected ? sprintf('File %s exists', $destination_path) : sprintf('File %s does not exist', $destination_path);
-      $this->assertIdentical($expected, is_file($destination_path), $message);
-    }
-  }
-
-  /**
-   * The data provider for testing the file destination.
-   *
-   * @return array
-   *   An array of file permutations to test.
-   */
-  protected function localFileDataProvider() {
-    global $base_url;
-    return [
-      // Test a local to local copy.
-      [['filepath' => 'core/modules/simpletest/files/image-test.jpg'], 'public://file1.jpg', TRUE, DRUPAL_ROOT . '/'],
-      // Test a temporary file using an absolute path.
-      [['filepath' => '/tmp/test-file.jpg'], 'temporary://test.jpg', TRUE, ''],
-      // Test a remote path to local.
-      [['filepath' => 'core/modules/simpletest/files/image-test.jpg'], 'public://remote-file.jpg', TRUE, $base_url . '/'],
-      // Test a remote path to local inside a folder that doesn't exist.
-      [['filepath' => 'core/modules/simpletest/files/image-test.jpg'], 'public://folder/remote-file.jpg', TRUE, DRUPAL_ROOT . '/'],
-    ];
-  }
-
-
-  /**
-   * Test that non-existent files throw an exception.
-   */
-  public function testNonExistentSourceFile() {
-    try {
-      $this->doImport(['filepath' => '/none/existent/file'], 'public://wontmatter.jpg');
-    }
-    catch (MigrateException $e) {}
-    $destination = '/none/existent/file';
-    $this->assertIdentical($e->getMessage(), 'File <em class="placeholder">' . $destination . '</em> could not be copied to <em class="placeholder">public://wontmatter.jpg</em>.');
-  }
-
-  /**
-   * Do an import using the destination.
-   *
-   * @param array $row_values
-   *   An array of row values.
-   * @param string $destination_path
-   *   The destination path to copy to.
-   * @param string $source_base_path
-   *   The source base path.
-   * @return array
-   *   An array of saved entities ids.
-   *
-   * @throws \Drupal\migrate\MigrateException
-   */
-  protected function doImport($row_values, $destination_path, $source_base_path = '') {
-    $row = new Row($row_values, []);
-    $row->setDestinationProperty('uri', $destination_path);
-    $this->destination->configuration['source_base_path'] = $source_base_path;
-
-    // Importing asserts there are no errors, then we just check the file has
-    // been copied into place.
-    return $this->destination->import($row, array());
-  }
-
-}
-
-class TestEntityFile extends EntityFile {
-
-  /**
-   * This is needed to be passed to $this->save().
-   *
-   * @var \Drupal\Core\Entity\ContentEntityInterface
-   */
-  public $mockEntity;
-
-  /**
-   * Make this public for easy writing during tests.
-   *
-   * @var array
-   */
-  public $configuration;
-
-  public function __construct($configuration) {
-    $configuration +=  array(
-      'source_base_path' => '',
-      'source_path_property' => 'filepath',
-      'destination_path_property' => 'uri',
-      'move' => FALSE,
-      'urlencode' => FALSE,
-    );
-    $this->configuration = $configuration;
-    // We need a mock entity to be passed to save to prevent strict exceptions.
-    $this->mockEntity = EntityTest::create();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getEntity(Row $row, array $old_destination_id_values) {
-    return $this->mockEntity;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function save(ContentEntityInterface $entity, array $old_destination_id_values = array()) {}
-
-}
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateFileTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateFileTest.php
index 68969f13115c9ec772ad66ed09df0c525f60e3d2..353dc0d42666a290385d014052ae8b38b0d898bd 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateFileTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateFileTest.php
@@ -10,7 +10,6 @@
 use Drupal\Component\Utility\Random;
 use Drupal\migrate\MigrateExecutable;
 use Drupal\migrate\Tests\MigrateDumpAlterInterface;
-use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
 use Drupal\Core\Database\Database;
 use Drupal\simpletest\TestBase;
 
@@ -69,6 +68,7 @@ public function testFiles() {
     $this->assertIdentical('public://image-1.png', $file->getFileUri());
     $this->assertIdentical('image/png', $file->getMimeType());
     $this->assertIdentical("1", $file->getOwnerId());
+
     // It is pointless to run the second half from MigrateDrupal6Test.
     if (empty($this->standalone)) {
       return;