// 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 String encodeFull(String uri)
/// Encode the string uri using percent-encoding to make it safe for literal
/// use as a full URI.
/// All characters except uppercase and lowercase letters, digits
/// and the characters !$&'()*+,-./:;=?@_~ are percent-encoded.
/// This is the set of characters specified in in ECMA-262 version 5.1 for the
/// encodeURI function .
/// @description Checks that all characters, except ones, defined in ECMA-262
/// version 5.1, are encoded
/// @issue 28621
/// @author sgrekhov@unipro.ru

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

String unreserved = "0123456789" +
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
    "abcdefghijklmnopqrstuvwxyz" +
    "-" + "_" + "." + "!" + "~" + "*" + "'" + "(" + ")";
String reserved = ";" + "/" + "?" + ":" + "@" + "&" + "=" + "+" + r"$" + ",";

String mustNotBeEncoded = unreserved + reserved + "#";

main() {
  for (int i = 0; i < 65536; i++) {
    String char = new String.fromCharCode(i);
    if (mustNotBeEncoded.contains(char)) {
      Expect.equals(char, Uri.encodeFull(char));
    } else {
      Expect.isTrue(Uri.encodeFull(char).startsWith("%"),
          "'$char' is encoded but should not");
    }
  }
}
