| /* |
| * 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 Map<String, String> splitQueryString(String query, { |
| * Encoding encoding: utf8 |
| * }) |
| * Returns the query split into a map according to the rules specified for FORM |
| * post in the HTML 4.01 specification section 17.13.4. Each key and value in |
| * the returned map has been decoded. If the query is the empty string an empty |
| * map is returned. |
| * |
| * Keys in the query string that have no value are mapped to the empty string. |
| * |
| * Each query component will be decoded using encoding. The default encoding is |
| * UTF-8. |
| * @description Checks cases of encoded and not encoded keys and values |
| * @author ilya |
| */ |
| import "../../../Utils/expect.dart"; |
| |
| enc(x) => Uri.encodeComponent(x); |
| |
| main() { |
| // basic case |
| var m = Uri.splitQueryString('foo=1&bar=2'); |
| Expect.mapEquals({'foo': '1', 'bar':'2'}, m); |
| |
| // trailing ampersand |
| m = Uri.splitQueryString('foo=1&bar=2&'); |
| Expect.mapEquals({'foo': '1', 'bar':'2'}, m); |
| |
| // + is encoded space |
| m = Uri.splitQueryString('foo=1&bar=2+3'); |
| Expect.mapEquals({'foo': '1', 'bar':'2 3'}, m); |
| |
| // %2B is encoded + |
| m = Uri.splitQueryString('foo=1&bar=2%2B3'); |
| Expect.mapEquals({'foo': '1', 'bar':'2+3'}, m); |
| |
| // basic and extended unicode in vars and values |
| m = Uri.splitQueryString('${enc("a \u0000")}=${enc("a \u{10000}")}&' |
| '${enc("a \u0001")}=${enc("a \u{10001}")}'); |
| Expect.mapEquals({"a \u0000": "a \u{10000}", "a \u0001": "a \u{10001}"}, m); |
| } |