-
-
Notifications
You must be signed in to change notification settings - Fork 85
Expand file tree
/
Copy pathgeocoding_test.dart
More file actions
107 lines (91 loc) · 3.02 KB
/
geocoding_test.dart
File metadata and controls
107 lines (91 loc) · 3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:geocoding_android/geocoding_android.dart';
import 'package:geocoding_platform_interface/geocoding_platform_interface.dart';
final mockLocation = Location(
title: '',
description: '',
latitude: 52.2165157,
longitude: 6.9437819,
timestamp: DateTime.fromMillisecondsSinceEpoch(0).toUtc(),
);
const mockPlacemark = Placemark(
administrativeArea: 'Overijssel',
country: 'Netherlands',
isoCountryCode: 'NL',
locality: 'Enschede',
name: 'Gronausestraat',
postalCode: '',
street: 'Gronausestraat 710',
subAdministrativeArea: 'Enschede',
subLocality: 'Enschmarke',
subThoroughfare: '',
thoroughfare: 'Gronausestraat');
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
const channel = MethodChannel('flutter.baseflow.com/geocoding');
late List<MethodCall> log;
setUp(() {
log = <MethodCall>[];
_ambiguate(TestDefaultBinaryMessengerBinding.instance)!
.defaultBinaryMessenger
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
log.add(methodCall);
return null;
});
});
test('registers instance', () {
GeocodingAndroid.registerWith();
expect(GeocodingPlatform.instance, isA<GeocodingAndroid>());
});
group('GeocodingAndroid', () {
test('locationFromAddress', () async {
_ambiguate(TestDefaultBinaryMessengerBinding.instance)!
.defaultBinaryMessenger
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
log.add(methodCall);
return Future<List<Map<dynamic, dynamic>>>.value([
mockLocation.toJson(),
]);
});
final geocoding = GeocodingAndroid();
final locations = await (geocoding.locationFromAddress(''));
expect(
log,
<Matcher>[
isMethodCall('locationFromAddress', arguments: <String, String>{
'address': '',
})
],
);
expect(locations.single, mockLocation);
});
test('placemarkFromCoordinates', () async {
_ambiguate(TestDefaultBinaryMessengerBinding.instance)!
.defaultBinaryMessenger
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
log.add(methodCall);
return Future<List<Map<dynamic, dynamic>>>.value([
mockPlacemark.toJson(),
]);
});
final geocoding = GeocodingAndroid();
final locations = await (geocoding.placemarkFromCoordinates(0, 0));
expect(
log,
<Matcher>[
isMethodCall('placemarkFromCoordinates', arguments: <String, Object?>{
'latitude': 0.0,
'longitude': 0.0,
})
],
);
expect(locations.single, mockPlacemark);
});
});
}
/// This allows a value of type T or T? to be treated as a value of type T?.
///
/// We use this so that APIs that have become non-nullable can still be used
/// with `!` and `?` on the stable branch.
T? _ambiguate<T>(T? value) => value;