Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix integration_test
  • Loading branch information
ditman committed May 19, 2022
commit a6b7646e643a897715e45cb3d88a8c77e367aef0

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
import 'dart:async';
import 'dart:html' as html;

import 'package:integration_test/integration_test.dart';
import 'package:flutter_test/flutter_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:integration_test/integration_test.dart';

/// Test Markers
void main() {
Expand Down Expand Up @@ -40,7 +40,7 @@ void main() {
}

setUp(() {
_methodCalledCompleter = Completer();
_methodCalledCompleter = Completer<bool>();
methodCalled = _methodCalledCompleter.future;
});

Expand All @@ -55,7 +55,7 @@ void main() {
MarkerController(marker: marker, onTap: onTap);

// Trigger a click event...
gmaps.Event.trigger(marker, 'click', [gmaps.MapMouseEvent()]);
gmaps.Event.trigger(marker, 'click', <Object?>[gmaps.MapMouseEvent()]);

// The event handling is now truly async. Wait for it...
expect(await methodCalled, isTrue);
Expand All @@ -66,7 +66,7 @@ void main() {

// Trigger a drag end event...
gmaps.Event.trigger(marker, 'dragstart',
[gmaps.MapMouseEvent()..latLng = gmaps.LatLng(0, 0)]);
<Object?>[gmaps.MapMouseEvent()..latLng = gmaps.LatLng(0, 0)]);

expect(await methodCalled, isTrue);
});
Expand All @@ -76,7 +76,7 @@ void main() {

// Trigger a drag end event...
gmaps.Event.trigger(
marker, 'drag', [gmaps.MapMouseEvent()..latLng = gmaps.LatLng(0, 0)]);
marker, 'drag', <Object?>[gmaps.MapMouseEvent()..latLng = gmaps.LatLng(0, 0)]);

expect(await methodCalled, isTrue);
});
Expand All @@ -86,14 +86,14 @@ void main() {

// Trigger a drag end event...
gmaps.Event.trigger(marker, 'dragend',
[gmaps.MapMouseEvent()..latLng = gmaps.LatLng(0, 0)]);
<Object?>[gmaps.MapMouseEvent()..latLng = gmaps.LatLng(0, 0)]);

expect(await methodCalled, isTrue);
});

