| // 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"); |
| } |
| } |
| } |