Convert some widgets tests to NNBD (#67782)

Migrating some more widget tests to NNBD.
This commit is contained in:
Greg Spencer 2020-10-13 14:41:24 -07:00 committed by GitHub
parent 085f1daa43
commit ef119187d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 263 additions and 295 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'dart:math' as math; import 'dart:math' as math;
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';

View File

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';

View File

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'dart:typed_data'; import 'dart:typed_data';
import 'dart:ui' as ui; import 'dart:ui' as ui;
@ -22,21 +20,21 @@ class FadeInImageParts {
assert(target != null); assert(target != null);
final ComponentElement fadeInImageElement; final ComponentElement fadeInImageElement;
final FadeInImageElements placeholder; final FadeInImageElements? placeholder;
final FadeInImageElements target; final FadeInImageElements target;
State get state { State? get state {
StatefulElement animatedFadeOutFadeInElement; StatefulElement? animatedFadeOutFadeInElement;
fadeInImageElement.visitChildren((Element child) { fadeInImageElement.visitChildren((Element child) {
expect(animatedFadeOutFadeInElement, isNull); expect(animatedFadeOutFadeInElement, isNull);
animatedFadeOutFadeInElement = child as StatefulElement; animatedFadeOutFadeInElement = child as StatefulElement;
}); });
expect(animatedFadeOutFadeInElement, isNotNull); expect(animatedFadeOutFadeInElement, isNotNull);
return animatedFadeOutFadeInElement.state; return animatedFadeOutFadeInElement!.state;
} }
Element get semanticsElement { Element? get semanticsElement {
Element result; Element? result;
fadeInImageElement.visitChildren((Element child) { fadeInImageElement.visitChildren((Element child) {
if (child.widget is Semantics) if (child.widget is Semantics)
result = child; result = child;
@ -49,39 +47,39 @@ class FadeInImageElements {
const FadeInImageElements(this.rawImageElement, this.fadeTransitionElement); const FadeInImageElements(this.rawImageElement, this.fadeTransitionElement);
final Element rawImageElement; final Element rawImageElement;
final Element fadeTransitionElement; final Element? fadeTransitionElement;
RawImage get rawImage => rawImageElement.widget as RawImage; RawImage get rawImage => rawImageElement.widget as RawImage;
FadeTransition get fadeTransition => fadeTransitionElement?.widget as FadeTransition; FadeTransition? get fadeTransition => fadeTransitionElement?.widget as FadeTransition?;
double get opacity => fadeTransition == null ? 1 : fadeTransition.opacity.value; double get opacity => fadeTransition == null ? 1 : fadeTransition!.opacity.value;
} }
class LoadTestImageProvider extends ImageProvider<dynamic> { class LoadTestImageProvider extends ImageProvider<Object> {
LoadTestImageProvider(this.provider); LoadTestImageProvider(this.provider);
final ImageProvider provider; final ImageProvider provider;
ImageStreamCompleter testLoad(dynamic key, DecoderCallback decode) { ImageStreamCompleter testLoad(Object key, DecoderCallback decode) {
return provider.load(key, decode); return provider.load(key, decode);
} }
@override @override
Future<dynamic> obtainKey(ImageConfiguration configuration) { Future<Object> obtainKey(ImageConfiguration configuration) {
return null; throw UnimplementedError();
} }
@override @override
ImageStreamCompleter load(dynamic key, DecoderCallback decode) { ImageStreamCompleter load(Object key, DecoderCallback decode) {
return null; throw UnimplementedError();
} }
} }
FadeInImageParts findFadeInImage(WidgetTester tester) { FadeInImageParts findFadeInImage(WidgetTester tester) {
final List<FadeInImageElements> elements = <FadeInImageElements>[]; final List<FadeInImageElements> elements = <FadeInImageElements>[];
final Iterable<Element> rawImageElements = tester.elementList(find.byType(RawImage)); final Iterable<Element> rawImageElements = tester.elementList(find.byType(RawImage));
ComponentElement fadeInImageElement; ComponentElement? fadeInImageElement;
for (final Element rawImageElement in rawImageElements) { for (final Element rawImageElement in rawImageElements) {
Element fadeTransitionElement; Element? fadeTransitionElement;
rawImageElement.visitAncestorElements((Element ancestor) { rawImageElement.visitAncestorElements((Element ancestor) {
if (ancestor.widget is FadeTransition) { if (ancestor.widget is FadeTransition) {
fadeTransitionElement = ancestor; fadeTransitionElement = ancestor;
@ -99,10 +97,10 @@ FadeInImageParts findFadeInImage(WidgetTester tester) {
elements.add(FadeInImageElements(rawImageElement, fadeTransitionElement)); elements.add(FadeInImageElements(rawImageElement, fadeTransitionElement));
} }
if (elements.length == 2) { if (elements.length == 2) {
return FadeInImageParts(fadeInImageElement, elements.last, elements.first); return FadeInImageParts(fadeInImageElement!, elements.last, elements.first);
} else { } else {
expect(elements, hasLength(1)); expect(elements, hasLength(1));
return FadeInImageParts(fadeInImageElement, null, elements.first); return FadeInImageParts(fadeInImageElement!, null, elements.first);
} }
} }
@ -127,30 +125,30 @@ Future<void> main() async {
excludeFromSemantics: true, excludeFromSemantics: true,
)); ));
expect(findFadeInImage(tester).placeholder.rawImage.image, null); expect(findFadeInImage(tester).placeholder!.rawImage.image, null);
expect(findFadeInImage(tester).target.rawImage.image, null); expect(findFadeInImage(tester).target.rawImage.image, null);
placeholderProvider.complete(); placeholderProvider.complete();
await tester.pump(); await tester.pump();
expect(findFadeInImage(tester).placeholder.rawImage.image.isCloneOf(placeholderImage), true); expect(findFadeInImage(tester).placeholder!.rawImage.image!.isCloneOf(placeholderImage), true);
expect(findFadeInImage(tester).target.rawImage.image, null); expect(findFadeInImage(tester).target.rawImage.image, null);
imageProvider.complete(); imageProvider.complete();
await tester.pump(); await tester.pump();
for (int i = 0; i < 5; i += 1) { for (int i = 0; i < 5; i += 1) {
final FadeInImageParts parts = findFadeInImage(tester); final FadeInImageParts parts = findFadeInImage(tester);
expect(parts.placeholder.rawImage.image.isCloneOf(placeholderImage), true); expect(parts.placeholder!.rawImage.image!.isCloneOf(placeholderImage), true);
expect(parts.target.rawImage.image.isCloneOf(targetImage), true); expect(parts.target.rawImage.image!.isCloneOf(targetImage), true);
expect(parts.placeholder.opacity, moreOrLessEquals(1 - i / 5)); expect(parts.placeholder!.opacity, moreOrLessEquals(1 - i / 5));
expect(parts.target.opacity, 0); expect(parts.target.opacity, 0);
await tester.pump(const Duration(milliseconds: 10)); await tester.pump(const Duration(milliseconds: 10));
} }
for (int i = 0; i < 5; i += 1) { for (int i = 0; i < 5; i += 1) {
final FadeInImageParts parts = findFadeInImage(tester); final FadeInImageParts parts = findFadeInImage(tester);
expect(parts.placeholder.rawImage.image.isCloneOf(placeholderImage), true); expect(parts.placeholder!.rawImage.image!.isCloneOf(placeholderImage), true);
expect(parts.target.rawImage.image.isCloneOf(targetImage), true); expect(parts.target.rawImage.image!.isCloneOf(targetImage), true);
expect(parts.placeholder.opacity, 0); expect(parts.placeholder!.opacity, 0);
expect(parts.target.opacity, moreOrLessEquals(i / 5)); expect(parts.target.opacity, moreOrLessEquals(i / 5));
await tester.pump(const Duration(milliseconds: 10)); await tester.pump(const Duration(milliseconds: 10));
} }
@ -159,7 +157,7 @@ Future<void> main() async {
placeholder: placeholderProvider, placeholder: placeholderProvider,
image: imageProvider, image: imageProvider,
)); ));
expect(findFadeInImage(tester).target.rawImage.image.isCloneOf(targetImage), true); expect(findFadeInImage(tester).target.rawImage.image!.isCloneOf(targetImage), true);
expect(findFadeInImage(tester).target.opacity, 1); expect(findFadeInImage(tester).target.opacity, 1);
}); });
@ -174,7 +172,7 @@ Future<void> main() async {
image: imageProvider, image: imageProvider,
)); ));
expect(findFadeInImage(tester).target.rawImage.image.isCloneOf(targetImage), true); expect(findFadeInImage(tester).target.rawImage.image!.isCloneOf(targetImage), true);
expect(findFadeInImage(tester).placeholder, isNull); expect(findFadeInImage(tester).placeholder, isNull);
expect(findFadeInImage(tester).target.opacity, 1); expect(findFadeInImage(tester).target.opacity, 1);
}); });
@ -192,10 +190,10 @@ Future<void> main() async {
excludeFromSemantics: true, excludeFromSemantics: true,
)); ));
final State state = findFadeInImage(tester).state; final State? state = findFadeInImage(tester).state;
placeholderProvider.complete(); placeholderProvider.complete();
await tester.pump(); await tester.pump();
expect(findFadeInImage(tester).placeholder.rawImage.image.isCloneOf(placeholderImage), true); expect(findFadeInImage(tester).placeholder!.rawImage.image!.isCloneOf(placeholderImage), true);
await tester.pumpWidget(FadeInImage( await tester.pumpWidget(FadeInImage(
placeholder: secondPlaceholderProvider, placeholder: secondPlaceholderProvider,
@ -207,7 +205,7 @@ Future<void> main() async {
secondPlaceholderProvider.complete(); secondPlaceholderProvider.complete();
await tester.pump(); await tester.pump();
expect(findFadeInImage(tester).placeholder.rawImage.image.isCloneOf(replacementImage), true); expect(findFadeInImage(tester).placeholder!.rawImage.image!.isCloneOf(replacementImage), true);
expect(findFadeInImage(tester).state, same(state)); expect(findFadeInImage(tester).state, same(state));
}); });
@ -246,7 +244,7 @@ Future<void> main() async {
excludeFromSemantics: true, excludeFromSemantics: true,
)); ));
final State state = findFadeInImage(tester).state; final State? state = findFadeInImage(tester).state;
placeholderProvider.complete(); placeholderProvider.complete();
imageProvider.complete(); imageProvider.complete();
await tester.pump(); await tester.pump();
@ -263,15 +261,15 @@ Future<void> main() async {
secondImageProvider.complete(); secondImageProvider.complete();
await tester.pump(); await tester.pump();
expect(findFadeInImage(tester).target.rawImage.image.isCloneOf(replacementImage), true); expect(findFadeInImage(tester).target.rawImage.image!.isCloneOf(replacementImage), true);
expect(findFadeInImage(tester).state, same(state)); expect(findFadeInImage(tester).state, same(state));
expect(findFadeInImage(tester).placeholder.opacity, moreOrLessEquals(1)); expect(findFadeInImage(tester).placeholder!.opacity, moreOrLessEquals(1));
expect(findFadeInImage(tester).target.opacity, moreOrLessEquals(0)); expect(findFadeInImage(tester).target.opacity, moreOrLessEquals(0));
await tester.pump(animationDuration); await tester.pump(animationDuration);
expect(findFadeInImage(tester).placeholder.opacity, moreOrLessEquals(0)); expect(findFadeInImage(tester).placeholder!.opacity, moreOrLessEquals(0));
expect(findFadeInImage(tester).target.opacity, moreOrLessEquals(0)); expect(findFadeInImage(tester).target.opacity, moreOrLessEquals(0));
await tester.pump(animationDuration); await tester.pump(animationDuration);
expect(findFadeInImage(tester).placeholder.opacity, moreOrLessEquals(0)); expect(findFadeInImage(tester).placeholder!.opacity, moreOrLessEquals(0));
expect(findFadeInImage(tester).target.opacity, moreOrLessEquals(1)); expect(findFadeInImage(tester).target.opacity, moreOrLessEquals(1));
}); });
@ -287,7 +285,7 @@ Future<void> main() async {
excludeFromSemantics: true, excludeFromSemantics: true,
)); ));
final State state = findFadeInImage(tester).state; final State? state = findFadeInImage(tester).state;
placeholderProvider.complete(); placeholderProvider.complete();
imageProvider.complete(); imageProvider.complete();
await tester.pump(); await tester.pump();
@ -302,10 +300,10 @@ Future<void> main() async {
)); ));
expect(findFadeInImage(tester).state, same(state)); expect(findFadeInImage(tester).state, same(state));
expect(findFadeInImage(tester).placeholder.opacity, moreOrLessEquals(0)); expect(findFadeInImage(tester).placeholder!.opacity, moreOrLessEquals(0));
expect(findFadeInImage(tester).target.opacity, moreOrLessEquals(0)); expect(findFadeInImage(tester).target.opacity, moreOrLessEquals(0));
await tester.pump(animationDuration); await tester.pump(animationDuration);
expect(findFadeInImage(tester).placeholder.opacity, moreOrLessEquals(0)); expect(findFadeInImage(tester).placeholder!.opacity, moreOrLessEquals(0));
expect(findFadeInImage(tester).target.opacity, moreOrLessEquals(1)); expect(findFadeInImage(tester).target.opacity, moreOrLessEquals(1));
}); });
@ -323,12 +321,12 @@ Future<void> main() async {
); );
bool called = false; bool called = false;
final DecoderCallback decode = (Uint8List bytes, {int cacheWidth, int cacheHeight, bool allowUpscaling}) { final DecoderCallback decode = (Uint8List bytes, {int? cacheWidth, int? cacheHeight, bool allowUpscaling = false}) {
expect(cacheWidth, 20); expect(cacheWidth, 20);
expect(cacheHeight, 30); expect(cacheHeight, 30);
expect(allowUpscaling, false); expect(allowUpscaling, false);
called = true; called = true;
return PaintingBinding.instance.instantiateImageCodec(bytes, cacheWidth: cacheWidth, cacheHeight: cacheHeight, allowUpscaling: allowUpscaling); return PaintingBinding.instance!.instantiateImageCodec(bytes, cacheWidth: cacheWidth, cacheHeight: cacheHeight, allowUpscaling: allowUpscaling);
}; };
final ImageProvider resizeImage = image.placeholder; final ImageProvider resizeImage = image.placeholder;
expect(image.placeholder, isA<ResizeImage>()); expect(image.placeholder, isA<ResizeImage>());
@ -346,12 +344,12 @@ Future<void> main() async {
); );
bool called = false; bool called = false;
final DecoderCallback decode = (Uint8List bytes, {int cacheWidth, int cacheHeight, bool allowUpscaling}) { final DecoderCallback decode = (Uint8List bytes, {int? cacheWidth, int? cacheHeight, bool allowUpscaling = false}) {
expect(cacheWidth, null); expect(cacheWidth, null);
expect(cacheHeight, null); expect(cacheHeight, null);
expect(allowUpscaling, null); expect(allowUpscaling, false);
called = true; called = true;
return PaintingBinding.instance.instantiateImageCodec(bytes, cacheWidth: cacheWidth, cacheHeight: cacheHeight); return PaintingBinding.instance!.instantiateImageCodec(bytes, cacheWidth: cacheWidth, cacheHeight: cacheHeight);
}; };
// image.placeholder should be an instance of MemoryImage instead of ResizeImage // image.placeholder should be an instance of MemoryImage instead of ResizeImage
final ImageProvider memoryImage = image.placeholder; final ImageProvider memoryImage = image.placeholder;

