Files
flutterApp/test/obstacle_resize_layer_test.dart

91 lines
3.1 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:latlong2/latlong.dart';
import 'package:maibu_satabot_v2/features/v2/device_list/presentation/widgets/obstacle_resize_layer.dart';
void main() {
testWidgets('map handles change only the dragged sides of an obstacle', (
tester,
) async {
const center = LatLng(31, 120);
final controller = MapController();
addTearDown(controller.dispose);
var corners = const [
LatLng(30.999991, 119.999990),
LatLng(30.999991, 120.000010),
LatLng(31.000009, 120.000010),
LatLng(31.000009, 119.999990),
];
await tester.pumpWidget(
MaterialApp(
home: StatefulBuilder(
builder: (context, setState) => FlutterMap(
mapController: controller,
options: const MapOptions(initialCenter: center, initialZoom: 22),
children: [
ObstacleResizeLayer(
corners: corners,
dimensions: '2 m × 2 m',
onChanged: (value) => setState(() => corners = value),
),
],
),
),
),
);
await tester.pumpAndSettle();
LatLngBounds bounds() => LatLngBounds.fromPoints(corners);
Future<void> drag(Alignment handle, Offset offset) async {
final handleCenter = tester.getCenter(find.byKey(ValueKey(handle)));
final gesture = await tester.startGesture(handleCenter);
for (var step = 0; step < 6; step++) {
await gesture.moveBy(offset / 6);
await tester.pump();
}
await gesture.up();
await tester.pumpAndSettle();
}
final initial = bounds();
await drag(Alignment.centerRight, const Offset(55, 20));
final wider = bounds();
expect(
wider.east,
greaterThan(initial.east),
reason: 'camera ${controller.camera.center}',
);
expect(wider.west, initial.west);
expect(wider.north, initial.north);
expect(wider.south, initial.south);
await drag(Alignment.topCenter, const Offset(20, -50));
final taller = bounds();
expect(taller.north, greaterThan(wider.north));
expect(taller.south, wider.south);
expect(taller.west, wider.west);
expect(taller.east, wider.east);
await drag(Alignment.bottomLeft, const Offset(-45, 45));
final larger = bounds();
expect(larger.west, lessThan(taller.west));
expect(larger.south, lessThan(taller.south));
expect(larger.east, taller.east);
expect(larger.north, taller.north);
await drag(Alignment.centerRight, const Offset(-280, 0));
final smallest = bounds();
expect(smallest.east, greaterThan(smallest.west));
expect(smallest.west, larger.west);
expect(smallest.east, lessThan(larger.east));
expect(controller.camera.center, center);
await tester.dragFrom(const Offset(100, 100), const Offset(80, 0));
await tester.pumpAndSettle();
expect(controller.camera.center, isNot(center));
expect(bounds().east, smallest.east);
expect(tester.takeException(), isNull);
});
}