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

#include "vm/uri.h"
#include "vm/unit_test.h"

namespace dart {

TEST_CASE(ParseUri_WithScheme_NoQueryNoUser) {
  ParsedUri uri;
  EXPECT(ParseUri("foo://example.com:8042/over/there", &uri));
  EXPECT_STREQ("foo", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT_STREQ("example.com", uri.host);
  EXPECT_STREQ("8042", uri.port);
  EXPECT_STREQ("/over/there", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_WithScheme_WithQuery) {
  ParsedUri uri;
  EXPECT(ParseUri("foo://example.com:8042/over/there?name=ferret", &uri));
  EXPECT_STREQ("foo", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT_STREQ("example.com", uri.host);
  EXPECT_STREQ("8042", uri.port);
  EXPECT_STREQ("/over/there", uri.path);
  EXPECT_STREQ("name=ferret", uri.query);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_WithScheme_WithFragment) {
  ParsedUri uri;
  EXPECT(ParseUri("foo://example.com:8042/over/there#fragment", &uri));
  EXPECT_STREQ("foo", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT_STREQ("example.com", uri.host);
  EXPECT_STREQ("8042", uri.port);
  EXPECT_STREQ("/over/there", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT_STREQ("fragment", uri.fragment);
}


TEST_CASE(ParseUri_WithScheme_WithQueryWithFragment) {
  ParsedUri uri;
  EXPECT(ParseUri("foo://example.com:8042/over/there?name=ferret#fragment",
                  &uri));
  EXPECT_STREQ("foo", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT_STREQ("example.com", uri.host);
  EXPECT_STREQ("8042", uri.port);
  EXPECT_STREQ("/over/there", uri.path);
  EXPECT_STREQ("name=ferret", uri.query);
  EXPECT_STREQ("fragment", uri.fragment);
}


TEST_CASE(ParseUri_WithScheme_WithUser) {
  ParsedUri uri;
  EXPECT(ParseUri("foo://user@example.com:8042/over/there", &uri));
  EXPECT_STREQ("foo", uri.scheme);
  EXPECT_STREQ("user", uri.userinfo);
  EXPECT_STREQ("example.com", uri.host);
  EXPECT_STREQ("8042", uri.port);
  EXPECT_STREQ("/over/there", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_WithScheme_ShortPath) {
  ParsedUri uri;
  EXPECT(ParseUri("foo://example.com:8042/", &uri));
  EXPECT_STREQ("foo", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT_STREQ("example.com", uri.host);
  EXPECT_STREQ("8042", uri.port);
  EXPECT_STREQ("/", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_WithScheme_EmptyPath) {
  ParsedUri uri;
  EXPECT(ParseUri("foo://example.com:8042", &uri));
  EXPECT_STREQ("foo", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT_STREQ("example.com", uri.host);
  EXPECT_STREQ("8042", uri.port);
  EXPECT_STREQ("", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_WithScheme_Rootless1) {
  ParsedUri uri;
  EXPECT(ParseUri("foo:here", &uri));
  EXPECT_STREQ("foo", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("here", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_WithScheme_Rootless2) {
  ParsedUri uri;
  EXPECT(ParseUri("foo:or/here", &uri));
  EXPECT_STREQ("foo", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("or/here", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_NoScheme_AbsPath_WithAuthority) {
  ParsedUri uri;
  EXPECT(ParseUri("//example.com:8042/over/there", &uri));
  EXPECT(uri.scheme == NULL);
  EXPECT(uri.userinfo == NULL);
  EXPECT_STREQ("example.com", uri.host);
  EXPECT_STREQ("8042", uri.port);
  EXPECT_STREQ("/over/there", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_NoScheme_AbsPath_NoAuthority) {
  ParsedUri uri;
  EXPECT(ParseUri("/over/there", &uri));
  EXPECT(uri.scheme == NULL);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("/over/there", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


// Colons are permitted in path segments, in many cases.
TEST_CASE(ParseUri_NoScheme_AbsPath_StrayColon) {
  ParsedUri uri;
  EXPECT(ParseUri("/ov:er/there", &uri));
  EXPECT(uri.scheme == NULL);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("/ov:er/there", uri.path);
  EXPECT(uri.query == NULL);
}


TEST_CASE(ParseUri_NoScheme_Rootless1) {
  ParsedUri uri;
  EXPECT(ParseUri("here", &uri));
  EXPECT(uri.scheme == NULL);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("here", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_NoScheme_Rootless2) {
  ParsedUri uri;
  EXPECT(ParseUri("or/here", &uri));
  EXPECT(uri.scheme == NULL);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("or/here", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_NoScheme_Empty) {
  ParsedUri uri;
  EXPECT(ParseUri("", &uri));
  EXPECT(uri.scheme == NULL);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_NoScheme_QueryOnly) {
  ParsedUri uri;
  EXPECT(ParseUri("?name=ferret", &uri));
  EXPECT(uri.scheme == NULL);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("", uri.path);
  EXPECT_STREQ("name=ferret", uri.query);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_NoScheme_FragmentOnly) {
  ParsedUri uri;
  EXPECT(ParseUri("#fragment", &uri));
  EXPECT(uri.scheme == NULL);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT_STREQ("fragment", uri.fragment);
}


TEST_CASE(ParseUri_LowerCaseScheme) {
  ParsedUri uri;
  EXPECT(ParseUri("ScHeMe:path", &uri));
  EXPECT_STREQ("scheme", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("path", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_NormalizeEscapes_PathQueryFragment) {
  ParsedUri uri;
  EXPECT(ParseUri(
      "scheme:/This%09Is A P%61th?This%09Is A Qu%65ry#A Fr%61gment", &uri));
  EXPECT_STREQ("scheme", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("/This%09Is%20A%20Path", uri.path);
  EXPECT_STREQ("This%09Is%20A%20Query", uri.query);
  EXPECT_STREQ("A%20Fragment", uri.fragment);
}


TEST_CASE(ParseUri_NormalizeEscapes_UppercaseEscapesPreferred) {
  ParsedUri uri;
  EXPECT(ParseUri(
      "scheme:/%1b%1B", &uri));
  EXPECT_STREQ("scheme", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("/%1B%1B", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_NormalizeEscapes_Authority) {
  ParsedUri uri;
  EXPECT(ParseUri(
      "scheme://UsEr N%61%4de@h%4FsT.c%6fm:80/", &uri));
  EXPECT_STREQ("scheme", uri.scheme);
  EXPECT_STREQ("UsEr%20NaMe", uri.userinfo);  // Normalized, case preserved.
  EXPECT_STREQ("host.com", uri.host);         // Normalized, lower-cased.
  EXPECT_STREQ("80", uri.port);
  EXPECT_STREQ("/", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_NormalizeEscapes_UppercaseEscapeInHost) {
  ParsedUri uri;
  EXPECT(ParseUri("scheme://tEst%1b/", &uri));
  EXPECT_STREQ("scheme", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT_STREQ("test%1B", uri.host);  // Notice that %1B is upper-cased.
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("/", uri.path);
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ParseUri_BrokenEscapeSequence) {
  ParsedUri uri;
  EXPECT(ParseUri(
      "scheme:/%1g", &uri));
  EXPECT_STREQ("scheme", uri.scheme);
  EXPECT(uri.userinfo == NULL);
  EXPECT(uri.host == NULL);
  EXPECT(uri.port == NULL);
  EXPECT_STREQ("/%1g", uri.path);  // Broken sequence is unchanged.
  EXPECT(uri.query == NULL);
  EXPECT(uri.fragment == NULL);
}


TEST_CASE(ResolveUri_WithScheme_NoAuthorityNoQuery) {
  const char* target_uri;
  EXPECT(ResolveUri("rscheme:/ref/path",
                    "bscheme://buser@bhost:11/base/path?baseQuery",
                    &target_uri));
  EXPECT_STREQ("rscheme:/ref/path", target_uri);
}


TEST_CASE(ResolveUri_WithScheme_WithAuthorityWithQuery) {
  const char* target_uri;
  EXPECT(ResolveUri("rscheme://ruser@rhost:22/ref/path?refQuery",
                    "bscheme://buser@bhost:11/base/path?baseQuery",
                    &target_uri));
  EXPECT_STREQ("rscheme://ruser@rhost:22/ref/path?refQuery", target_uri);
}


TEST_CASE(ResolveUri_NoScheme_WithAuthority) {
  const char* target_uri;
  EXPECT(ResolveUri("//ruser@rhost:22/ref/path",
                    "bscheme://buser@bhost:11/base/path?baseQuery",
                    &target_uri));
  EXPECT_STREQ("bscheme://ruser@rhost:22/ref/path", target_uri);
}


TEST_CASE(ResolveUri_NoSchemeNoAuthority_AbsolutePath) {
  const char* target_uri;
  EXPECT(ResolveUri("/ref/path",
                    "bscheme://buser@bhost:11/base/path?baseQuery",
                    &target_uri));
  EXPECT_STREQ("bscheme://buser@bhost:11/ref/path", target_uri);
}


TEST_CASE(ResolveUri_NoSchemeNoAuthority_RelativePath) {
  const char* target_uri;
  EXPECT(ResolveUri("ref/path",
                    "bscheme://buser@bhost:11/base/path?baseQuery",
                    &target_uri));
  EXPECT_STREQ("bscheme://buser@bhost:11/base/ref/path", target_uri);
}


TEST_CASE(ResolveUri_NoSchemeNoAuthority_RelativePathEmptyBasePath) {
  const char* target_uri;
  EXPECT(ResolveUri("ref/path",
                    "bscheme://buser@bhost:11",
                    &target_uri));
  EXPECT_STREQ("bscheme://buser@bhost:11/ref/path", target_uri);
}


TEST_CASE(ResolveUri_NoSchemeNoAuthority_RelativePathWeirdBasePath) {
  const char* target_uri;
  EXPECT(ResolveUri("ref/path",
                    "bscheme:base",
                    &target_uri));
  EXPECT_STREQ("bscheme:ref/path", target_uri);
}


TEST_CASE(ResolveUri_NoSchemeNoAuthority_EmptyPath) {
  const char* target_uri;
  EXPECT(ResolveUri("",
                    "bscheme://buser@bhost:11/base/path?baseQuery#bfragment",
                    &target_uri));
  // Note that we drop the base fragment from the resolved uri.
  EXPECT_STREQ("bscheme://buser@bhost:11/base/path?baseQuery", target_uri);
}


TEST_CASE(ResolveUri_NoSchemeNoAuthority_EmptyPathWithQuery) {
  const char* target_uri;
  EXPECT(ResolveUri("?refQuery",
                    "bscheme://buser@bhost:11/base/path?baseQuery#bfragment",
                    &target_uri));
  EXPECT_STREQ("bscheme://buser@bhost:11/base/path?refQuery", target_uri);
}


TEST_CASE(ResolveUri_NoSchemeNoAuthority_EmptyPathWithFragment) {
  const char* target_uri;
  EXPECT(ResolveUri("#rfragment",
                    "bscheme://buser@bhost:11/base/path?baseQuery#bfragment",
                    &target_uri));
  EXPECT_STREQ("bscheme://buser@bhost:11/base/path?baseQuery#rfragment",
               target_uri);
}


TEST_CASE(ResolveUri_RemoveDots_RemoveOneDotSegment) {
  const char* target_uri;
  EXPECT(ResolveUri("./refpath",
                    "scheme://auth/a/b/c/d",
                    &target_uri));
  EXPECT_STREQ("scheme://auth/a/b/c/refpath", target_uri);
}


TEST_CASE(ResolveUri_RemoveDots_RemoveTwoDotSegments) {
  const char* target_uri;
  EXPECT(ResolveUri("././refpath",
                    "scheme://auth/a/b/c/d",
                    &target_uri));
  EXPECT_STREQ("scheme://auth/a/b/c/refpath", target_uri);
}


TEST_CASE(ResolveUri_RemoveDots_RemoveOneDotDotSegment) {
  const char* target_uri;
  EXPECT(ResolveUri("../refpath",
                    "scheme://auth/a/b/c/d",
                    &target_uri));
  EXPECT_STREQ("scheme://auth/a/b/refpath", target_uri);
}


TEST_CASE(ResolveUri_RemoveDots_RemoveTwoDotDotSegments) {
  const char* target_uri;
  EXPECT(ResolveUri("../../refpath",
                    "scheme://auth/a/b/c/d",
                    &target_uri));
  EXPECT_STREQ("scheme://auth/a/refpath", target_uri);
}


TEST_CASE(ResolveUri_RemoveDots_RemoveTooManyDotDotSegments) {
  const char* target_uri;
  EXPECT(ResolveUri("../../../../../../../../../refpath",
                    "scheme://auth/a/b/c/d",
                    &target_uri));
  EXPECT_STREQ("scheme://auth/refpath", target_uri);
}


TEST_CASE(ResolveUri_RemoveDots_RemoveDotSegmentsNothingLeft1) {
  const char* target_uri;
  EXPECT(ResolveUri("../../../../..",
                    "scheme://auth/a/b/c/d",
                    &target_uri));
  EXPECT_STREQ("scheme://auth/", target_uri);
}



TEST_CASE(ResolveUri_RemoveDots_RemoveDotSegmentsNothingLeft2) {
  const char* target_uri;
  EXPECT(ResolveUri(".",
                    "scheme://auth/",
                    &target_uri));
  EXPECT_STREQ("scheme://auth/", target_uri);
}



TEST_CASE(ResolveUri_RemoveDots_RemoveDotSegmentsInitialPrefix) {
  const char* target_uri;
  EXPECT(ResolveUri("../../../../refpath",
                    "scheme://auth",
                    &target_uri));
  EXPECT_STREQ("scheme://auth/refpath", target_uri);
}



TEST_CASE(ResolveUri_RemoveDots_RemoveDotSegmentsMixed) {
  const char* target_uri;
  EXPECT(ResolveUri("../../1/./2/../3/4/../5/././6/../7",
                    "scheme://auth/a/b/c/d/e",
                    &target_uri));
  EXPECT_STREQ("scheme://auth/a/b/1/3/5/7", target_uri);
}


TEST_CASE(ResolveUri_NormalizeEscapes_PathQueryFragment) {
  const char* target_uri;
  EXPECT(ResolveUri("#A Fr%61gment",
                    "scheme:/This%09Is A P%61th?This%09Is A Qu%65ry",
                    &target_uri));
  EXPECT_STREQ(
      "scheme:/This%09Is%20A%20Path?This%09Is%20A%20Query#A%20Fragment",
      target_uri);
}


TEST_CASE(ResolveUri_NormalizeEscapes_UppercaseHexPreferred) {
  const char* target_uri;
  EXPECT(ResolveUri("",
                    "scheme:/%1b%1B",
                    &target_uri));
  EXPECT_STREQ("scheme:/%1B%1B",
               target_uri);
}


TEST_CASE(ResolveUri_NormalizeEscapes_Authority) {
  const char* target_uri;
  EXPECT(ResolveUri("",
                    "scheme://UsEr N%61%4de@h%4FsT.c%6fm:80/",
                    &target_uri));
  // userinfo is normalized and case is preserved.  host is normalized
  // and lower-cased.
  EXPECT_STREQ("scheme://UsEr%20NaMe@host.com:80/", target_uri);
}


TEST_CASE(ResolveUri_NormalizeEscapes_BrokenEscapeSequence) {
  const char* target_uri;
  EXPECT(ResolveUri("",
                    "scheme:/%1g",
                    &target_uri));
  // We don't change broken escape sequences.
  EXPECT_STREQ("scheme:/%1g",
               target_uri);
}


TEST_CASE(ResolveUri_DataUri) {
  const char* data_uri =
      "data:application/dart;charset=utf-8,%20%20%20%20%20%20%20%20import%20%22dart:isolate%22;%0A%0A%20%20%20%20%20%20%20%20import%20%22package:stream_channel/stream_channel.dart%22;%0A%0A%20%20%20%20%20%20%20%20import%20%22package:test/src/runner/plugin/remote_platform_helpers.dart%22;%0A%20%20%20%20%20%20%20%20import%20%22package:test/src/runner/vm/catch_isolate_errors.dart%22;%0A%0A%20%20%20%20%20%20%20%20import%20%22file:///home/sra/xxxx/dev_compiler/test/all_tests.dart%22%20as%20test;%0A%0A%20%20%20%20%20%20%20%20void%20main(_,%20SendPort%20message)%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20channel%20=%20serializeSuite(()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20catchIsolateErrors();%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20test.main;%0A%20%20%20%20%20%20%20%20%20%20%7D);%0A%20%20%20%20%20%20%20%20%20%20new%20IsolateChannel.connectSend(message).pipe(channel);%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20";  // NOLINT

  const char* target_uri;
  EXPECT(ResolveUri(data_uri,
                    "bscheme://buser@bhost:11/base/path?baseQuery#bfragment",
                    &target_uri));
  EXPECT_STREQ(data_uri, target_uri);
}

// dart:core Uri allows for the base url to be relative (no scheme, no
// authory, relative path) but this behavior is not in RFC 3986.  We
// do not implement this.
TEST_CASE(ResolveUri_RelativeBase_NotImplemented) {
  const char* target_uri;
  EXPECT(!ResolveUri("../r1", "b1/b2", &target_uri));
  EXPECT(target_uri == NULL);

  EXPECT(!ResolveUri("..", "b1/b2", &target_uri));
  EXPECT(target_uri == NULL);

  EXPECT(!ResolveUri("../..", "b1/b2", &target_uri));
  EXPECT(target_uri == NULL);

  EXPECT(!ResolveUri("../../..", "b1/b2", &target_uri));
  EXPECT(target_uri == NULL);

  EXPECT(!ResolveUri("../../../r1", "b1/b2", &target_uri));
  EXPECT(target_uri == NULL);

  EXPECT(!ResolveUri("../r1", "../../b1/b2/b3", &target_uri));
  EXPECT(target_uri == NULL);

  EXPECT(!ResolveUri("../../../r1", "../../b1/b2/b3", &target_uri));
  EXPECT(target_uri == NULL);
}


static const char* TestResolve(const char* base_uri, const char* uri) {
  const char* target_uri;
  EXPECT(ResolveUri(uri, base_uri, &target_uri));
  return target_uri;
}


// This test is ported from sdk/tests/corelib/uri_test.dart (testUriPerRFCs).
TEST_CASE(ResolveUri_TestUriPerRFCs) {
  const char* base = "http://a/b/c/d;p?q";

  // From RFC 3986
  EXPECT_STREQ("g:h",                   TestResolve(base, "g:h"));
  EXPECT_STREQ("http://a/b/c/g",        TestResolve(base, "g"));
  EXPECT_STREQ("http://a/b/c/g",        TestResolve(base, "./g"));
  EXPECT_STREQ("http://a/b/c/g/",       TestResolve(base, "g/"));
  EXPECT_STREQ("http://a/g",            TestResolve(base, "/g"));
  EXPECT_STREQ("http://g",              TestResolve(base, "//g"));
  EXPECT_STREQ("http://a/b/c/d;p?y",    TestResolve(base, "?y"));
  EXPECT_STREQ("http://a/b/c/g?y",      TestResolve(base, "g?y"));
  EXPECT_STREQ("http://a/b/c/d;p?q#s",  TestResolve(base, "#s"));
  EXPECT_STREQ("http://a/b/c/g#s",      TestResolve(base, "g#s"));
  EXPECT_STREQ("http://a/b/c/g?y#s",    TestResolve(base, "g?y#s"));
  EXPECT_STREQ("http://a/b/c/;x",       TestResolve(base, ";x"));
  EXPECT_STREQ("http://a/b/c/g;x",      TestResolve(base, "g;x"));
  EXPECT_STREQ("http://a/b/c/g;x?y#s",  TestResolve(base, "g;x?y#s"));
  EXPECT_STREQ("http://a/b/c/d;p?q",    TestResolve(base, ""));
  EXPECT_STREQ("http://a/b/c/",         TestResolve(base, "."));
  EXPECT_STREQ("http://a/b/c/",         TestResolve(base, "./"));
  EXPECT_STREQ("http://a/b/",           TestResolve(base, ".."));
  EXPECT_STREQ("http://a/b/",           TestResolve(base, "../"));
  EXPECT_STREQ("http://a/b/g",          TestResolve(base, "../g"));
  EXPECT_STREQ("http://a/",             TestResolve(base, "../.."));
  EXPECT_STREQ("http://a/",             TestResolve(base, "../../"));
  EXPECT_STREQ("http://a/g",            TestResolve(base, "../../g"));
  EXPECT_STREQ("http://a/g",            TestResolve(base, "../../../g"));
  EXPECT_STREQ("http://a/g",            TestResolve(base, "../../../../g"));
  EXPECT_STREQ("http://a/g",            TestResolve(base, "/./g"));
  EXPECT_STREQ("http://a/g",            TestResolve(base, "/../g"));
  EXPECT_STREQ("http://a/b/c/g.",       TestResolve(base, "g."));
  EXPECT_STREQ("http://a/b/c/.g",       TestResolve(base, ".g"));
  EXPECT_STREQ("http://a/b/c/g..",      TestResolve(base, "g.."));
  EXPECT_STREQ("http://a/b/c/..g",      TestResolve(base, "..g"));
  EXPECT_STREQ("http://a/b/g",          TestResolve(base, "./../g"));
  EXPECT_STREQ("http://a/b/c/g/",       TestResolve(base, "./g/."));
  EXPECT_STREQ("http://a/b/c/g/h",      TestResolve(base, "g/./h"));
  EXPECT_STREQ("http://a/b/c/h",        TestResolve(base, "g/../h"));
  EXPECT_STREQ("http://a/b/c/g;x=1/y",  TestResolve(base, "g;x=1/./y"));
  EXPECT_STREQ("http://a/b/c/y",        TestResolve(base, "g;x=1/../y"));
  EXPECT_STREQ("http://a/b/c/g?y/./x",  TestResolve(base, "g?y/./x"));
  EXPECT_STREQ("http://a/b/c/g?y/../x", TestResolve(base, "g?y/../x"));
  EXPECT_STREQ("http://a/b/c/g#s/./x",  TestResolve(base, "g#s/./x"));
  EXPECT_STREQ("http://a/b/c/g#s/../x", TestResolve(base, "g#s/../x"));
  EXPECT_STREQ("http:g",                TestResolve(base, "http:g"));

  // Additional tests (not from RFC 3986).
  EXPECT_STREQ("http://a/b/g;p/h;s",    TestResolve(base, "../g;p/h;s"));

  base = "s:a/b";
  EXPECT_STREQ("s:/c", TestResolve(base, "../c"));
}


// This test is ported from sdk/tests/corelib/uri_test.dart (testResolvePath).
TEST_CASE(ResolveUri_MoreDotSegmentTests) {
  const char* base = "/";
  EXPECT_STREQ("/a/g",    TestResolve(base, "/a/b/c/./../../g"));
  EXPECT_STREQ("/a/g",    TestResolve(base, "/a/b/c/./../../g"));
  EXPECT_STREQ("/mid/6",  TestResolve(base, "mid/content=5/../6"));
  EXPECT_STREQ("/a/b/e",  TestResolve(base, "a/b/c/d/../../e"));
  EXPECT_STREQ("/a/b/e",  TestResolve(base, "../a/b/c/d/../../e"));
  EXPECT_STREQ("/a/b/e",  TestResolve(base, "./a/b/c/d/../../e"));
  EXPECT_STREQ("/a/b/e",  TestResolve(base, "../a/b/./c/d/../../e"));
  EXPECT_STREQ("/a/b/e",  TestResolve(base, "./a/b/./c/d/../../e"));
  EXPECT_STREQ("/a/b/e/", TestResolve(base, "./a/b/./c/d/../../e/."));
  EXPECT_STREQ("/a/b/e/", TestResolve(base, "./a/b/./c/d/../../e/./."));
  EXPECT_STREQ("/a/b/e/", TestResolve(base, "./a/b/./c/d/../../e/././."));

  #define LH "http://localhost"
  base = LH;
  EXPECT_STREQ(LH "/a/g",    TestResolve(base, "/a/b/c/./../../g"));
  EXPECT_STREQ(LH "/a/g",    TestResolve(base, "/a/b/c/./../../g"));
  EXPECT_STREQ(LH "/mid/6",  TestResolve(base, "mid/content=5/../6"));
  EXPECT_STREQ(LH "/a/b/e",  TestResolve(base, "a/b/c/d/../../e"));
  EXPECT_STREQ(LH "/a/b/e",  TestResolve(base, "../a/b/c/d/../../e"));
  EXPECT_STREQ(LH "/a/b/e",  TestResolve(base, "./a/b/c/d/../../e"));
  EXPECT_STREQ(LH "/a/b/e",  TestResolve(base, "../a/b/./c/d/../../e"));
  EXPECT_STREQ(LH "/a/b/e",  TestResolve(base, "./a/b/./c/d/../../e"));
  EXPECT_STREQ(LH "/a/b/e/", TestResolve(base, "./a/b/./c/d/../../e/."));
  EXPECT_STREQ(LH "/a/b/e/", TestResolve(base, "./a/b/./c/d/../../e/./."));
  EXPECT_STREQ(LH "/a/b/e/", TestResolve(base, "./a/b/./c/d/../../e/././."));
  #undef LH
}

}  // namespace dart
