// Copyright (c) 2013, 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 "dart:io";
import "package:expect/expect.dart";

expect(expected, String uri, environment) {
  Expect.equals(
      expected,
      HttpClient.findProxyFromEnvironment(Uri.parse(uri),
          environment: environment));
}

expectDirect(String uri, Map<String, String> environment) {
  Expect.equals(
      "DIRECT",
      HttpClient.findProxyFromEnvironment(Uri.parse(uri),
          environment: environment));
}

main() {
  expectDirect("http://www.google.com", {});
  expectDirect("http://www.google.com", {"http_proxy": ""});
  expectDirect("http://www.google.com", {"http_proxy": " "});

  expect("PROXY www.proxy.com:1080", "http://www.google.com",
      {"http_proxy": "www.proxy.com"});
  expect("PROXY www.proxys.com:1080", "https://www.google.com",
      {"https_proxy": "www.proxys.com"});
  expect("PROXY www.proxy.com:8080", "http://www.google.com",
      {"http_proxy": "www.proxy.com:8080"});
  expect("PROXY www.proxys.com:8080", "https://www.google.com",
      {"https_proxy": "www.proxys.com:8080"});
  expect("PROXY www.proxy.com:8080", "http://www.google.com", {
    "http_proxy": "www.proxy.com:8080",
    "https_proxy": "www.proxys.com:8080"
  });
  expect("PROXY www.proxys.com:8080", "https://www.google.com", {
    "http_proxy": "www.proxy.com:8080",
    "https_proxy": "www.proxys.com:8080"
  });

  expect("PROXY [::ffff:1]:1080", "http://www.google.com",
      {"http_proxy": "[::ffff:1]"});
  expect("PROXY [::ffff:2]:1080", "https://www.google.com",
      {"https_proxy": "[::ffff:2]"});
  expect("PROXY [::ffff:1]:8080", "http://www.google.com",
      {"http_proxy": "[::ffff:1]:8080"});
  expect("PROXY [::ffff:2]:8080", "https://www.google.com",
      {"https_proxy": "[::ffff:2]:8080"});
  expect("PROXY [::ffff:1]:8080", "http://www.google.com",
      {"http_proxy": "[::ffff:1]:8080", "https_proxy": "[::ffff:2]:8080"});
  expect("PROXY [::ffff:2]:8080", "https://www.google.com",
      {"http_proxy": "[::ffff:1]:8080", "https_proxy": "[::ffff:2]:8080"});

  expect("PROXY www.proxy.com:1080", "http://www.google.com",
      {"http_proxy": "http://www.proxy.com"});
  expect("PROXY www.proxy.com:1080", "http://www.google.com",
      {"http_proxy": "http://www.proxy.com/"});
  expect("PROXY www.proxy.com:8080", "http://www.google.com",
      {"http_proxy": "http://www.proxy.com:8080/"});
  expect("PROXY www.proxy.com:8080", "http://www.google.com",
      {"http_proxy": "http://www.proxy.com:8080/index.html"});
  expect("PROXY www.proxy.com:8080", "http://www.google.com", {
    "http_proxy": "http://www.proxy.com:8080/",
    "https_proxy": "http://www.proxys.com:8080/"
  });
  expect("PROXY www.proxys.com:8080", "https://www.google.com", {
    "http_proxy": "http://www.proxy.com:8080/",
    "https_proxy": "http://www.proxys.com:8080/"
  });
  expect("PROXY www.proxy.com:8080", "http://www.google.com", {
    "http_proxy": "http://www.proxy.com:8080/",
    "https_proxy": "http://www.proxys.com:8080/index.html"
  });
  expect("PROXY www.proxys.com:8080", "https://www.google.com", {
    "http_proxy": "http://www.proxy.com:8080/",
    "https_proxy": "http://www.proxys.com:8080/index.html"
  });

  expect("PROXY [::ffff:1]:1080", "http://www.google.com",
      {"http_proxy": "http://[::ffff:1]"});
  expect("PROXY [::ffff:1]:1080", "http://www.google.com",
      {"http_proxy": "http://[::ffff:1]/"});
  expect("PROXY [::ffff:1]:8080", "http://www.google.com",
      {"http_proxy": "http://[::ffff:1]:8080/"});
  expect("PROXY [::ffff:1]:8080", "http://www.google.com",
      {"http_proxy": "http://[::ffff:1]:8080/index.html"});
  expect("PROXY [::ffff:1]:8080", "http://www.google.com", {
    "http_proxy": "http://[::ffff:1]:8080/",
    "https_proxy": "http://[::ffff:1]:8080/"
  });
  expect("PROXY [::ffff:2]:8080", "https://www.google.com", {
    "http_proxy": "http://[::ffff:1]:8080/",
    "https_proxy": "http://[::ffff:2]:8080/"
  });
  expect("PROXY [::ffff:1]:8080", "http://www.google.com", {
    "http_proxy": "http://[::ffff:1]:8080/",
    "https_proxy": "http://[::ffff:1]:8080/index.html"
  });
  expect("PROXY [::ffff:2]:8080", "https://www.google.com", {
    "http_proxy": "http://[::ffff:1]:8080/",
    "https_proxy": "http://[::ffff:2]:8080/index.html"
  });

  expectDirect("http://www.google.com",
      {"http_proxy": "www.proxy.com:8080", "no_proxy": "www.google.com"});
  expectDirect("http://www.google.com",
      {"http_proxy": "www.proxy.com:8080", "no_proxy": "google.com"});
  expectDirect("http://www.google.com",
      {"http_proxy": "www.proxy.com:8080", "no_proxy": ".com"});
  expectDirect("http://www.google.com", {
    "http_proxy": "www.proxy.com:8080",
    "no_proxy": ",,  , www.google.edu,,.com    "
  });
  expectDirect("http://www.google.edu", {
    "http_proxy": "www.proxy.com:8080",
    "no_proxy": ",,  , www.google.edu,,.com    "
  });
  expectDirect("http://www.google.com", {"https_proxy": "www.proxy.com:8080"});

  expect("PROXY www.proxy.com:8080", "http://[::ffff:1]",
      {"http_proxy": "www.proxy.com:8080", "no_proxy": "["});
  expect("PROXY www.proxy.com:8080", "http://[::ffff:1]",
      {"http_proxy": "www.proxy.com:8080", "no_proxy": "[]"});

  expectDirect("http://[::ffff:1]",
      {"http_proxy": "www.proxy.com:8080", "no_proxy": "[::ffff:1]"});
  expectDirect("http://[::ffff:1]", {
    "http_proxy": "www.proxy.com:8080",
    "no_proxy": ",,  , www.google.edu,,[::ffff:1]    "
  });
}
