blob: 91988c8e0497a4cb19f31aa42e4fb022f6dfcfb4 [file] [log] [blame]
// 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 toString()
/// Returns a string representation of this object.
/// @description Checks that this method returns correct string representation of
/// the data URI. Test data URIs created by fromString() constructor
/// @author sgrekhov@unipro.ru
import "dart:convert";
import "../../../Utils/expect.dart";
import "../Uri/UriDataEncoder.lib.dart";
check(String content, String mimeType, Encoding? encoding,
Map<String, String> parameters, bool base64) {
UriData uriData = new UriData.fromString(content, mimeType: mimeType,
encoding: encoding, parameters: parameters, base64: base64);
Expect.equals("data:" + encodeString(mimeType, encoding: encoding) +
map2query(parameters) +
(encoding == null ? "": ";charset=" + encoding.name) +
(base64 ? ";base64" : "") + "," +
(base64 ? base64Encode(content, encoding) : encodeString(content,
encoding: encoding)), uriData.toString());
}
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();
}
String base64Encode(String str, Encoding? encoding) {
List<int> bytes = [];
Iterator it = str.runes.iterator;
while (it.moveNext()) {
int i = it.current;
if (encoding != null) {
List<int> codes = encoding.encode(new String.fromCharCode(i));
bytes.addAll(codes);
} else {
bytes.add(i);
}
}
return base64.encode(bytes);
}
main() {
Encoding? utf8 = Encoding.getByName("utf-8");
check("content", "mime/Type", null, {}, false);
check("content", "mime/Type", utf8, {}, false);
check("content", "mime/Type", utf8, {}, true);
check("content data", "mime / Type ", null, {" a ": " b "}, true);
check("Кириллица", "mime / Type ", utf8, {}, false);
check("Кириллица", "mime / Type ", utf8, {}, true);
check("а", "mime / Type ", utf8, {}, true);
check(reserved, "mime / Type ", null, {}, true);
check(reserved, "mime / Type ", null, {}, false);
check(reserved, "mime / Type ", null, {"charset": "utf-8"}, true);
check(unreserved, "mime / Type ", null, {}, true);
check(unreserved, "mime / Type ", null, {}, false);
check(unreserved, "mime / Type ", null, {"charset": "utf-8"}, true);
check("content", "кириллица/прекрасна", utf8, {}, true);
check("content", "кириллица/прекрасна", utf8, {}, false);
check("content", "image/gif", null, {" a " : " b "}, false);
}