Skip to content

Commit b847bc0

Browse files
committed
Fix Android and iOS tests
1 parent 63c0d43 commit b847bc0

File tree

12 files changed

+324
-22
lines changed

12 files changed

+324
-22
lines changed

packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ClusterManagersControllerTest.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.google.maps.android.collections.MarkerManager;
2727
import io.flutter.plugin.common.BinaryMessenger;
2828
import io.flutter.plugins.googlemaps.Messages.MapsCallbackApi;
29+
import io.flutter.plugins.googlemaps.Messages.PlatformMarkerCollisionBehavior;
2930
import java.io.ByteArrayOutputStream;
3031
import java.util.ArrayList;
3132
import java.util.Collections;
@@ -34,6 +35,7 @@
3435
import java.util.Set;
3536
import org.junit.After;
3637
import org.junit.Before;
38+
import org.junit.Ignore;
3739
import org.junit.Test;
3840
import org.junit.runner.RunWith;
3941
import org.mockito.ArgumentMatchers;
@@ -100,8 +102,8 @@ public void AddClusterManagersAndMarkers() {
100102
clusterManagersToAdd.add(initialClusterManager);
101103
controller.addClusterManagers(clusterManagersToAdd);
102104

103-
MarkerBuilder markerBuilder1 = new MarkerBuilder(markerId1, clusterManagerId);
104-
MarkerBuilder markerBuilder2 = new MarkerBuilder(markerId2, clusterManagerId);
105+
MarkerBuilder markerBuilder1 = new MarkerBuilder(markerId1, clusterManagerId, false);
106+
MarkerBuilder markerBuilder2 = new MarkerBuilder(markerId2, clusterManagerId, false);
105107

106108
final Messages.PlatformMarker markerData1 =
107109
createPlatformMarker(markerId1, location1, clusterManagerId);
@@ -140,11 +142,11 @@ public void OnClusterClickCallsMethodChannel() {
140142

141143
StaticCluster<MarkerBuilder> cluster = new StaticCluster<>(clusterPosition);
142144

143-
MarkerBuilder marker1 = new MarkerBuilder("m_1", clusterManagerId);
145+
MarkerBuilder marker1 = new MarkerBuilder("m_1", clusterManagerId, false);
144146
marker1.setPosition(markerPosition1);
145147
cluster.add(marker1);
146148

147-
MarkerBuilder marker2 = new MarkerBuilder("m_2", clusterManagerId);
149+
MarkerBuilder marker2 = new MarkerBuilder("m_2", clusterManagerId, false);
148150
marker2.setPosition(markerPosition2);
149151
cluster.add(marker2);
150152

@@ -211,6 +213,7 @@ private Messages.PlatformMarker createPlatformMarker(
211213
.setClusterManagerId(clusterManagerId)
212214
.setAnchor(anchor)
213215
.setInfoWindow(new Messages.PlatformInfoWindow.Builder().setAnchor(anchor).build())
216+
.setCollisionBehavior(PlatformMarkerCollisionBehavior.REQUIRED)
214217
.build();
215218
}
216219
}

packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/ConvertTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,11 @@ public void ConvertClusterToPigeonReturnsCorrectData() {
100100

101101
StaticCluster<MarkerBuilder> cluster = new StaticCluster<>(clusterPosition);
102102

103-
MarkerBuilder marker1 = new MarkerBuilder("m_1", clusterManagerId);
103+
MarkerBuilder marker1 = new MarkerBuilder("m_1", clusterManagerId, false);
104104
marker1.setPosition(markerPosition1);
105105
cluster.add(marker1);
106106

107-
MarkerBuilder marker2 = new MarkerBuilder("m_2", clusterManagerId);
107+
MarkerBuilder marker2 = new MarkerBuilder("m_2", clusterManagerId, false);
108108
marker2.setPosition(markerPosition2);
109109
cluster.add(marker2);
110110

packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.google.android.gms.maps.model.Marker;
3030
import com.google.maps.android.clustering.ClusterManager;
3131
import io.flutter.plugin.common.BinaryMessenger;
32+
import io.flutter.plugins.googlemaps.Messages.PlatformMarkerType;
3233
import java.util.ArrayList;
3334
import java.util.List;
3435
import org.junit.After;
@@ -74,7 +75,8 @@ public void before() {
7475
// See getGoogleMapControllerWithMockedDependencies for version with dependency injections.
7576
public GoogleMapController getGoogleMapController() {
7677
GoogleMapController googleMapController =
77-
new GoogleMapController(0, context, mockMessenger, activity::getLifecycle, null);
78+
new GoogleMapController(0, context, mockMessenger, activity::getLifecycle, null,
79+
PlatformMarkerType.LEGACY);
7880
googleMapController.init();
7981
return googleMapController;
8082
}
@@ -219,7 +221,7 @@ public void SetInitialClusterManagers() {
219221
@Test
220222
public void OnClusterItemRenderedCallsMarkersController() {
221223
GoogleMapController googleMapController = getGoogleMapControllerWithMockedDependencies();
222-
MarkerBuilder markerBuilder = new MarkerBuilder("m_1", "cm_1");
224+
MarkerBuilder markerBuilder = new MarkerBuilder("m_1", "cm_1", false);
223225
final Marker marker = mock(Marker.class);
224226
googleMapController.onClusterItemRendered(markerBuilder, marker);
225227
verify(mockMarkersController, times(1)).onClusterItemRendered(markerBuilder, marker);
@@ -228,7 +230,7 @@ public void OnClusterItemRenderedCallsMarkersController() {
228230
@Test
229231
public void OnClusterItemClickCallsMarkersController() {
230232
GoogleMapController googleMapController = getGoogleMapControllerWithMockedDependencies();
231-
MarkerBuilder markerBuilder = new MarkerBuilder("m_1", "cm_1");
233+
MarkerBuilder markerBuilder = new MarkerBuilder("m_1", "cm_1", false);
232234

233235
googleMapController.onClusterItemClick(markerBuilder);
234236
verify(mockMarkersController, times(1)).onMarkerTap(markerBuilder.markerId());

packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import com.google.maps.android.collections.MarkerManager;
2525
import io.flutter.plugin.common.BinaryMessenger;
2626
import io.flutter.plugins.googlemaps.Messages.MapsCallbackApi;
27+
import io.flutter.plugins.googlemaps.Messages.PlatformMarkerCollisionBehavior;
28+
import io.flutter.plugins.googlemaps.Messages.PlatformMarkerType;
2729
import java.io.ByteArrayOutputStream;
2830
import java.util.Collections;
2931
import java.util.List;
@@ -84,7 +86,8 @@ private static Messages.PlatformMarker.Builder defaultMarkerBuilder() {
8486
.setZIndex(0.0)
8587
.setConsumeTapEvents(false)
8688
.setIcon(icon)
87-
.setInfoWindow(infoWindow);
89+
.setInfoWindow(infoWindow)
90+
.setCollisionBehavior(PlatformMarkerCollisionBehavior.REQUIRED);
8891
}
8992

9093
@Before
@@ -100,7 +103,8 @@ public void setUp() {
100103
clusterManagersController,
101104
assetManager,
102105
density,
103-
bitmapDescriptorFactoryWrapper);
106+
bitmapDescriptorFactoryWrapper,
107+
PlatformMarkerType.LEGACY);
104108
googleMap = mock(GoogleMap.class);
105109
markerManager = new MarkerManager(googleMap);
106110
markerCollection = markerManager.newCollection();

packages/google_maps_flutter/google_maps_flutter_android/example/integration_test/google_maps_tests.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const CameraPosition _kInitialCameraPosition = CameraPosition(
2121
target: _kInitialMapCenter,
2222
zoom: _kInitialZoomLevel,
2323
);
24-
const String _kCloudMapId = '000000000000000'; // Dummy map ID.
24+
const String _kMapId = '000000000000000'; // Dummy map ID.
2525

2626
// The tolerance value for floating-point comparisons in the tests.
2727
// This value was selected as the minimum possible value that the test passes.
@@ -1280,7 +1280,7 @@ void googleMapsTests() {
12801280
});
12811281

12821282
testWidgets(
1283-
'testCloudMapId',
1283+
'testMapId',
12841284
(WidgetTester tester) async {
12851285
final Completer<int> mapIdCompleter = Completer<int>();
12861286
final Key key = GlobalKey();
@@ -1294,7 +1294,7 @@ void googleMapsTests() {
12941294
onMapCreated: (ExampleGoogleMapController controller) {
12951295
mapIdCompleter.complete(controller.mapId);
12961296
},
1297-
mapId: _kCloudMapId,
1297+
mapId: _kMapId,
12981298
),
12991299
),
13001300
);

packages/google_maps_flutter/google_maps_flutter_android/test/google_maps_flutter_android_test.dart

Lines changed: 190 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,18 @@ void main() {
239239
verify(api.clearTileCache(tileOverlayId));
240240
});
241241

242+
test('isAdvancedMarkersAvailable calls through', () async {
243+
const int mapId = 1;
244+
final (GoogleMapsFlutterAndroid maps, MockMapsApi api) =
245+
setUpMockMap(mapId: mapId);
246+
when(api.isAdvancedMarkersAvailable()).thenAnswer((_) async => true);
247+
248+
await maps.isAdvancedMarkersAvailable(mapId: mapId);
249+
final bool isAdvancedMarkersAvailable =
250+
await api.isAdvancedMarkersAvailable();
251+
expect(isAdvancedMarkersAvailable, isTrue);
252+
});
253+
242254
test('updateMapConfiguration passes expected arguments', () async {
243255
const int mapId = 1;
244256
final (GoogleMapsFlutterAndroid maps, MockMapsApi api) =
@@ -478,6 +490,94 @@ void main() {
478490
}
479491
});
480492

493+
test('updateMarkers passes expected arguments (AdvancedMarkers)', () async {
494+
const int mapId = 1;
495+
final (GoogleMapsFlutterAndroid maps, MockMapsApi api) =
496+
setUpMockMap(mapId: mapId);
497+
498+
const AdvancedMarker object1 = AdvancedMarker(markerId: MarkerId('1'));
499+
const AdvancedMarker object2old = AdvancedMarker(markerId: MarkerId('2'));
500+
final AdvancedMarker object2new = object2old.copyWith(rotationParam: 42);
501+
const AdvancedMarker object3 = AdvancedMarker(markerId: MarkerId('3'));
502+
await maps.updateMarkers(
503+
MarkerUpdates.from(
504+
<AdvancedMarker>{object1, object2old},
505+
<AdvancedMarker>{object2new, object3},
506+
),
507+
mapId: mapId);
508+
509+
final VerificationResult verification =
510+
verify(api.updateMarkers(captureAny, captureAny, captureAny));
511+
final List<PlatformMarker?> toAdd =
512+
verification.captured[0] as List<PlatformMarker?>;
513+
final List<PlatformMarker?> toChange =
514+
verification.captured[1] as List<PlatformMarker?>;
515+
final List<String?> toRemove = verification.captured[2] as List<String?>;
516+
// Object one should be removed.
517+
expect(toRemove.length, 1);
518+
expect(toRemove.first, object1.markerId.value);
519+
// Object two should be changed.
520+
{
521+
expect(toChange.length, 1);
522+
final List<Object?>? encoded = toChange.first?.encode() as List<Object?>?;
523+
expect(encoded?[0], object2new.alpha);
524+
final PlatformOffset? offset = encoded?[1] as PlatformOffset?;
525+
expect(offset?.dx, object2new.anchor.dx);
526+
expect(offset?.dy, object2new.anchor.dy);
527+
expect(encoded?.getRange(2, 6).toList(), <Object?>[
528+
object2new.consumeTapEvents,
529+
object2new.draggable,
530+
object2new.flat,
531+
object2new.icon.toJson(),
532+
]);
533+
final PlatformInfoWindow? window = encoded?[6] as PlatformInfoWindow?;
534+
expect(window?.title, object2new.infoWindow.title);
535+
expect(window?.snippet, object2new.infoWindow.snippet);
536+
expect(window?.anchor.dx, object2new.infoWindow.anchor.dx);
537+
expect(window?.anchor.dy, object2new.infoWindow.anchor.dy);
538+
final PlatformLatLng? latLng = encoded?[7] as PlatformLatLng?;
539+
expect(latLng?.latitude, object2new.position.latitude);
540+
expect(latLng?.longitude, object2new.position.longitude);
541+
expect(encoded?.getRange(8, 13), <Object?>[
542+
object2new.rotation,
543+
object2new.visible,
544+
object2new.zIndex,
545+
object2new.markerId.value,
546+
object2new.clusterManagerId?.value,
547+
]);
548+
}
549+
// Object 3 should be added.
550+
{
551+
expect(toAdd.length, 1);
552+
final List<Object?>? encoded = toAdd.first?.encode() as List<Object?>?;
553+
expect(encoded?[0], object3.alpha);
554+
final PlatformOffset? offset = encoded?[1] as PlatformOffset?;
555+
expect(offset?.dx, object3.anchor.dx);
556+
expect(offset?.dy, object3.anchor.dy);
557+
expect(encoded?.getRange(2, 6).toList(), <Object?>[
558+
object3.consumeTapEvents,
559+
object3.draggable,
560+
object3.flat,
561+
object3.icon.toJson(),
562+
]);
563+
final PlatformInfoWindow? window = encoded?[6] as PlatformInfoWindow?;
564+
expect(window?.title, object3.infoWindow.title);
565+
expect(window?.snippet, object3.infoWindow.snippet);
566+
expect(window?.anchor.dx, object3.infoWindow.anchor.dx);
567+
expect(window?.anchor.dy, object3.infoWindow.anchor.dy);
568+
final PlatformLatLng? latLng = encoded?[7] as PlatformLatLng?;
569+
expect(latLng?.latitude, object3.position.latitude);
570+
expect(latLng?.longitude, object3.position.longitude);
571+
expect(encoded?.getRange(8, 13), <Object?>[
572+
object3.rotation,
573+
object3.visible,
574+
object3.zIndex,
575+
object3.markerId.value,
576+
object3.clusterManagerId?.value,
577+
]);
578+
}
579+
});
580+
481581
test('updatePolygons passes expected arguments', () async {
482582
const int mapId = 1;
483583
final (GoogleMapsFlutterAndroid maps, MockMapsApi api) =
@@ -1276,12 +1376,101 @@ void main() {
12761376
textDirection: TextDirection.ltr,
12771377
markerType: MarkerType.legacy,
12781378
),
1279-
mapConfiguration: const MapConfiguration(mapId: cloudMapId)));
1379+
// Here deprecated cloudMapId is used to test that creation params have
1380+
// the correct mapId
1381+
mapConfiguration: const MapConfiguration(cloudMapId: cloudMapId)));
12801382

12811383
expect(
12821384
await passedCloudMapIdCompleter.future,
12831385
cloudMapId,
12841386
reason: 'Should pass cloudMapId on PlatformView creation message',
12851387
);
12861388
});
1389+
1390+
testWidgets('mapId is passed', (WidgetTester tester) async {
1391+
const String mapId = '000000000000000'; // Dummy map ID.
1392+
final Completer<String> passedMapIdCompleter = Completer<String>();
1393+
1394+
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
1395+
.setMockMethodCallHandler(
1396+
SystemChannels.platform_views,
1397+
(MethodCall methodCall) async {
1398+
if (methodCall.method == 'create') {
1399+
final Map<String, dynamic> args = Map<String, dynamic>.from(
1400+
methodCall.arguments as Map<dynamic, dynamic>);
1401+
if (args.containsKey('params')) {
1402+
final Uint8List paramsUint8List = args['params'] as Uint8List;
1403+
final ByteData byteData = ByteData.sublistView(paramsUint8List);
1404+
final PlatformMapViewCreationParams? creationParams =
1405+
MapsApi.pigeonChannelCodec.decodeMessage(byteData)
1406+
as PlatformMapViewCreationParams?;
1407+
if (creationParams != null) {
1408+
final String? passedMapId = creationParams.mapConfiguration.mapId;
1409+
if (passedMapId != null) {
1410+
passedMapIdCompleter.complete(passedMapId);
1411+
}
1412+
}
1413+
}
1414+
}
1415+
return 0;
1416+
},
1417+
);
1418+
1419+
final GoogleMapsFlutterAndroid maps = GoogleMapsFlutterAndroid();
1420+
1421+
await tester.pumpWidget(maps.buildViewWithConfiguration(1, (int id) {},
1422+
widgetConfiguration: const MapWidgetConfiguration(
1423+
initialCameraPosition: CameraPosition(target: LatLng(0, 0), zoom: 1),
1424+
textDirection: TextDirection.ltr,
1425+
markerType: MarkerType.legacy,
1426+
),
1427+
mapConfiguration: const MapConfiguration(mapId: mapId)));
1428+
1429+
expect(
1430+
await passedMapIdCompleter.future,
1431+
mapId,
1432+
reason: 'Should pass mapId on PlatformView creation message',
1433+
);
1434+
});
1435+
1436+
test(
1437+
'Correct marker type is padded to platform view',
1438+
() async {
1439+
final GoogleMapsFlutterAndroid maps = GoogleMapsFlutterAndroid();
1440+
final Widget widget = maps.buildViewWithConfiguration(
1441+
1,
1442+
(int _) {},
1443+
widgetConfiguration: const MapWidgetConfiguration(
1444+
initialCameraPosition: CameraPosition(target: LatLng(0, 0), zoom: 1),
1445+
textDirection: TextDirection.ltr,
1446+
markerType: MarkerType.advanced,
1447+
),
1448+
);
1449+
1450+
expect(widget, isA<AndroidView>());
1451+
final dynamic creationParams = (widget as AndroidView).creationParams;
1452+
expect(creationParams, isA<PlatformMapViewCreationParams>());
1453+
expect(
1454+
(creationParams as PlatformMapViewCreationParams).markerType,
1455+
PlatformMarkerType.advanced,
1456+
);
1457+
1458+
final Widget widget2 = maps.buildViewWithConfiguration(
1459+
1,
1460+
(int _) {},
1461+
widgetConfiguration: const MapWidgetConfiguration(
1462+
initialCameraPosition: CameraPosition(target: LatLng(0, 0), zoom: 1),
1463+
textDirection: TextDirection.ltr,
1464+
markerType: MarkerType.legacy,
1465+
),
1466+
);
1467+
expect(widget2, isA<AndroidView>());
1468+
expect(
1469+
((widget2 as AndroidView).creationParams
1470+
as PlatformMapViewCreationParams)
1471+
.markerType,
1472+
PlatformMarkerType.legacy,
1473+
);
1474+
},
1475+
);
12871476
}

packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMClusterManagersControllerTests.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ - (void)testClustering {
3535
[[FLTMarkersController alloc] initWithMapView:mapView
3636
callbackHandler:handler
3737
clusterManagersController:clusterManagersController
38-
registrar:registrar];
38+
registrar:registrar
39+
markerType:FGMPlatformMarkerTypeLegacy];
3940

4041
// Add cluster managers.
4142
NSString *clusterManagerId = @"cm";

packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTests.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ - (FGMPlatformMapViewCreationParams *)emptyCreationParameters {
212212
initialTileOverlays:@[]
213213
initialClusterManagers:@[]
214214
initialGroundOverlays:@[]];
215+
markerType:FGMPlatformMarkerTypeLegacy];
215216
}
216217

217218
@end

packages/google_maps_flutter/google_maps_flutter_ios/example/ios15/ios/RunnerTests/GoogleMapsTests.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ - (FGMPlatformMapViewCreationParams *)emptyCreationParameters {
105105
initialTileOverlays:@[]
106106
initialClusterManagers:@[]
107107
initialGroundOverlays:@[]];
108+
markerType:FGMPlatformMarkerTypeLegacy];
108109
}
109110

110111
@end

0 commit comments

Comments
 (0)