| // 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 Uri.dataFromString( |
| /// String content, { |
| /// String mimeType, |
| /// Encoding encoding, |
| /// Map<String, String> parameters, |
| /// bool base64: false |
| /// }) |
| /// Creates a data: URI containing the content string. |
| /// |
| /// Converts the content to a bytes using encoding or the charset specified in |
| /// parameters (defaulting to US-ASCII if not specified or unrecognized), then |
| /// encodes the bytes into the resulting data URI. |
| /// |
| /// Defaults to encoding using percent-encoding (any non-ASCII or non-URI-valid |
| /// bytes is replaced by a percent encoding). If base64 is true, the bytes are |
| /// instead encoded using BASE64. |
| /// |
| /// If encoding is not provided and parameters has a charset entry, that name is |
| /// looked up using Encoding.getByName, and if the lookup returns an encoding, |
| /// that encoding is used to convert content to bytes. If providing both an |
| /// encoding and a charset parameter, they should agree, otherwise decoding |
| /// won't be able to use the charset parameter to determine the encoding. |
| /// |
| /// If mimeType and/or parameters are supplied, they are added to the created |
| /// URI. If any of these contain characters that are not allowed in the data URI, |
| /// the character is percent-escaped. If the character is non-ASCII, it is first |
| /// UTF-8 encoded and then the bytes are percent encoded. An omitted mimeType in |
| /// a data URI means text/plain, just as an omitted charset parameter defaults to |
| /// meaning US-ASCII. |
| /// @description Checks that this constructor creates an expected Uri. Test |
| /// parameters parameter specified |
| /// @author sgrekhov@unipro.ru |
| |
| import "dart:convert"; |
| import "../../../Utils/expect.dart"; |
| import "UriDataEncoder.lib.dart"; |
| |
| check(String content, Map<String, String> parameters) { |
| Uri uri = new Uri.dataFromString(content, parameters: parameters); |
| |
| Expect.equals(encodeString(content), uri.data?.contentText); |
| Expect.equals("text/plain", uri.data?.mimeType); |
| Expect.mapEquals(parameters, uri.data?.parameters); |
| Expect.equals("data:" + map2query(parameters) + "," + encodeString(content), |
| uri.data.toString()); |
| |
| Expect.equals("data", uri.scheme); |
| Expect.equals("", uri.userInfo); |
| Expect.equals("", uri.host); |
| Expect.equals(0, uri.port); |
| Expect.equals("", uri.fragment); |
| } |
| |
| String map2query(Map<String, String> map) { |
| StringBuffer sb = new StringBuffer(); |
| Iterator it = map.keys.iterator; |
| while (it.moveNext()) { |
| sb.write(";" + encodeString(it.current) + "=" + |
| encodeString(map[it.current]!, encoding: Encoding.getByName("utf-8"))); |
| } |
| return sb.toString(); |
| } |
| |
| main() { |
| check("Some data", {"a": "b", "c": "d"}); |
| check("", {}); |
| check(reserved, {}); |
| check(unreserved, {"a": "b c"}); |
| check("Some data", {"a 1": "b"}); |
| check("Some data", {"a": "Кириллица прекрасна!"}); |
| } |