blob: 1cada32104aff49bd7497e838c67c60c80b5018f [file] [log] [blame]
// Copyright 2017 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:async';
import 'package:integration_test/integration_test.dart';
import 'package:google_maps/google_maps.dart' as gmaps;
import 'package:google_maps_flutter_web/google_maps_flutter_web.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
class _MockMarker extends Mock implements gmaps.Marker {
final onClickController = StreamController<gmaps.MouseEvent>();
final onDragEndController = StreamController<gmaps.MouseEvent>();
@override
Stream<gmaps.MouseEvent> get onClick => onClickController.stream;
@override
Stream<gmaps.MouseEvent> get onDragend => onDragEndController.stream;
}
class _MockMouseEvent extends Mock implements gmaps.MouseEvent {}
class _MockInfoWindow extends Mock implements gmaps.InfoWindow {}
/// Test Markers
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
bool called = false;
void onTap() {
called = true;
}
void onDragEnd(gmaps.LatLng _) {
called = true;
}
setUp(() {
called = false;
});
group('MarkerController', () {
_MockMarker marker;
setUp(() {
marker = _MockMarker();
});
testWidgets('onTap gets called', (WidgetTester tester) async {
MarkerController(marker: marker, onTap: onTap);
// Simulate a click
await marker.onClickController.add(null);
expect(called, isTrue);
});
testWidgets('onDragEnd gets called', (WidgetTester tester) async {
when(marker.draggable).thenReturn(true);
MarkerController(marker: marker, onDragEnd: onDragEnd);
// Simulate a drag end
await marker.onDragEndController.add(_MockMouseEvent());
expect(called, isTrue);
});
testWidgets('update', (WidgetTester tester) async {
final controller = MarkerController(marker: marker);
final options = gmaps.MarkerOptions()..draggable = false;
controller.update(options);
verify(marker.options = options);
});
testWidgets('infoWindow null, showInfoWindow.',
(WidgetTester tester) async {
final controller = MarkerController(marker: marker);
controller.showInfoWindow();
expect(controller.infoWindowShown, isFalse);
});
testWidgets('showInfoWindow', (WidgetTester tester) async {
final infoWindow = _MockInfoWindow();
final controller =
MarkerController(marker: marker, infoWindow: infoWindow);
controller.showInfoWindow();
verify(infoWindow.open(any, any)).called(1);
expect(controller.infoWindowShown, isTrue);
});
testWidgets('hideInfoWindow', (WidgetTester tester) async {
final infoWindow = _MockInfoWindow();
final controller =
MarkerController(marker: marker, infoWindow: infoWindow);
controller.hideInfoWindow();
verify(infoWindow.close()).called(1);
expect(controller.infoWindowShown, isFalse);
});
});
}