// 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 Uri resolveUri(Uri reference)
 * Resolve reference as an URI relative to this.
 * ...
 * Updated to handle the case where the base URI is just a relative path - that
 * is: when it has no scheme or authority and the path does not start with a
 * slash. In that case, the paths are combined without removing leading "..",
 * and an empty path is not converted to "/".
 *
 * @description Checks that when it has no scheme or authority and the path does
 * not start with a slash. In that case, the paths are combined without removing
 * leading "..", and an empty path is not converted to "/"
 * (see https://tools.ietf.org/html/rfc3986#section-5.2.2)
 * @author sgrekhov@unipro.ru
 */
import "../../../Utils/expect.dart";

main() {
  var x = Uri.parse('a/b/c');
  Expect.equals(Uri.parse('a/z'), x.resolveUri(new Uri(path: '../z')));
  Expect.equals(Uri.parse('a/b/c'), x.resolveUri(new Uri(path: '')));

  x = Uri.parse('a/b/c/');
  Expect.equals(Uri.parse('a/b/c/'), x.resolveUri(new Uri(path: '')));
}
