import 'package:tane/services/coarse_location.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); const channel = MethodChannel('org.comunes.tane/coarse_location'); final messenger = TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger; tearDown(() { messenger.setMockMethodCallHandler(channel, null); debugDefaultTargetPlatformOverride = null; }); test('returns the lat/lon the platform channel provides', () async { debugDefaultTargetPlatformOverride = TargetPlatform.android; messenger.setMockMethodCallHandler(channel, (call) async { expect(call.method, 'getCoarseLatLon'); return {'lat': 41.39, 'lon': 2.16}; }); final loc = await const NativeCoarseLocation().currentCoarseLatLon(); expect(loc, isNotNull); expect(loc!.lat, 41.39); expect(loc.lon, 2.16); }); test('returns null when the platform reports no fix (denied/off)', () async { debugDefaultTargetPlatformOverride = TargetPlatform.android; messenger.setMockMethodCallHandler(channel, (call) async => null); expect(await const NativeCoarseLocation().currentCoarseLatLon(), isNull); }); test('returns null instead of throwing on a channel error', () async { debugDefaultTargetPlatformOverride = TargetPlatform.android; messenger.setMockMethodCallHandler(channel, (call) async { throw PlatformException(code: 'boom'); }); expect(await const NativeCoarseLocation().currentCoarseLatLon(), isNull); }); test('returns null off Android without touching the channel', () async { debugDefaultTargetPlatformOverride = TargetPlatform.linux; var invoked = false; messenger.setMockMethodCallHandler(channel, (call) async { invoked = true; return {'lat': 1.0, 'lon': 1.0}; }); expect(await const NativeCoarseLocation().currentCoarseLatLon(), isNull); expect(invoked, isFalse); }); }