// 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 factory Uri.file(String path, {bool windows})
/// Creates a new file URI from an absolute or relative file path.
/// ...
/// @description Checks that scheme is added for absolute paths
/// @issue 28659
/// @author sgrekhov@unipro.ru

import "../../../Utils/expect.dart";

main() {
  Uri uri = new Uri.directory(r"/xxx/yyy", windows: false);
  Expect.equals(r"/xxx/yyy/", uri.path);
  Expect.equals("file", uri.scheme);

  uri = new Uri.directory(r"/xxx/yyy", windows: true);
  Expect.equals(r"/xxx/yyy/", uri.path);
  Expect.equals("file", uri.scheme);

  uri = new Uri.directory(r"C:\xxx\yyy", windows: true);
  Expect.equals(r"/C:/xxx/yyy/", uri.path);
  Expect.equals("file", uri.scheme);

  uri = new Uri.directory(r"\xxx\yyy", windows: true);
  Expect.equals(r"/xxx/yyy/", uri.path);
  Expect.equals("file", uri.scheme);

  uri = new Uri.directory(r"\xxx\yyy", windows: true);
  Expect.equals(r"/xxx/yyy/", uri.path);
  Expect.equals("file", uri.scheme);

  uri = new Uri.directory(r"\\server\share\file", windows: true);
  Expect.equals(r"/share/file/", uri.path);
  Expect.equals(r"server", uri.host);
  Expect.equals("file", uri.scheme);
}
