// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

/// @assertion Future<File> copy(String newPath)
/// Copy this file. Returns a Future<File> that completes with a File instance
/// for the copied file.
///
/// If newPath identifies an existing file, that file is replaced. If newPath
/// identifies an existing directory, the operation fails and the future
/// completes with an exception.
/// @description Checks that this method copies the file
/// @author sgrekhov@unipro.ru

import "dart:io";
import "../../../Utils/expect.dart";
import "../file_utils.dart";

main() async {
  await inSandbox(_main);
}

_main(Directory sandbox) async {
  File file = getTempFileSync(parent: sandbox);
  asyncStart();
  String newPath = getTempFilePath(parent: sandbox);
  await file.copy(newPath).then((File copied) {
    Expect.equals(newPath, copied.path);
    Expect.isTrue(copied.existsSync());
    asyncEnd();
  });
}
