// 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.

/// @assertion File.fromUri(Uri uri)
/// Create a File object from a URI.
///
/// If uri cannot reference a file this throws UnsupportedError.
/// @description Checks that this constructor creates a File object from a
/// URI.
/// @author sgrekhov@unipro.ru

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

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

void _main(Directory sandbox) {
  File tmp = getTempFileSync(parent: sandbox);
  Directory tmpDir = getTempDirectorySync(parent: sandbox);
  Uri uri = new Uri.file(tmp.path);
  File file = new File.fromUri(uri);
  Expect.equals(tmp.path, file.path);

  String dirName = getTempDirectoryName();
  uri = new Uri.directory(
      Directory.current.path + Platform.pathSeparator + dirName);
  file = new File.fromUri(uri);
  Expect.equals(
      Directory.current.path +
          Platform.pathSeparator +
          dirName +
          Platform.pathSeparator,
      file.path);

  uri = new Uri.file(tmpDir.path);
  file = new File.fromUri(uri);
  Expect.equals(tmpDir.path, file.path);
}
