From 6f6b5647f5d4dd9f3e7d18ca9c63afe78346da45 Mon Sep 17 00:00:00 2001 From: iroiroys Date: Wed, 16 Mar 2022 10:15:07 +0900 Subject: [PATCH] Add more specific cause on web development tool error output (#98553) --- packages/flutter_tools/lib/src/convert.dart | 2 +- .../test/general.shard/convert_test.dart | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 packages/flutter_tools/test/general.shard/convert_test.dart diff --git a/packages/flutter_tools/lib/src/convert.dart b/packages/flutter_tools/lib/src/convert.dart index fb5f64ff0ad..70ac4ce227d 100644 --- a/packages/flutter_tools/lib/src/convert.dart +++ b/packages/flutter_tools/lib/src/convert.dart @@ -52,7 +52,7 @@ class Utf8Decoder extends cnv.Utf8Decoder { // was malformed. if (reportErrors && result.contains('\u{FFFD}')) { throwToolExit( - 'Bad UTF-8 encoding found while decoding string: $result. ' + 'Bad UTF-8 encoding (U+FFFD; REPLACEMENT CHARACTER) found while decoding string: $result. ' 'The Flutter team would greatly appreciate if you could file a bug explaining ' 'exactly what you were doing when this happened:\n' 'https://github.com/flutter/flutter/issues/new/choose\n' diff --git a/packages/flutter_tools/test/general.shard/convert_test.dart b/packages/flutter_tools/test/general.shard/convert_test.dart new file mode 100644 index 00000000000..130bfdfe461 --- /dev/null +++ b/packages/flutter_tools/test/general.shard/convert_test.dart @@ -0,0 +1,41 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter_tools/src/base/common.dart'; +import 'package:flutter_tools/src/convert.dart'; + +import '../src/common.dart'; + +void main() { + late String passedString; + late String nonpassString; + + const Utf8Decoder decoder = Utf8Decoder(); + + setUp(() { + passedString = 'normal string'; + nonpassString = 'malformed string => �'; + }); + + testWithoutContext('Decode a normal string', () async { + assert(passedString != null); + + expect(decoder.convert(passedString.codeUnits), passedString); + }); + + testWithoutContext('Decode a malformed string', () async { + assert(nonpassString != null); + + expect( + () => decoder.convert(nonpassString.codeUnits), + throwsA( + isA().having( + (ToolExit error) => error.message, + 'message', + contains('(U+FFFD; REPLACEMENT CHARACTER)'), // Added paragraph + ), + ), + ); + }); +}