testWidgets('update', (WidgetTester tester) async {
final controller = MarkerController(marker: marker);
final options = gmaps.MarkerOptions()..draggable = true;
final MarkerController controller = MarkerController(marker: marker);
final gmaps.MarkerOptions options = gmaps.MarkerOptions()..draggable = true;

expect(marker.draggable, isNull);

Expand All @@ -104,18 +104,18 @@ void main() {

testWidgets('infoWindow null, showInfoWindow.',
(WidgetTester tester) async {
final controller = MarkerController(marker: marker);
final MarkerController controller = MarkerController(marker: marker);

controller.showInfoWindow();

expect(controller.infoWindowShown, isFalse);
});

testWidgets('showInfoWindow', (WidgetTester tester) async {
final infoWindow = gmaps.InfoWindow();
final map = gmaps.GMap(html.DivElement());
final gmaps.InfoWindow infoWindow = gmaps.InfoWindow();
final gmaps.GMap map = gmaps.GMap(html.DivElement());
marker.set('map', map);
final controller =
final MarkerController controller =
MarkerController(marker: marker, infoWindow: infoWindow);

controller.showInfoWindow();
Expand All @@ -125,10 +125,10 @@ void main() {
});

testWidgets('hideInfoWindow', (WidgetTester tester) async {
final infoWindow = gmaps.InfoWindow();
final map = gmaps.GMap(html.DivElement());
final gmaps.InfoWindow infoWindow = gmaps.InfoWindow();
final gmaps.GMap map = gmaps.GMap(html.DivElement());
marker.set('map', map);
final controller =
final MarkerController controller =
MarkerController(marker: marker, infoWindow: infoWindow);

controller.hideInfoWindow();
Expand All @@ -141,8 +141,8 @@ void main() {
late MarkerController controller;

setUp(() {
final infoWindow = gmaps.InfoWindow();
final map = gmaps.GMap(html.DivElement());
final gmaps.InfoWindow infoWindow = gmaps.InfoWindow();
final gmaps.GMap map = gmaps.GMap(html.DivElement());
marker.set('map', map);
controller = MarkerController(marker: marker, infoWindow: infoWindow);
});
Expand All @@ -155,7 +155,7 @@ void main() {

testWidgets('cannot call update after remove',
(WidgetTester tester) async {
final options = gmaps.MarkerOptions()..draggable = true;
final gmaps.MarkerOptions options = gmaps.MarkerOptions()..draggable = true;

controller.remove();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'dart:async';
import 'dart:convert';
import 'dart:html' as html;
import 'dart:js_util' show getProperty;
import 'dart:typed_data';

import 'package:flutter_test/flutter_test.dart';
import 'package:google_maps/google_maps.dart' as gmaps;
Expand All @@ -20,146 +21,146 @@ void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();

group('MarkersController', () {
late StreamController<MapEvent> events;
late StreamController<MapEvent<Object>> events;
late MarkersController controller;
late gmaps.GMap map;

setUp(() {
events = StreamController<MapEvent>();
events = StreamController<MapEvent<Object>>();
controller = MarkersController(stream: events);
map = gmaps.GMap(html.DivElement());
controller.bindToMap(123, map);
});

testWidgets('addMarkers', (WidgetTester tester) async {
final markers = {
Marker(markerId: MarkerId('1')),
Marker(markerId: MarkerId('2')),
final Set<Marker> markers = <Marker>{
const Marker(markerId: MarkerId('1')),
const Marker(markerId: MarkerId('2')),
};

controller.addMarkers(markers);

expect(controller.markers.length, 2);
expect(controller.markers, contains(MarkerId('1')));
expect(controller.markers, contains(MarkerId('2')));
expect(controller.markers, isNot(contains(MarkerId('66'))));
expect(controller.markers, contains(const MarkerId('1')));
expect(controller.markers, contains(const MarkerId('2')));
expect(controller.markers, isNot(contains(const MarkerId('66'))));
});

testWidgets('changeMarkers', (WidgetTester tester) async {
final markers = {
Marker(markerId: MarkerId('1')),
final Set<Marker> markers = <Marker>{
const Marker(markerId: MarkerId('1')),
};
controller.addMarkers(markers);

expect(controller.markers[MarkerId('1')]?.marker?.draggable, isFalse);
expect(controller.markers[const MarkerId('1')]?.marker?.draggable, isFalse);

// Update the marker with radius 10
final updatedMarkers = {
Marker(markerId: MarkerId('1'), draggable: true),
final Set<Marker> updatedMarkers = <Marker>{
const Marker(markerId: MarkerId('1'), draggable: true),
};
controller.changeMarkers(updatedMarkers);

expect(controller.markers.length, 1);
expect(controller.markers[MarkerId('1')]?.marker?.draggable, isTrue);
expect(controller.markers[const MarkerId('1')]?.marker?.draggable, isTrue);
});

testWidgets('removeMarkers', (WidgetTester tester) async {
final markers = {
Marker(markerId: MarkerId('1')),
Marker(markerId: MarkerId('2')),
Marker(markerId: MarkerId('3')),
final Set<Marker> markers = <Marker>{
const Marker(markerId: MarkerId('1')),
const Marker(markerId: MarkerId('2')),
const Marker(markerId: MarkerId('3')),
};

controller.addMarkers(markers);

expect(controller.markers.length, 3);

// Remove some markers...
final markerIdsToRemove = {
MarkerId('1'),
MarkerId('3'),
final Set<MarkerId> markerIdsToRemove = <MarkerId>{
const MarkerId('1'),
const MarkerId('3'),
};

controller.removeMarkers(markerIdsToRemove);

expect(controller.markers.length, 1);
expect(controller.markers, isNot(contains(MarkerId('1'))));
expect(controller.markers, contains(MarkerId('2')));
expect(controller.markers, isNot(contains(MarkerId('3'))));
expect(controller.markers, isNot(contains(const MarkerId('1'))));
expect(controller.markers, contains(const MarkerId('2')));
expect(controller.markers, isNot(contains(const MarkerId('3'))));
});

testWidgets('InfoWindow show/hide', (WidgetTester tester) async {
final markers = {
Marker(
final Set<Marker> markers = <Marker>{
const Marker(
markerId: MarkerId('1'),
infoWindow: InfoWindow(title: "Title", snippet: "Snippet"),
infoWindow: InfoWindow(title: 'Title', snippet: 'Snippet'),
),
};

controller.addMarkers(markers);

expect(controller.markers[MarkerId('1')]?.infoWindowShown, isFalse);
expect(controller.markers[const MarkerId('1')]?.infoWindowShown, isFalse);

controller.showMarkerInfoWindow(MarkerId('1'));
controller.showMarkerInfoWindow(const MarkerId('1'));

expect(controller.markers[MarkerId('1')]?.infoWindowShown, isTrue);
expect(controller.markers[const MarkerId('1')]?.infoWindowShown, isTrue);

controller.hideMarkerInfoWindow(MarkerId('1'));
controller.hideMarkerInfoWindow(const MarkerId('1'));

expect(controller.markers[MarkerId('1')]?.infoWindowShown, isFalse);
expect(controller.markers[const MarkerId('1')]?.infoWindowShown, isFalse);
});

// https://github.com/flutter/flutter/issues/67380
testWidgets('only single InfoWindow is visible',
(WidgetTester tester) async {
final markers = {
Marker(
final Set<Marker> markers = <Marker>{
const Marker(
markerId: MarkerId('1'),
infoWindow: InfoWindow(title: "Title", snippet: "Snippet"),
infoWindow: InfoWindow(title: 'Title', snippet: 'Snippet'),
),
Marker(
const Marker(
markerId: MarkerId('2'),
infoWindow: InfoWindow(title: "Title", snippet: "Snippet"),
infoWindow: InfoWindow(title: 'Title', snippet: 'Snippet'),
),
};
controller.addMarkers(markers);

expect(controller.markers[MarkerId('1')]?.infoWindowShown, isFalse);
expect(controller.markers[MarkerId('2')]?.infoWindowShown, isFalse);
expect(controller.markers[const MarkerId('1')]?.infoWindowShown, isFalse);
expect(controller.markers[const MarkerId('2')]?.infoWindowShown, isFalse);

controller.showMarkerInfoWindow(MarkerId('1'));
controller.showMarkerInfoWindow(const MarkerId('1'));

expect(controller.markers[MarkerId('1')]?.infoWindowShown, isTrue);
expect(controller.markers[MarkerId('2')]?.infoWindowShown, isFalse);
expect(controller.markers[const MarkerId('1')]?.infoWindowShown, isTrue);
expect(controller.markers[const MarkerId('2')]?.infoWindowShown, isFalse);

controller.showMarkerInfoWindow(MarkerId('2'));
controller.showMarkerInfoWindow(const MarkerId('2'));

expect(controller.markers[MarkerId('1')]?.infoWindowShown, isFalse);
expect(controller.markers[MarkerId('2')]?.infoWindowShown, isTrue);
expect(controller.markers[const MarkerId('1')]?.infoWindowShown, isFalse);
expect(controller.markers[const MarkerId('2')]?.infoWindowShown, isTrue);
});

// https://github.com/flutter/flutter/issues/66622
testWidgets('markers with custom bitmap icon work',
(WidgetTester tester) async {
final bytes = Base64Decoder().convert(iconImageBase64);
final markers = {
final Uint8List bytes = const Base64Decoder().convert(iconImageBase64);
final Set<Marker> markers = <Marker>{
Marker(
markerId: MarkerId('1'), icon: BitmapDescriptor.fromBytes(bytes)),
markerId: const MarkerId('1'), icon: BitmapDescriptor.fromBytes(bytes)),
};

controller.addMarkers(markers);

expect(controller.markers.length, 1);
expect(controller.markers[MarkerId('1')]?.marker?.icon, isNotNull);
expect(controller.markers[const MarkerId('1')]?.marker?.icon, isNotNull);

final blobUrl = getProperty(
controller.markers[MarkerId('1')]!.marker!.icon!,
final String blobUrl = getProperty<String>(
controller.markers[const MarkerId('1')]!.marker!.icon!,
'url',
);

expect(blobUrl, startsWith('blob:'));

final response = await http.get(Uri.parse(blobUrl));
final http.Response response = await http.get(Uri.parse(blobUrl));

expect(response.bodyBytes, bytes,
reason:
Expand All @@ -169,8 +170,8 @@ void main() {
// https://github.com/flutter/flutter/issues/67854
testWidgets('InfoWindow snippet can have links',
(WidgetTester tester) async {
final markers = {
Marker(
final Set<Marker> markers = <Marker>{
const Marker(
markerId: MarkerId('1'),
infoWindow: InfoWindow(
title: 'title for test',
Expand All @@ -182,19 +183,19 @@ void main() {
controller.addMarkers(markers);

expect(controller.markers.length, 1);
final content = controller.markers[MarkerId('1')]?.infoWindow?.content
as html.HtmlElement;
expect(content.innerHtml, contains('title for test'));
final html.HtmlElement? content = controller.markers[const MarkerId('1')]?.infoWindow?.content
as html.HtmlElement?;
expect(content?.innerHtml, contains('title for test'));
expect(
content.innerHtml,
content?.innerHtml,
contains(
'<a href="https://www.google.com">Go to Google &gt;&gt;&gt;</a>'));
});

// https://github.com/flutter/flutter/issues/67289
testWidgets('InfoWindow content is clickable', (WidgetTester tester) async {
final markers = {
Marker(
final Set<Marker> markers = <Marker>{
const Marker(
markerId: MarkerId('1'),
infoWindow: InfoWindow(
title: 'title for test',
Expand All @@ -206,15 +207,15 @@ void main() {
controller.addMarkers(markers);

expect(controller.markers.length, 1);
final content = controller.markers[MarkerId('1')]?.infoWindow?.content
as html.HtmlElement;
final html.HtmlElement? content = controller.markers[const MarkerId('1')]?.infoWindow?.content
as html.HtmlElement?;

content.click();
content?.click();

final event = await events.stream.first;
final MapEvent<Object> event = await events.stream.first;

expect(event, isA<InfoWindowTapEvent>());
expect((event as InfoWindowTapEvent).value, equals(MarkerId('1')));
expect((event as InfoWindowTapEvent).value, equals(const MarkerId('1')));
});
});
}
Loading