View File

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
@ -12,8 +10,8 @@ void main() {
testWidgets('FadeTransition', (WidgetTester tester) async { testWidgets('FadeTransition', (WidgetTester tester) async {
final DebugPrintCallback oldPrint = debugPrint; final DebugPrintCallback oldPrint = debugPrint;
final List<String> log = <String>[]; final List<String> log = <String>[];
debugPrint = (String message, { int wrapWidth }) { debugPrint = (String? message, { int? wrapWidth }) {
log.add(message); log.add(message!);
}; };
debugPrintBuildScope = true; debugPrintBuildScope = true;
final AnimationController controller = AnimationController( final AnimationController controller = AnimationController(

View File

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
@ -595,12 +593,11 @@ void main() {
List<Type> getLayers() { List<Type> getLayers() {
final List<Type> layers = <Type>[]; final List<Type> layers = <Type>[];
Layer layer = RendererBinding.instance.renderView.debugLayer; Layer? container = RendererBinding.instance!.renderView.debugLayer;
while (layer is ContainerLayer) { while (container is ContainerLayer) {
final ContainerLayer container = layer as ContainerLayer;
layers.add(container.runtimeType); layers.add(container.runtimeType);
expect(container.firstChild, same(container.lastChild)); expect(container.firstChild, same(container.lastChild));
layer = container.firstChild; container = container.firstChild;
} }
return layers; return layers;
} }

View File

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
@ -63,18 +61,6 @@ void main() {
expect(box.size.width, 100.0); expect(box.size.width, 100.0);
}); });
testWidgets('Can pass null for flex', (WidgetTester tester) async {
await tester.pumpWidget(
Row(
textDirection: TextDirection.ltr,
children: const <Widget>[
Expanded(flex: null, child: Text('one', textDirection: TextDirection.ltr)),
Flexible(flex: null, child: Text('two', textDirection: TextDirection.ltr)),
],
),
);
});
testWidgets("Doesn't overflow because of floating point accumulated error", (WidgetTester tester) async { testWidgets("Doesn't overflow because of floating point accumulated error", (WidgetTester tester) async {
// both of these cases have failed in the past due to floating point issues // both of these cases have failed in the past due to floating point issues
await tester.pumpWidget( await tester.pumpWidget(

View File

@ -2,14 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
class TestFlowDelegate extends FlowDelegate { class TestFlowDelegate extends FlowDelegate {
TestFlowDelegate({this.startOffset}) : super(repaint: startOffset); TestFlowDelegate({required this.startOffset}) : super(repaint: startOffset);
final Animation<double> startOffset; final Animation<double> startOffset;
@ -23,7 +21,7 @@ class TestFlowDelegate extends FlowDelegate {
double dy = startOffset.value; double dy = startOffset.value;
for (int i = 0; i < context.childCount; ++i) { for (int i = 0; i < context.childCount; ++i) {
context.paintChild(i, transform: Matrix4.translationValues(0.0, dy, 0.0)); context.paintChild(i, transform: Matrix4.translationValues(0.0, dy, 0.0));
dy += 0.75 * context.getChildSize(i).height; dy += 0.75 * context.getChildSize(i)!.height;
} }
} }
@ -149,13 +147,13 @@ void main() {
], ],
), ),
); );
ContainerLayer layer = RendererBinding.instance.renderView.debugLayer; ContainerLayer? layer = RendererBinding.instance!.renderView.debugLayer;
while (layer != null && layer is! OpacityLayer) while (layer != null && layer is! OpacityLayer)
layer = layer.firstChild as ContainerLayer; layer = layer.firstChild as ContainerLayer?;
expect(layer, isA<OpacityLayer>()); expect(layer, isA<OpacityLayer>());
final OpacityLayer opacityLayer = layer as OpacityLayer; final OpacityLayer? opacityLayer = layer as OpacityLayer?;
expect(opacityLayer.alpha, equals(opacity * 255)); expect(opacityLayer!.alpha, equals(opacity * 255));
expect(layer.firstChild, isA<TransformLayer>()); expect(layer!.firstChild, isA<TransformLayer>());
}); });
testWidgets('Flow can set and update clipBehavior', (WidgetTester tester) async { testWidgets('Flow can set and update clipBehavior', (WidgetTester tester) async {

View File

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'dart:math' as math; import 'dart:math' as math;
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
@ -18,7 +16,7 @@ void main() {
final GlobalKey widgetKey = GlobalKey(); final GlobalKey widgetKey = GlobalKey();
Future<BuildContext> setupWidget(WidgetTester tester) async { Future<BuildContext> setupWidget(WidgetTester tester) async {
await tester.pumpWidget(Container(key: widgetKey)); await tester.pumpWidget(Container(key: widgetKey));
return widgetKey.currentContext; return widgetKey.currentContext!;
} }
group(FocusNode, () { group(FocusNode, () {
@ -931,7 +929,7 @@ void main() {
}, variant: TargetPlatformVariant.all()); }, variant: TargetPlatformVariant.all());
testWidgets('Mouse events change initial focus highlight mode on mobile.', (WidgetTester tester) async { testWidgets('Mouse events change initial focus highlight mode on mobile.', (WidgetTester tester) async {
expect(FocusManager.instance.highlightMode, equals(FocusHighlightMode.touch)); expect(FocusManager.instance.highlightMode, equals(FocusHighlightMode.touch));
RendererBinding.instance.initMouseTracker(); // Clear out the mouse state. RendererBinding.instance!.initMouseTracker(); // Clear out the mouse state.
final TestGesture gesture = await tester.createGesture(kind: PointerDeviceKind.mouse, pointer: 0); final TestGesture gesture = await tester.createGesture(kind: PointerDeviceKind.mouse, pointer: 0);
addTearDown(gesture.removePointer); addTearDown(gesture.removePointer);
await gesture.moveTo(Offset.zero); await gesture.moveTo(Offset.zero);
@ -939,7 +937,7 @@ void main() {
}, variant: TargetPlatformVariant.mobile()); }, variant: TargetPlatformVariant.mobile());
testWidgets('Mouse events change initial focus highlight mode on desktop.', (WidgetTester tester) async { testWidgets('Mouse events change initial focus highlight mode on desktop.', (WidgetTester tester) async {
expect(FocusManager.instance.highlightMode, equals(FocusHighlightMode.traditional)); expect(FocusManager.instance.highlightMode, equals(FocusHighlightMode.traditional));
RendererBinding.instance.initMouseTracker(); // Clear out the mouse state. RendererBinding.instance!.initMouseTracker(); // Clear out the mouse state.
final TestGesture gesture = await tester.createGesture(kind: PointerDeviceKind.mouse, pointer: 0); final TestGesture gesture = await tester.createGesture(kind: PointerDeviceKind.mouse, pointer: 0);
addTearDown(gesture.removePointer); addTearDown(gesture.removePointer);
await gesture.moveTo(Offset.zero); await gesture.moveTo(Offset.zero);
@ -952,7 +950,7 @@ void main() {
testWidgets('Events change focus highlight mode.', (WidgetTester tester) async { testWidgets('Events change focus highlight mode.', (WidgetTester tester) async {
await setupWidget(tester); await setupWidget(tester);
int callCount = 0; int callCount = 0;
FocusHighlightMode lastMode; FocusHighlightMode? lastMode;
void handleModeChange(FocusHighlightMode mode) { void handleModeChange(FocusHighlightMode mode) {
lastMode = mode; lastMode = mode;
callCount++; callCount++;