// Copyright (c) 2015, 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:io'; import 'dart:convert'; import "package:expect/expect.dart"; // This only works reliabily for "ASCII" cross platform as that is the only // well known part of the default Windows code page. void testEncodeDecode(String str) { Expect.equals(systemEncoding.decode(systemEncoding.encode(str)), str); } // This only works reliabily for "ASCII" cross platform as that is the only // common set of bytes between UTF-8 Windows code pages that convert back // and forth. void testDecodeEncode(List bytes) { Expect.listEquals(systemEncoding.encode(systemEncoding.decode(bytes)), bytes); } void test(List bytes) { var str = new String.fromCharCodes(bytes); Expect.equals(systemEncoding.decode(bytes), str); Expect.listEquals(systemEncoding.encode(str), bytes); testDecodeEncode(bytes); testEncodeDecode(str); } main() { test([65, 66, 67]); test([65, 0, 67]); test([0, 65, 0, 67, 0]); test([0, 0, 0]); test(new Iterable.generate(128, (i) => i).toList()); if (Platform.isWindows) { // On Windows the default Windows code page cannot encode these // Unicode characters and the ? character is used. Expect.listEquals( systemEncoding.encode('\u1234\u5678\u9abc'), '???'.codeUnits); } else { // On all systems except for Windows UTF-8 is used as the system // encoding. Expect.listEquals(systemEncoding.encode('\u1234\u5678\u9abc'), utf8.encode('\u1234\u5678\u9abc')); } }