| // 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 'dart:async'; | |
| import 'package:flutter/foundation.dart'; | |
| import 'package:flutter_test/flutter_test.dart'; | |
| import 'package:stack_trace/stack_trace.dart' as stack_trace; | |
| Future<void> main() async { | |
| test('demangles stacks', () async { | |
| // Test that the tester bindings unmangle stacks that come in as | |
| // package:stack_trace types. | |
| // Uses runTest directly so that the test does not get hung up waiting for | |
| // the error reporter to be reset to the original one. | |
| final errorCompleter = Completer<FlutterErrorDetails>(); | |
| final TestExceptionReporter oldReporter = reportTestException; | |
| reportTestException = (FlutterErrorDetails details, String testDescription) { | |
| errorCompleter.complete(details); | |
| reportTestException = oldReporter; | |
| }; | |
| final binding = AutomatedTestWidgetsFlutterBinding(); | |
| await binding.runTest(() async { | |
| final completer = Completer<String>(); | |
| // ignore: unawaited_futures | |
| completer.future.then( | |
| (String value) {}, | |
| onError: (Object error, StackTrace stack) { | |
| assert(stack is stack_trace.Chain); | |
| FlutterError.reportError(FlutterErrorDetails(exception: error, stack: stack)); | |
| }, | |
| ); | |
| completer.completeError(const CustomException()); | |
| }, () {}); | |
| final FlutterErrorDetails details = await errorCompleter.future; | |
| expect(details, isNotNull); | |
| expect(details.exception, isA<CustomException>()); | |
| reportTestException = oldReporter; | |
| }); | |
| } | |
| class CustomException implements Exception { | |
| const CustomException(); | |
| } |