flutter app untuk unitstock
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

133 line
4.0 KiB

  1. import 'dart:async';
  2. import 'package:flutter_test/flutter_test.dart';
  3. import 'package:location/location.dart';
  4. import 'package:location_platform_interface/location_platform_interface.dart';
  5. import 'package:mockito/mockito.dart';
  6. import 'package:plugin_platform_interface/plugin_platform_interface.dart';
  7. void main() {
  8. TestWidgetsFlutterBinding.ensureInitialized();
  9. final Location location = Location();
  10. final LocationPlatformMock platform = LocationPlatformMock();
  11. LocationPlatform.instance = platform;
  12. tearDown(resetMockitoState);
  13. group('getLocation', () {
  14. when(platform.getLocation()).thenAnswer((_) async {
  15. return LocationData.fromMap(<String, double>{
  16. 'latitude': 48.8534,
  17. 'longitude': 2.3488,
  18. });
  19. });
  20. test('getLocation should convert results correctly', () async {
  21. final LocationData receivedLocation = await location.getLocation();
  22. expect(receivedLocation.latitude, 48.8534);
  23. expect(receivedLocation.longitude, 2.3488);
  24. });
  25. test('getLocation should convert to string correctly', () async {
  26. final LocationData receivedLocation = await location.getLocation();
  27. expect(receivedLocation.toString(),
  28. 'LocationData<lat: ${receivedLocation.latitude}, long: ${receivedLocation.longitude}>');
  29. });
  30. });
  31. test('changeSettings', () async {
  32. when(platform.changeSettings(
  33. accuracy: captureAnyNamed('accuracy'),
  34. interval: captureAnyNamed('interval'),
  35. distanceFilter: captureAnyNamed('distanceFilter'),
  36. ));
  37. await location.changeSettings();
  38. final VerificationResult result = verify(platform.changeSettings(
  39. accuracy: captureAnyNamed('accuracy'),
  40. interval: captureAnyNamed('interval'),
  41. distanceFilter: captureAnyNamed('distanceFilter'),
  42. ));
  43. expect(result.callCount, 1);
  44. expect(result.captured[0], LocationAccuracy.high);
  45. expect(result.captured[1], 1000);
  46. expect(result.captured[2], 0);
  47. });
  48. group('serviceEnabled-requestService', () {
  49. when(platform.serviceEnabled()).thenAnswer((_) async => true);
  50. when(platform.requestService()).thenAnswer((_) async => true);
  51. test('serviceEnabled', () async {
  52. final bool result = await location.serviceEnabled();
  53. expect(result, isTrue);
  54. });
  55. test('requestService', () async {
  56. final bool result = await location.requestService();
  57. expect(result, isTrue);
  58. });
  59. });
  60. test('hasPermission', () async {
  61. when(platform.hasPermission())
  62. .thenAnswer((_) async => PermissionStatus.denied);
  63. when(platform.requestPermission())
  64. .thenAnswer((_) async => PermissionStatus.denied);
  65. PermissionStatus receivedPermission = await location.hasPermission();
  66. expect(receivedPermission, PermissionStatus.denied);
  67. receivedPermission = await location.requestPermission();
  68. expect(receivedPermission, PermissionStatus.denied);
  69. });
  70. group('onLocationChanged', () {
  71. StreamController<LocationData> controller;
  72. setUp(() {
  73. controller = StreamController<LocationData>();
  74. when(platform.onLocationChanged)
  75. .thenAnswer((Invocation invoke) => controller.stream);
  76. });
  77. tearDown(() => controller.close());
  78. test('should receive values', () async {
  79. controller.add(LocationData.fromMap(<String, double>{
  80. 'latitude': 48.8534,
  81. 'longitude': 2.3488,
  82. }));
  83. controller.add(LocationData.fromMap(<String, double>{
  84. 'latitude': 42.8534,
  85. 'longitude': 23.3488,
  86. }));
  87. controller.close();
  88. await expectLater(
  89. location.onLocationChanged,
  90. emitsInOrder(
  91. <dynamic>[
  92. LocationData.fromMap(<String, double>{
  93. 'latitude': 48.8534,
  94. 'longitude': 2.3488,
  95. }),
  96. LocationData.fromMap(<String, double>{
  97. 'latitude': 42.8534,
  98. 'longitude': 23.3488,
  99. }),
  100. emitsDone,
  101. ],
  102. ),
  103. );
  104. });
  105. });
  106. }
  107. class LocationPlatformMock extends Mock
  108. with MockPlatformInterfaceMixin
  109. implements LocationPlatform {}