mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

* add trailing commas on list/map/parameters * add trailing commas on Invocation with nb of arg>1 * add commas for widget containing widgets * add trailing commas if instantiation contains trailing comma * revert bad change
283 lines
8.6 KiB
Dart
283 lines
8.6 KiB
Dart
// Copyright 2016 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'dart:ui';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/widgets.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:flutter/gestures.dart';
|
|
|
|
void main() {
|
|
testWidgets(
|
|
'WidgetTester.drag must break the offset into multiple parallel components if'
|
|
'the drag goes outside the touch slop values',
|
|
(WidgetTester tester) async {
|
|
// The first Offset in every sub array (ie. offsetResults[i][0]) is (touchSlopX, touchSlopY).
|
|
// The second Offset in every sub array (ie. offsetResults[i][1]) will be the total move offset.
|
|
// The remaining values in every sub array are the expected separated drag offsets.
|
|
|
|
// This test checks to make sure that the total drag will be correctly split into
|
|
// pieces such that the first (and potentially second) moveBy function call(s) in
|
|
// controller.drag() will never have a component greater than the touch
|
|
// slop in that component's respective axis.
|
|
final List<List<Offset>> offsetResults = <List<Offset>>[
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(-150.0, 200.0),
|
|
const Offset(-7.5, 10.0),
|
|
const Offset(-2.5, 3.333333333333333),
|
|
const Offset(-140.0, 186.66666666666666),
|
|
],
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(150, -200),
|
|
const Offset(7.5, -10),
|
|
const Offset(2.5, -3.333333333333333),
|
|
const Offset(140.0, -186.66666666666666),
|
|
],
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(-200, 150),
|
|
const Offset(-10, 7.5),
|
|
const Offset(-3.333333333333333, 2.5),
|
|
const Offset(-186.66666666666666, 140.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(200.0, -150.0),
|
|
const Offset(10, -7.5),
|
|
const Offset(3.333333333333333, -2.5),
|
|
const Offset(186.66666666666666, -140.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(-150.0, -200.0),
|
|
const Offset(-7.5, -10.0),
|
|
const Offset(-2.5, -3.333333333333333),
|
|
const Offset(-140.0, -186.66666666666666),
|
|
],
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(8.0, 3.0),
|
|
const Offset(8.0, 3.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(3.0, 8.0),
|
|
const Offset(3.0, 8.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(20.0, 5.0),
|
|
const Offset(10.0, 2.5),
|
|
const Offset(10.0, 2.5),
|
|
],
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(5.0, 20.0),
|
|
const Offset(2.5, 10.0),
|
|
const Offset(2.5, 10.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(20.0, 15.0),
|
|
const Offset(10.0, 7.5),
|
|
const Offset(3.333333333333333, 2.5),
|
|
const Offset(6.666666666666668, 5.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(15.0, 20.0),
|
|
const Offset(7.5, 10.0),
|
|
const Offset(2.5, 3.333333333333333),
|
|
const Offset(5.0, 6.666666666666668),
|
|
],
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(20.0, 20.0),
|
|
const Offset(10.0, 10.0),
|
|
const Offset(10.0, 10.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(10.0, 10.0),
|
|
const Offset(0.0, 5.0),
|
|
const Offset(0.0, 5.0),
|
|
],
|
|
|
|
//// [VARYING TOUCH SLOP] ////
|
|
<Offset>[
|
|
const Offset(12.0, 5.0),
|
|
const Offset(0.0, 5.0),
|
|
const Offset(0.0, 5.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(12.0, 5.0),
|
|
const Offset(20.0, 5.0),
|
|
const Offset(12.0, 3.0),
|
|
const Offset(8.0, 2.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(12.0, 5.0),
|
|
const Offset(5.0, 20.0),
|
|
const Offset(1.25, 5.0),
|
|
const Offset(3.75, 15.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(5.0, 12.0),
|
|
const Offset(5.0, 20.0),
|
|
const Offset(3.0, 12.0),
|
|
const Offset(2.0, 8.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(5.0, 12.0),
|
|
const Offset(20.0, 5.0),
|
|
const Offset(5.0, 1.25),
|
|
const Offset(15.0, 3.75),
|
|
],
|
|
<Offset>[
|
|
const Offset(18.0, 18.0),
|
|
const Offset(0.0, 150.0),
|
|
const Offset(0.0, 18.0),
|
|
const Offset(0.0, 132.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(18.0, 18.0),
|
|
const Offset(0.0, -150.0),
|
|
const Offset(0.0, -18.0),
|
|
const Offset(0.0, -132.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(18.0, 18.0),
|
|
const Offset(-150.0, 0.0),
|
|
const Offset(-18.0, 0.0),
|
|
const Offset(-132.0, 0.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(0.0, 0.0),
|
|
const Offset(-150.0, 0.0),
|
|
const Offset(-150.0, 0.0),
|
|
],
|
|
<Offset>[
|
|
const Offset(18.0, 18.0),
|
|
const Offset(-32.0, 0.0),
|
|
const Offset(-18.0, 0.0),
|
|
const Offset(-14.0, 0.0),
|
|
],
|
|
];
|
|
|
|
await tester.pumpWidget(
|
|
const Directionality(
|
|
textDirection: TextDirection.ltr,
|
|
child: Text('test'),
|
|
),
|
|
);
|
|
|
|
final WidgetControllerSpy spyController = WidgetControllerSpy(tester.binding);
|
|
|
|
for (int resultIndex = 0; resultIndex < offsetResults.length; resultIndex += 1) {
|
|
final List<Offset> testResult = offsetResults[resultIndex];
|
|
await spyController.drag(
|
|
find.text('test'),
|
|
testResult[1],
|
|
touchSlopX: testResult[0].dx,
|
|
touchSlopY: testResult[0].dy,
|
|
);
|
|
final List<Offset> dragOffsets = spyController.testGestureSpy.offsets;
|
|
expect(
|
|
offsetResults[resultIndex].length - 2,
|
|
dragOffsets.length,
|
|
|
|
reason:
|
|
'There is a difference in the number of expected and actual split offsets for the drag with:\n'
|
|
'Touch Slop: ' + testResult[0].toString() + '\n'
|
|
'Delta: ' + testResult[1].toString() + '\n',
|
|
);
|
|
for (int valueIndex = 2; valueIndex < offsetResults[resultIndex].length; valueIndex += 1) {
|
|
expect(
|
|
offsetResults[resultIndex][valueIndex],
|
|
dragOffsets[valueIndex - 2],
|
|
reason:
|
|
'There is a difference in the expected and actual value of the ' +
|
|
(valueIndex == 2 ? 'first' : valueIndex == 3 ? 'second' : 'third') +
|
|
' split offset for the drag with:\n'
|
|
'Touch slop: ' + testResult[0].toString() + '\n'
|
|
'Delta: ' + testResult[1].toString() + '\n',
|
|
);
|
|
}
|
|
spyController.testGestureSpy.clearOffsets();
|
|
}
|
|
},
|
|
);
|
|
}
|
|
|
|
class WidgetControllerSpy extends WidgetController {
|
|
WidgetControllerSpy(
|
|
TestWidgetsFlutterBinding binding,
|
|
) : super(binding) {
|
|
_binding = binding;
|
|
}
|
|
|
|
TestWidgetsFlutterBinding _binding;
|
|
|
|
@override
|
|
Future<void> pump(Duration duration) async {
|
|
if (duration != null)
|
|
await Future<void>.delayed(duration);
|
|
_binding.scheduleFrame();
|
|
await _binding.endOfFrame;
|
|
}
|
|
|
|
int _getNextPointer() {
|
|
final int result = nextPointer;
|
|
nextPointer += 1;
|
|
return result;
|
|
}
|
|
|
|
@override
|
|
Future<void> sendEventToBinding(PointerEvent event, HitTestResult result) {
|
|
return TestAsyncUtils.guard<void>(() async {
|
|
_binding.dispatchEvent(event, result, source: TestBindingEventSource.test);
|
|
});
|
|
}
|
|
|
|
TestGestureSpy testGestureSpy;
|
|
|
|
@override
|
|
Future<TestGesture> createGesture({int pointer, PointerDeviceKind kind = PointerDeviceKind.touch}) async {
|
|
return testGestureSpy = TestGestureSpy(
|
|
pointer: pointer ?? _getNextPointer(),
|
|
kind: kind,
|
|
dispatcher: sendEventToBinding,
|
|
hitTester: hitTestOnBinding,
|
|
);
|
|
}
|
|
}
|
|
|
|
class TestGestureSpy extends TestGesture {
|
|
TestGestureSpy({
|
|
int pointer,
|
|
PointerDeviceKind kind,
|
|
EventDispatcher dispatcher,
|
|
HitTester hitTester,
|
|
}) : super(
|
|
pointer: pointer,
|
|
kind: kind,
|
|
dispatcher: dispatcher,
|
|
hitTester: hitTester
|
|
);
|
|
|
|
List<Offset> offsets = <Offset>[];
|
|
|
|
void clearOffsets() {
|
|
offsets = <Offset>[];
|
|
}
|
|
|
|
@override
|
|
Future<void> moveBy(Offset offset, {Duration timeStamp = Duration.zero}) {
|
|
offsets.add(offset);
|
|
return super.moveBy(offset, timeStamp: timeStamp);
|
|
}
|
|
}
|