// Copyright (c) 2015, 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.

import "dart:io";
import "package:expect/expect.dart";

testFile(String input) {
  if (Platform.isWindows) {
    input = input.replaceAll('/', '\\');
  }
  var file = new File(input);
  var uri = file.uri;
  var file2 = new File.fromUri(uri);
  Expect.equals(file.path, file2.path, input);
}

testDirectory(String input, [String output]) {
  if (output == null) output = input;
  if (Platform.isWindows) {
    input = input.replaceAll('/', '\\');
    output = output.replaceAll('/', '\\');
  }
  var dir = new Directory(input);
  var uri = dir.uri;
  var dir2 = new Directory.fromUri(uri);
  Expect.equals(output, dir2.path, input);
}

void main() {
  testFile("");
  testFile("/");
  testFile("foo/bar");
  testFile("/foo/bar");
  testFile("/foo/bar/");

  testDirectory("");
  testDirectory("/");
  testDirectory("foo/bar", "foo/bar/");
  testDirectory("/foo/bar", "/foo/bar/");
  testDirectory("/foo/bar/");
}
