Check that ErrorWidget.builder is not modified after test (#30898)

This commit is contained in:
Dan Field 2019-04-15 12:38:51 -07:00 committed by Jonah Williams
parent 28cb589cd3
commit 330dc94c0f
2 changed files with 19 additions and 0 deletions

View file

@ -7,6 +7,7 @@ import 'package:flutter/widgets.dart';
void main() {
testWidgets('ErrorWidget.builder', (WidgetTester tester) async {
final ErrorWidgetBuilder oldBuilder = ErrorWidget.builder;
ErrorWidget.builder = (FlutterErrorDetails details) {
return const Text('oopsie!', textDirection: TextDirection.ltr);
};
@ -21,5 +22,6 @@ void main() {
);
expect(tester.takeException().toString(), 'test');
expect(find.text('oopsie!'), findsOneWidget);
ErrorWidget.builder = oldBuilder;
});
}

View file

@ -584,6 +584,7 @@ abstract class TestWidgetsFlutterBinding extends BindingBase
final bool autoUpdateGoldensBeforeTest = autoUpdateGoldenFiles;
final TestExceptionReporter reportTestExceptionBeforeTest = reportTestException;
final ErrorWidgetBuilder errorWidgetBuilderBeforeTest = ErrorWidget.builder;
// run the test
await testBody();
@ -598,6 +599,7 @@ abstract class TestWidgetsFlutterBinding extends BindingBase
invariantTester();
_verifyAutoUpdateGoldensUnset(autoUpdateGoldensBeforeTest);
_verifyReportTestExceptionUnset(reportTestExceptionBeforeTest);
_verifyErrorWidgetBuilderUnset(errorWidgetBuilderBeforeTest);
_verifyInvariants();
}
@ -667,6 +669,21 @@ abstract class TestWidgetsFlutterBinding extends BindingBase
}());
}
void _verifyErrorWidgetBuilderUnset(ErrorWidgetBuilder valueBeforeTest) {
assert(() {
if (ErrorWidget.builder != valueBeforeTest) {
FlutterError.reportError(FlutterErrorDetails(
exception: FlutterError(
'The value of ErrorWidget.builder was changed by the test.',
),
stack: StackTrace.current,
library: 'Flutter test framework',
));
}
return true;
}());
}
/// Called by the [testWidgets] function after a test is executed.
void postTest() {
assert(inTest);