// Copyright (c) 2024, 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:convert"; import "dart:typed_data"; import "package:expect/expect.dart"; void main() { // "é" final bytes = [195, 169]; // Same as `bytes` when interpreted as unsigned bytes. final negativeBytes = [-61, -87]; final decoded = "é"; final shouldSucceed = [ bytes, Uint8List.fromList(bytes), Uint8List.fromList(negativeBytes), ]; final shouldFail = [ negativeBytes, Int8List.fromList(bytes), Int8List.fromList(negativeBytes), ]; for (var bytes in shouldSucceed) { Expect.equals(utf8.decoder.convert(bytes), decoded); final stringSink = StringSink(); utf8.decoder.startChunkedConversion(stringSink) ..add(bytes) ..close(); Expect.equals(stringSink.buffer.toString(), decoded); } for (var bytes in shouldFail) { Expect.throwsFormatException(() => utf8.decoder.convert(bytes)); final stringSink = StringSink(); Expect.throwsFormatException( () => utf8.decoder.startChunkedConversion(stringSink) ..add(bytes) ..close(), ); } } class StringSink implements Sink { StringBuffer buffer = StringBuffer(); StringSink(); void add(String str) { buffer.write(str); } void close() {} }