| // 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); |
| }); |
| } |