blob: 2105f27a459b17370b0d2b650b31ad9f6c0f5637 [file] [log] [blame]
// Copyright (c) 2020, 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.
import 'dart:typed_data';
import 'package:convert/convert.dart';
import 'package:test/test.dart';
void main() {
var bytes = Uint8List.fromList([for (var i = 0; i < 256; i++) i]);
for (var cp in [
latin2,
latin3,
latin4,
latin5,
latin6,
latin7,
latin8,
latin9,
latin10,
latinCyrillic,
latinGreek,
latinHebrew,
latinThai,
latinArabic
]) {
test("${cp.name} codepage", () {
// All ASCII compatible.
for (var byte = 0x20; byte < 0x7f; byte++) {
expect(cp[byte], byte);
}
// Maps both directions.
for (var byte = 0; byte < 256; byte++) {
var char = cp[byte];
if (char != 0xFFFD) {
var string = String.fromCharCode(char);
expect(cp.encode(string), [byte]);
expect(cp.decode([byte]), string);
}
}
expect(() => cp.decode([0xfffd]), throwsA(isA<FormatException>()));
// Decode works like operator[].
expect(cp.decode(bytes, allowInvalid: true),
String.fromCharCodes([for (var i = 0; i < 256; i++) cp[i]]));
});
}
test("latin-2 roundtrip", () {
// Data from http://www.columbia.edu/kermit/latin2.html
var latin2text =
"\xa0Ą˘Ł¤ĽŚ§¨ŠŞŤŹ\xadŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙";
expect(latin2.decode(latin2.encode(latin2text)), latin2text);
});
test("latin-3 roundtrip", () {
// Data from http://www.columbia.edu/kermit/latin3.html
var latin2text =
"\xa0Ħ˘£¤\u{FFFD}Ĥ§¨İŞĞĴ\xad\u{FFFD}Ż°ħ²³´µĥ·¸ışğĵ½\u{FFFD}żÀÁÂ\u{FFFD}ÄĊĈÇÈÉÊËÌÍÎÏ\u{FFFD}ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ\u{FFFD}äċĉçèéêëìíîï\u{FFFD}ñòóôġö÷ĝùúûüŭŝ˙";
var encoded = latin3.encode(latin2text, invalidCharacter: 0);
var decoded = latin3.decode(encoded, allowInvalid: true);
expect(decoded, latin2text);
});
}