mirror of
https://github.com/flutter/flutter
synced 2024-10-13 19:52:53 +00:00
Convert some widgets tests to NNBD (#67782)
Migrating some more widget tests to NNBD.
This commit is contained in:
parent
085f1daa43
commit
ef119187d0
File diff suppressed because it is too large
Load diff
|
@ -2,8 +2,6 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// @dart = 2.8
|
||||
|
||||
import 'dart:math' as math;
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// @dart = 2.8
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// @dart = 2.8
|
||||
|
||||
import 'dart:typed_data';
|
||||
import 'dart:ui' as ui;
|
||||
|
||||
|
@ -22,21 +20,21 @@ class FadeInImageParts {
|
|||
assert(target != null);
|
||||
|
||||
final ComponentElement fadeInImageElement;
|
||||
final FadeInImageElements placeholder;
|
||||
final FadeInImageElements? placeholder;
|
||||
final FadeInImageElements target;
|
||||
|
||||
State get state {
|
||||
StatefulElement animatedFadeOutFadeInElement;
|
||||
State? get state {
|
||||
StatefulElement? animatedFadeOutFadeInElement;
|
||||
fadeInImageElement.visitChildren((Element child) {
|
||||
expect(animatedFadeOutFadeInElement, isNull);
|
||||
animatedFadeOutFadeInElement = child as StatefulElement;
|
||||
});
|
||||
expect(animatedFadeOutFadeInElement, isNotNull);
|
||||
return animatedFadeOutFadeInElement.state;
|
||||
return animatedFadeOutFadeInElement!.state;
|
||||
}
|
||||
|
||||
Element get semanticsElement {
|
||||
Element result;
|
||||
Element? get semanticsElement {
|
||||
Element? result;
|
||||
fadeInImageElement.visitChildren((Element child) {
|
||||
if (child.widget is Semantics)
|
||||
result = child;
|
||||
|
@ -49,39 +47,39 @@ class FadeInImageElements {
|
|||
const FadeInImageElements(this.rawImageElement, this.fadeTransitionElement);
|
||||
|
||||
final Element rawImageElement;
|
||||
final Element fadeTransitionElement;
|
||||
final Element? fadeTransitionElement;
|
||||
|
||||
RawImage get rawImage => rawImageElement.widget as RawImage;
|
||||
FadeTransition get fadeTransition => fadeTransitionElement?.widget as FadeTransition;
|
||||
double get opacity => fadeTransition == null ? 1 : fadeTransition.opacity.value;
|
||||
FadeTransition? get fadeTransition => fadeTransitionElement?.widget as FadeTransition?;
|
||||
double get opacity => fadeTransition == null ? 1 : fadeTransition!.opacity.value;
|
||||
}
|
||||
|
||||
class LoadTestImageProvider extends ImageProvider<dynamic> {
|
||||
class LoadTestImageProvider extends ImageProvider<Object> {
|
||||
LoadTestImageProvider(this.provider);
|
||||
|
||||
final ImageProvider provider;
|
||||
|
||||
ImageStreamCompleter testLoad(dynamic key, DecoderCallback decode) {
|
||||
ImageStreamCompleter testLoad(Object key, DecoderCallback decode) {
|
||||
return provider.load(key, decode);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<dynamic> obtainKey(ImageConfiguration configuration) {
|
||||
return null;
|
||||
Future<Object> obtainKey(ImageConfiguration configuration) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
ImageStreamCompleter load(dynamic key, DecoderCallback decode) {
|
||||
return null;
|
||||
ImageStreamCompleter load(Object key, DecoderCallback decode) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
|
||||
FadeInImageParts findFadeInImage(WidgetTester tester) {
|
||||
final List<FadeInImageElements> elements = <FadeInImageElements>[];
|
||||
final Iterable<Element> rawImageElements = tester.elementList(find.byType(RawImage));
|
||||
ComponentElement fadeInImageElement;
|
||||
ComponentElement? fadeInImageElement;
|
||||
for (final Element rawImageElement in rawImageElements) {
|
||||
Element fadeTransitionElement;
|
||||
Element? fadeTransitionElement;
|
||||
rawImageElement.visitAncestorElements((Element ancestor) {
|
||||
if (ancestor.widget is FadeTransition) {
|
||||
fadeTransitionElement = ancestor;
|
||||
|
@ -99,10 +97,10 @@ FadeInImageParts findFadeInImage(WidgetTester tester) {
|
|||
elements.add(FadeInImageElements(rawImageElement, fadeTransitionElement));
|
||||
}
|
||||
if (elements.length == 2) {
|
||||
return FadeInImageParts(fadeInImageElement, elements.last, elements.first);
|
||||
return FadeInImageParts(fadeInImageElement!, elements.last, elements.first);
|
||||
} else {
|
||||
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,
|
||||
));
|
||||
|
||||
expect(findFadeInImage(tester).placeholder.rawImage.image, null);
|
||||
expect(findFadeInImage(tester).placeholder!.rawImage.image, null);
|
||||
expect(findFadeInImage(tester).target.rawImage.image, null);
|
||||
|
||||
placeholderProvider.complete();
|
||||
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);
|
||||
|
||||
imageProvider.complete();
|
||||
await tester.pump();
|
||||
for (int i = 0; i < 5; i += 1) {
|
||||
final FadeInImageParts parts = findFadeInImage(tester);
|
||||
expect(parts.placeholder.rawImage.image.isCloneOf(placeholderImage), true);
|
||||
expect(parts.target.rawImage.image.isCloneOf(targetImage), true);
|
||||
expect(parts.placeholder.opacity, moreOrLessEquals(1 - i / 5));
|
||||
expect(parts.placeholder!.rawImage.image!.isCloneOf(placeholderImage), true);
|
||||
expect(parts.target.rawImage.image!.isCloneOf(targetImage), true);
|
||||
expect(parts.placeholder!.opacity, moreOrLessEquals(1 - i / 5));
|
||||
expect(parts.target.opacity, 0);
|
||||
await tester.pump(const Duration(milliseconds: 10));
|
||||
}
|
||||
|
||||
for (int i = 0; i < 5; i += 1) {
|
||||
final FadeInImageParts parts = findFadeInImage(tester);
|
||||
expect(parts.placeholder.rawImage.image.isCloneOf(placeholderImage), true);
|
||||
expect(parts.target.rawImage.image.isCloneOf(targetImage), true);
|
||||
expect(parts.placeholder.opacity, 0);
|
||||
expect(parts.placeholder!.rawImage.image!.isCloneOf(placeholderImage), true);
|
||||
expect(parts.target.rawImage.image!.isCloneOf(targetImage), true);
|
||||
expect(parts.placeholder!.opacity, 0);
|
||||
expect(parts.target.opacity, moreOrLessEquals(i / 5));
|
||||
await tester.pump(const Duration(milliseconds: 10));
|
||||
}
|
||||
|
@ -159,7 +157,7 @@ Future<void> main() async {
|
|||
placeholder: placeholderProvider,
|
||||
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);
|
||||
});
|
||||
|
||||
|
@ -174,7 +172,7 @@ Future<void> main() async {
|
|||
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).target.opacity, 1);
|
||||
});
|
||||
|
@ -192,10 +190,10 @@ Future<void> main() async {
|
|||
excludeFromSemantics: true,
|
||||
));
|
||||
|
||||
final State state = findFadeInImage(tester).state;
|
||||
final State? state = findFadeInImage(tester).state;
|
||||
placeholderProvider.complete();
|
||||
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(
|
||||
placeholder: secondPlaceholderProvider,
|
||||
|
@ -207,7 +205,7 @@ Future<void> main() async {
|
|||
|
||||
secondPlaceholderProvider.complete();
|
||||
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));
|
||||
});
|
||||
|
||||
|
@ -246,7 +244,7 @@ Future<void> main() async {
|
|||
excludeFromSemantics: true,
|
||||
));
|
||||
|
||||
final State state = findFadeInImage(tester).state;
|
||||
final State? state = findFadeInImage(tester).state;
|
||||
placeholderProvider.complete();
|
||||
imageProvider.complete();
|
||||
await tester.pump();
|
||||
|
@ -263,15 +261,15 @@ Future<void> main() async {
|
|||
secondImageProvider.complete();
|
||||
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).placeholder.opacity, moreOrLessEquals(1));
|
||||
expect(findFadeInImage(tester).placeholder!.opacity, moreOrLessEquals(1));
|
||||
expect(findFadeInImage(tester).target.opacity, moreOrLessEquals(0));
|
||||
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));
|
||||
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));
|
||||
});
|
||||
|
||||
|
@ -287,7 +285,7 @@ Future<void> main() async {
|
|||
excludeFromSemantics: true,
|
||||
));
|
||||
|
||||
final State state = findFadeInImage(tester).state;
|
||||
final State? state = findFadeInImage(tester).state;
|
||||
placeholderProvider.complete();
|
||||
imageProvider.complete();
|
||||
await tester.pump();
|
||||
|
@ -302,10 +300,10 @@ Future<void> main() async {
|
|||
));
|
||||
|
||||
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));
|
||||
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));
|
||||
});
|
||||
|
||||
|
@ -323,12 +321,12 @@ Future<void> main() async {
|
|||
);
|
||||
|
||||
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(cacheHeight, 30);
|
||||
expect(allowUpscaling, false);
|
||||
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;
|
||||
expect(image.placeholder, isA<ResizeImage>());
|
||||
|
@ -346,12 +344,12 @@ Future<void> main() async {
|
|||
);
|
||||
|
||||
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(cacheHeight, null);
|
||||
expect(allowUpscaling, null);
|
||||
expect(allowUpscaling, false);
|
||||
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
|
||||
final ImageProvider memoryImage = image.placeholder;
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// @dart = 2.8
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
@ -12,8 +10,8 @@ void main() {
|
|||
testWidgets('FadeTransition', (WidgetTester tester) async {
|
||||
final DebugPrintCallback oldPrint = debugPrint;
|
||||
final List<String> log = <String>[];
|
||||
debugPrint = (String message, { int wrapWidth }) {
|
||||
log.add(message);
|
||||
debugPrint = (String? message, { int? wrapWidth }) {
|
||||
log.add(message!);
|
||||
};
|
||||
debugPrintBuildScope = true;
|
||||
final AnimationController controller = AnimationController(
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// @dart = 2.8
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
@ -595,12 +593,11 @@ void main() {
|
|||
|
||||
List<Type> getLayers() {
|
||||
final List<Type> layers = <Type>[];
|
||||
Layer layer = RendererBinding.instance.renderView.debugLayer;
|
||||
while (layer is ContainerLayer) {
|
||||
final ContainerLayer container = layer as ContainerLayer;
|
||||
Layer? container = RendererBinding.instance!.renderView.debugLayer;
|
||||
while (container is ContainerLayer) {
|
||||
layers.add(container.runtimeType);
|
||||
expect(container.firstChild, same(container.lastChild));
|
||||
layer = container.firstChild;
|
||||
container = container.firstChild;
|
||||
}
|
||||
return layers;
|
||||
}
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// @dart = 2.8
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
@ -63,18 +61,6 @@ void main() {
|
|||
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 {
|
||||
// both of these cases have failed in the past due to floating point issues
|
||||
await tester.pumpWidget(
|
||||
|
|
|
@ -2,14 +2,12 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// @dart = 2.8
|
||||
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
class TestFlowDelegate extends FlowDelegate {
|
||||
TestFlowDelegate({this.startOffset}) : super(repaint: startOffset);
|
||||
TestFlowDelegate({required this.startOffset}) : super(repaint: startOffset);
|
||||
|
||||
final Animation<double> startOffset;
|
||||
|
||||
|
@ -23,7 +21,7 @@ class TestFlowDelegate extends FlowDelegate {
|
|||
double dy = startOffset.value;
|
||||
for (int i = 0; i < context.childCount; ++i) {
|
||||
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)
|
||||
layer = layer.firstChild as ContainerLayer;
|
||||
layer = layer.firstChild as ContainerLayer?;
|
||||
expect(layer, isA<OpacityLayer>());
|
||||
final OpacityLayer opacityLayer = layer as OpacityLayer;
|
||||
expect(opacityLayer.alpha, equals(opacity * 255));
|
||||
expect(layer.firstChild, isA<TransformLayer>());
|
||||
final OpacityLayer? opacityLayer = layer as OpacityLayer?;
|
||||
expect(opacityLayer!.alpha, equals(opacity * 255));
|
||||
expect(layer!.firstChild, isA<TransformLayer>());
|
||||
});
|
||||
|
||||
testWidgets('Flow can set and update clipBehavior', (WidgetTester tester) async {
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// @dart = 2.8
|
||||
|
||||
import 'dart:math' as math;
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
@ -18,7 +16,7 @@ void main() {
|
|||
final GlobalKey widgetKey = GlobalKey();
|
||||
Future<BuildContext> setupWidget(WidgetTester tester) async {
|
||||
await tester.pumpWidget(Container(key: widgetKey));
|
||||
return widgetKey.currentContext;
|
||||
return widgetKey.currentContext!;
|
||||
}
|
||||
|
||||
group(FocusNode, () {
|
||||
|
@ -931,7 +929,7 @@ void main() {
|
|||
}, variant: TargetPlatformVariant.all());
|
||||
testWidgets('Mouse events change initial focus highlight mode on mobile.', (WidgetTester tester) async {
|
||||
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);
|
||||
addTearDown(gesture.removePointer);
|
||||
await gesture.moveTo(Offset.zero);
|
||||
|
@ -939,7 +937,7 @@ void main() {
|
|||
}, variant: TargetPlatformVariant.mobile());
|
||||
testWidgets('Mouse events change initial focus highlight mode on desktop.', (WidgetTester tester) async {
|
||||
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);
|
||||
addTearDown(gesture.removePointer);
|
||||
await gesture.moveTo(Offset.zero);
|
||||
|
@ -952,7 +950,7 @@ void main() {
|
|||
testWidgets('Events change focus highlight mode.', (WidgetTester tester) async {
|
||||
await setupWidget(tester);
|
||||
int callCount = 0;
|
||||
FocusHighlightMode lastMode;
|
||||
FocusHighlightMode? lastMode;
|
||||
void handleModeChange(FocusHighlightMode mode) {
|
||||
lastMode = mode;
|
||||
callCount++;
|
||||
|
|
Loading…
Reference in a new issue