| // Copyright (c) 2011, 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 decodeFull(String uri) |
| /// Decodes the percent-encoding in uri. |
| /// @description Checks expected results on basic and extended |
| /// unicode characters on manually and library encoded strings. |
| /// @author ilya |
| |
| import 'dart:convert'; |
| import "../../../Utils/expect.dart"; |
| |
| encodeOctet(int x) => |
| x < 0x10 ? '%0${x.toRadixString(16)}' : '%${x.toRadixString(16)}'; |
| |
| manuallyEncodeFull(String s) => s.runes |
| .map((x) => |
| utf8.encode(new String.fromCharCode(x)).map(encodeOctet).join('')) |
| .join(''); |
| |
| main() { |
| var x; |
| x = 'a.A- \u0000 \u0001 \u{1D11E}'; |
| Expect.equals(x, Uri.decodeFull(manuallyEncodeFull(x))); |
| Expect.equals(x, Uri.decodeFull(Uri.encodeFull(x))); |
| |
| x = '~foo_BAR \uD7FF \uE000 \u{10000}'; |
| Expect.equals(x, Uri.decodeFull(manuallyEncodeFull(x))); |
| Expect.equals(x, Uri.decodeFull(Uri.encodeFull(x))); |
| |
| x = r"! # $ & ' ( ) * + , - . / : ; = ? @ _ ~"; |
| Expect.equals(x, Uri.decodeFull(manuallyEncodeFull(x))); |
| Expect.equals(x, Uri.decodeFull(Uri.encodeFull(x))); |
| } |