mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Fix error when resetting configurations in tear down phase (#114468)
* move _verifyInvariants * fix * fix (mimic import test_api.dart) * fix * Update binding.dart * add tests * try to move * Revert "try to move" This reverts commit d3c466d226cc1abe195af83a2630c70f08e25d7d. * Update binding.dart
This commit is contained in:
parent
c102bf4673
commit
577ad2ee8a
@ -15,6 +15,7 @@ import 'package:flutter/services.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:stack_trace/stack_trace.dart' as stack_trace;
|
||||
import 'package:test_api/expect.dart' show fail;
|
||||
import 'package:test_api/scaffolding.dart'; // ignore: deprecated_member_use
|
||||
import 'package:test_api/test_api.dart' as test_package show Timeout; // ignore: deprecated_member_use
|
||||
import 'package:vector_math/vector_math_64.dart';
|
||||
|
||||
@ -919,6 +920,13 @@ abstract class TestWidgetsFlutterBinding extends BindingBase
|
||||
// So that we can assert that it remains the same after the test finishes.
|
||||
_beforeTestCheckIntrinsicSizes = debugCheckIntrinsicSizes;
|
||||
|
||||
bool shouldTearDownVerifyInvariants = false;
|
||||
addTearDown(() {
|
||||
if (shouldTearDownVerifyInvariants) {
|
||||
_verifyTearDownInvariants();
|
||||
}
|
||||
});
|
||||
|
||||
runApp(Container(key: UniqueKey(), child: _preTestMessage)); // Reset the tree to a known state.
|
||||
await pump();
|
||||
// Pretend that the first frame produced in the test body is the first frame
|
||||
@ -949,6 +957,7 @@ abstract class TestWidgetsFlutterBinding extends BindingBase
|
||||
_verifyErrorWidgetBuilderUnset(errorWidgetBuilderBeforeTest);
|
||||
_verifyShouldPropagateDevicePointerEventsUnset(shouldPropagateDevicePointerEventsBeforeTest);
|
||||
_verifyInvariants();
|
||||
shouldTearDownVerifyInvariants = true;
|
||||
}
|
||||
|
||||
assert(inTest);
|
||||
@ -958,6 +967,11 @@ abstract class TestWidgetsFlutterBinding extends BindingBase
|
||||
late bool _beforeTestCheckIntrinsicSizes;
|
||||
|
||||
void _verifyInvariants() {
|
||||
// subclasses such as AutomatedTestWidgetsFlutterBinding overrides this
|
||||
// to perform more verifications.
|
||||
}
|
||||
|
||||
void _verifyTearDownInvariants() {
|
||||
assert(debugAssertNoTransientCallbacks(
|
||||
'An animation is still running even after the widget tree was disposed.'
|
||||
));
|
||||
|
||||
@ -12,6 +12,7 @@ library;
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
@ -102,4 +103,16 @@ void main() {
|
||||
});
|
||||
expect(responded, true);
|
||||
});
|
||||
|
||||
group('should be able to reset values in either tearDown or end of function', () {
|
||||
testWidgets('addTearDown should work', (WidgetTester tester) async {
|
||||
timeDilation = 2;
|
||||
addTearDown(() => timeDilation = 1);
|
||||
});
|
||||
|
||||
testWidgets('directly reset should work', (WidgetTester tester) async {
|
||||
timeDilation = 2;
|
||||
timeDilation = 1;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user