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

// @dart = 2.9

import "package:expect/expect.dart";

void testUriCombi() {
  var schemes = ["", "file", "ws", "ftp"];
  var fragments = ["", "#", "#f", "#fragment", "#l:?/"];
  var queries = ["", "?", "?q", "?query", "?q:/"];
  var paths = ["/", "/x", "/x/y", "/x/y/", "/x:y", "x", "x/y", "x/y/"];
  var userInfos = ["", "x", "xxx", "x:4", "xxx:444", "x:4:x"];
  var hosts = ["", "h", "hhh", "h:4", "hhh:444", "[::1.2.3.4]"];

  void check(uriString, scheme, fragment, query, path, user, host) {
    for (var uri in [
      Uri.parse(uriString),
      Uri.parse(">\u{10000}>$uriString<\u{10000}<", 4, uriString.length + 4),
      Uri.parse(
          "http://example.com/$uriString#?:/[]\"", 19, uriString.length + 19),
      Uri.parse(uriString * 3, uriString.length, uriString.length * 2)
    ]) {
      String name = "$uriString -> $uri";
      Expect.equals(scheme, uri.scheme, name);
      var uriFragment = uri.fragment;
      if (fragment.startsWith('#')) uriFragment = "#$uriFragment";
      Expect.equals(fragment, uriFragment, name);
      var uriQuery = uri.query;
      if (query.startsWith('?')) uriQuery = "?$uriQuery";
      Expect.equals(query, uriQuery, name);
      Expect.equals(path, uri.path, name);
      Expect.equals(user, uri.userInfo, name);
      var uriHost = uri.host;
      if (host.startsWith("[")) uriHost = "[$uriHost]";
      if (uri.port != 0) uriHost += ":${uri.port}";
      Expect.equals(host, uriHost, name);
    }
  }

  for (var scheme in schemes) {
    for (var fragment in fragments) {
      for (var query in queries) {
        for (var path in paths) {
          // File scheme URIs always get a leading slash.
          if (scheme == "file" && !path.startsWith('/')) continue;
          for (var user in userInfos) {
            for (var host in hosts) {
              var auth = host;
              var s = scheme;
              if (user.isNotEmpty) auth = "$user@$auth";
              if (auth.isNotEmpty) auth = "//$auth";
              if (auth.isNotEmpty && !path.startsWith('/')) continue;
              check(
                  "$scheme${scheme.isEmpty ? "" : ":"}"
                  "$auth$path$query$fragment",
                  scheme,
                  fragment,
                  query,
                  path,
                  user,
                  host);
            }
          }
        }
      }
    }
  }
}

void main() {
  testUriCombi();
}
