Make tester.startGesture less async, for better stack traces (#123946)
Make tester.startGesture less async, for better stack traces
This commit is contained in:
parent
806c1f8186
commit
09940e4a37
@ -1133,6 +1133,19 @@ abstract class WidgetController {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TestGesture _createGesture({
|
||||||
|
int? pointer,
|
||||||
|
required PointerDeviceKind kind,
|
||||||
|
required int buttons,
|
||||||
|
}) {
|
||||||
|
return TestGesture(
|
||||||
|
dispatcher: sendEventToBinding,
|
||||||
|
kind: kind,
|
||||||
|
pointer: pointer ?? _getNextPointer(),
|
||||||
|
buttons: buttons,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// Creates gesture and returns the [TestGesture] object which you can use
|
/// Creates gesture and returns the [TestGesture] object which you can use
|
||||||
/// to continue the gesture using calls on the [TestGesture] object.
|
/// to continue the gesture using calls on the [TestGesture] object.
|
||||||
///
|
///
|
||||||
@ -1143,12 +1156,7 @@ abstract class WidgetController {
|
|||||||
PointerDeviceKind kind = PointerDeviceKind.touch,
|
PointerDeviceKind kind = PointerDeviceKind.touch,
|
||||||
int buttons = kPrimaryButton,
|
int buttons = kPrimaryButton,
|
||||||
}) async {
|
}) async {
|
||||||
return TestGesture(
|
return _createGesture(pointer: pointer, kind: kind, buttons: buttons);
|
||||||
dispatcher: sendEventToBinding,
|
|
||||||
kind: kind,
|
|
||||||
pointer: pointer ?? _getNextPointer(),
|
|
||||||
buttons: buttons,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a gesture with an initial appropriate starting gesture at a
|
/// Creates a gesture with an initial appropriate starting gesture at a
|
||||||
@ -1172,11 +1180,7 @@ abstract class WidgetController {
|
|||||||
PointerDeviceKind kind = PointerDeviceKind.touch,
|
PointerDeviceKind kind = PointerDeviceKind.touch,
|
||||||
int buttons = kPrimaryButton,
|
int buttons = kPrimaryButton,
|
||||||
}) async {
|
}) async {
|
||||||
final TestGesture result = await createGesture(
|
final TestGesture result = _createGesture(pointer: pointer, kind: kind, buttons: buttons);
|
||||||
pointer: pointer,
|
|
||||||
kind: kind,
|
|
||||||
buttons: buttons,
|
|
||||||
);
|
|
||||||
if (kind == PointerDeviceKind.trackpad) {
|
if (kind == PointerDeviceKind.trackpad) {
|
||||||
await result.panZoomStart(downLocation);
|
await result.panZoomStart(downLocation);
|
||||||
} else {
|
} else {
|
||||||
|
@ -7,6 +7,7 @@ import 'package:flutter/gestures.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/semantics.dart';
|
import 'package:flutter/semantics.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:stack_trace/stack_trace.dart';
|
||||||
|
|
||||||
class TestDragData {
|
class TestDragData {
|
||||||
const TestDragData(
|
const TestDragData(
|
||||||
@ -555,6 +556,34 @@ void main() {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
testWidgets(
|
||||||
|
'WidgetTester.tap appears in stack trace on error',
|
||||||
|
(WidgetTester tester) async {
|
||||||
|
// Regression test from https://github.com/flutter/flutter/pull/123946
|
||||||
|
await tester.pumpWidget(
|
||||||
|
const MaterialApp(home: Scaffold(body: Text('target'))));
|
||||||
|
|
||||||
|
final TestGesture gesture = await tester.startGesture(
|
||||||
|
tester.getCenter(find.text('target')), pointer: 1);
|
||||||
|
addTearDown(() => gesture.up());
|
||||||
|
|
||||||
|
Trace? stackTrace;
|
||||||
|
try {
|
||||||
|
await tester.tap(find.text('target'), pointer: 1);
|
||||||
|
} on Error catch (e) {
|
||||||
|
stackTrace = Trace.from(e.stackTrace!);
|
||||||
|
}
|
||||||
|
expect(stackTrace, isNotNull);
|
||||||
|
|
||||||
|
final int tapFrame = stackTrace!.frames.indexWhere(
|
||||||
|
(Frame frame) => frame.member == 'WidgetController.tap');
|
||||||
|
expect(tapFrame, greaterThanOrEqualTo(0));
|
||||||
|
expect(stackTrace.frames[tapFrame].package, 'flutter_test');
|
||||||
|
expect(stackTrace.frames[tapFrame+1].member, 'main.<fn>');
|
||||||
|
expect(stackTrace.frames[tapFrame+1].package, null);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
testWidgets(
|
testWidgets(
|
||||||
'ensureVisible: scrolls to make widget visible',
|
'ensureVisible: scrolls to make widget visible',
|
||||||
(WidgetTester tester) async {
|
(WidgetTester tester) async {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user