From a43c401c6791d213ba4a9ab32555c40a2f871ec6 Mon Sep 17 00:00:00 2001 From: Mansour Alhaddad <43302116+mansourzaki@users.noreply.github.com> Date: Mon, 26 Aug 2024 21:11:02 +0300 Subject: [PATCH] Add test for error_widget.0_test.dart (#153103) Add test for error_widget.0_test.dart which is listed in this issue related to this issue https://github.com/flutter/flutter/issues/130459 --- dev/bots/check_code_samples.dart | 1 - .../lib/widgets/framework/error_widget.0.dart | 28 +++++++--- .../framework/error_widget.0_test.dart | 55 +++++++++++++++++++ 3 files changed, 74 insertions(+), 10 deletions(-) create mode 100644 examples/api/test/widgets/framework/error_widget.0_test.dart diff --git a/dev/bots/check_code_samples.dart b/dev/bots/check_code_samples.dart index 414659f134..117dbd4659 100644 --- a/dev/bots/check_code_samples.dart +++ b/dev/bots/check_code_samples.dart @@ -334,7 +334,6 @@ final Set _knownMissingTests = { 'examples/api/test/widgets/navigator/navigator_state.restorable_push.0_test.dart', 'examples/api/test/widgets/focus_manager/focus_node.unfocus.0_test.dart', 'examples/api/test/widgets/framework/build_owner.0_test.dart', - 'examples/api/test/widgets/framework/error_widget.0_test.dart', 'examples/api/test/widgets/autofill/autofill_group.0_test.dart', 'examples/api/test/widgets/nested_scroll_view/nested_scroll_view_state.0_test.dart', 'examples/api/test/widgets/scroll_position/scroll_metrics_notification.0_test.dart', diff --git a/examples/api/lib/widgets/framework/error_widget.0.dart b/examples/api/lib/widgets/framework/error_widget.0.dart index 3be9ff88cb..46d5a22dd1 100644 --- a/examples/api/lib/widgets/framework/error_widget.0.dart +++ b/examples/api/lib/widgets/framework/error_widget.0.dart @@ -16,15 +16,7 @@ void main() { return ErrorWidget(details.exception); } // In release builds, show a yellow-on-blue message instead: - return Container( - alignment: Alignment.center, - child: Text( - 'Error!\n${details.exception}', - style: const TextStyle(color: Colors.yellow), - textAlign: TextAlign.center, - textDirection: TextDirection.ltr, - ), - ); + return ReleaseModeErrorWidget(details: details); }; // Start the app. @@ -69,3 +61,21 @@ class _ErrorWidgetExampleAppState extends State { } } } + +class ReleaseModeErrorWidget extends StatelessWidget { + const ReleaseModeErrorWidget({super.key, required this.details}); + + final FlutterErrorDetails details; + + @override + Widget build(BuildContext context) { + return Center( + child: Text( + 'Error!\n${details.exception}', + style: const TextStyle(color: Colors.yellow), + textAlign: TextAlign.center, + textDirection: TextDirection.ltr, + ), + ); + } +} diff --git a/examples/api/test/widgets/framework/error_widget.0_test.dart b/examples/api/test/widgets/framework/error_widget.0_test.dart new file mode 100644 index 0000000000..049b3aaf10 --- /dev/null +++ b/examples/api/test/widgets/framework/error_widget.0_test.dart @@ -0,0 +1,55 @@ +// 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/material.dart'; +import 'package:flutter_api_samples/widgets/framework/error_widget.0.dart' as example; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets('ErrorWidget is displayed in debug mode', (WidgetTester tester) async { + final ErrorWidgetBuilder oldBuilder = ErrorWidget.builder; + ErrorWidget.builder = (FlutterErrorDetails details) { + return ErrorWidget(details.exception); + }; + await tester.pumpWidget(const example.ErrorWidgetExampleApp()); + + expect(find.widgetWithText(AppBar, 'ErrorWidget Sample'), findsOne); + + await tester.tap(find.widgetWithText(TextButton, 'Error Prone')); + await tester.pump(); + + expectLater(tester.takeException(), isInstanceOf()); + + final Finder errorWidget = find.byType(ErrorWidget); + expect(errorWidget, findsOneWidget); + final ErrorWidget error = tester.firstWidget(errorWidget); + expect(error.message, 'Exception: oh no, an error'); + + // Restore the ErrorWidget to conclude the test. + ErrorWidget.builder = oldBuilder; + }); + + testWidgets('ErrorWidget is displayed in release mode', (WidgetTester tester) async { + final ErrorWidgetBuilder oldBuilder = ErrorWidget.builder; + ErrorWidget.builder = (FlutterErrorDetails details) { + return example.ReleaseModeErrorWidget(details: details); + }; + await tester.pumpWidget(const example.ErrorWidgetExampleApp()); + + expect(find.widgetWithText(AppBar, 'ErrorWidget Sample'), findsOne); + + await tester.tap(find.widgetWithText(TextButton, 'Error Prone')); + await tester.pump(); + + expectLater(tester.takeException(), isInstanceOf()); + + final Finder errorTextFinder = find.textContaining('Error!\nException: oh no, an error'); + expect(errorTextFinder, findsOneWidget); + final Text errorText = tester.firstWidget(errorTextFinder); + expect(errorText.style?.color, Colors.yellow); + + // Restore the ErrorWidget to conclude the test. + ErrorWidget.builder = oldBuilder; + }); +}