| // 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. |
| * ... |
| * 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. |
| * ... |
| * @description Checks that if both an encoding and a charset parameter are |
| * specified and they disagree, then encoding parameter is used |
| * @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, encoding: |
| Encoding.getByName(parameters["charset"])), uri.data?.contentText); |
| Expect.equals("text/plain", uri.data?.mimeType); |
| Expect.mapEquals(parameters, uri.data?.parameters); |
| Expect.equals("data:;charset=" + parameters["charset"].toString() + "," + |
| encodeString(content, encoding: Encoding.getByName(parameters["charset"])), |
| 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); |
| } |
| |
| main() { |
| String content = "Non-ASCII: Кириллица прекрасна!"; |
| Encoding? encoding = Encoding.getByName("utf-8"); |
| |
| Expect.throws(() { |
| new Uri.dataFromString(content, encoding: Encoding.getByName("US-ASCII"), |
| parameters: {"charset": "utf-8"}); |
| }); |
| |
| Uri uri = new Uri.dataFromString("Non-ASCII: Кириллица прекрасна!", |
| encoding: encoding, parameters: {"charset": "US-ASCII"}); |
| Expect.equals(encodeString(content, encoding: encoding), uri.data?.contentText); |
| Expect.equals("text/plain", uri.data?.mimeType); |
| Expect.mapEquals({"charset": "US-ASCII"}, uri.data?.parameters); |
| Expect.equals("data:;charset=US-ASCII," + |
| encodeString(content, encoding: encoding), 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); |
| } |