mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2024-11-25 17:00:39 +00:00
VolumeKeysNotifier
tests
This commit is contained in:
parent
3993abb68b
commit
002b7c985a
5 changed files with 61 additions and 9 deletions
|
@ -3,7 +3,7 @@ import 'package:flutter/services.dart';
|
||||||
import 'package:platform/platform.dart';
|
import 'package:platform/platform.dart';
|
||||||
|
|
||||||
class VolumeEventsService {
|
class VolumeEventsService {
|
||||||
final LocalPlatform localPlatform;
|
final LocalPlatform _localPlatform;
|
||||||
|
|
||||||
@visibleForTesting
|
@visibleForTesting
|
||||||
static const volumeHandlingChannel = MethodChannel("com.vodemn.lightmeter/volumeHandling");
|
static const volumeHandlingChannel = MethodChannel("com.vodemn.lightmeter/volumeHandling");
|
||||||
|
@ -11,12 +11,12 @@ class VolumeEventsService {
|
||||||
@visibleForTesting
|
@visibleForTesting
|
||||||
static const volumeEventsChannel = EventChannel("com.vodemn.lightmeter/volumeEvents");
|
static const volumeEventsChannel = EventChannel("com.vodemn.lightmeter/volumeEvents");
|
||||||
|
|
||||||
const VolumeEventsService(this.localPlatform);
|
const VolumeEventsService(this._localPlatform);
|
||||||
|
|
||||||
/// If set to `false` we allow system to handle key events.
|
/// If set to `false` we allow system to handle key events.
|
||||||
/// Returns current status of volume handling.
|
/// Returns current status of volume handling.
|
||||||
Future<bool> setVolumeHandling(bool enableHandling) async {
|
Future<bool> setVolumeHandling(bool enableHandling) async {
|
||||||
if (!localPlatform.isAndroid) {
|
if (!_localPlatform.isAndroid) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return volumeHandlingChannel
|
return volumeHandlingChannel
|
||||||
|
@ -29,7 +29,7 @@ class VolumeEventsService {
|
||||||
/// KEYCODE_VOLUME_DOWN = 25;
|
/// KEYCODE_VOLUME_DOWN = 25;
|
||||||
/// pressed
|
/// pressed
|
||||||
Stream<int> volumeButtonsEventStream() {
|
Stream<int> volumeButtonsEventStream() {
|
||||||
if (!localPlatform.isAndroid) {
|
if (!_localPlatform.isAndroid) {
|
||||||
return const Stream.empty();
|
return const Stream.empty();
|
||||||
}
|
}
|
||||||
return volumeEventsChannel
|
return volumeEventsChannel
|
||||||
|
|
|
@ -10,9 +10,9 @@ import 'package:lightmeter/screens/metering/communication/event_communication_me
|
||||||
as communication_events;
|
as communication_events;
|
||||||
import 'package:lightmeter/screens/metering/communication/state_communication_metering.dart'
|
import 'package:lightmeter/screens/metering/communication/state_communication_metering.dart'
|
||||||
as communication_states;
|
as communication_states;
|
||||||
import 'package:lightmeter/screens/metering/components/shared/volume_keys_notifier/notifier_volume_keys.dart';
|
|
||||||
import 'package:lightmeter/screens/metering/event_metering.dart';
|
import 'package:lightmeter/screens/metering/event_metering.dart';
|
||||||
import 'package:lightmeter/screens/metering/state_metering.dart';
|
import 'package:lightmeter/screens/metering/state_metering.dart';
|
||||||
|
import 'package:lightmeter/screens/metering/utils/notifier_volume_keys.dart';
|
||||||
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
||||||
|
|
||||||
class MeteringBloc extends Bloc<MeteringEvent, MeteringState> {
|
class MeteringBloc extends Bloc<MeteringEvent, MeteringState> {
|
||||||
|
|
|
@ -4,8 +4,8 @@ import 'package:lightmeter/interactors/metering_interactor.dart';
|
||||||
import 'package:lightmeter/providers/services_provider.dart';
|
import 'package:lightmeter/providers/services_provider.dart';
|
||||||
import 'package:lightmeter/screens/metering/bloc_metering.dart';
|
import 'package:lightmeter/screens/metering/bloc_metering.dart';
|
||||||
import 'package:lightmeter/screens/metering/communication/bloc_communication_metering.dart';
|
import 'package:lightmeter/screens/metering/communication/bloc_communication_metering.dart';
|
||||||
import 'package:lightmeter/screens/metering/components/shared/volume_keys_notifier/notifier_volume_keys.dart';
|
|
||||||
import 'package:lightmeter/screens/metering/screen_metering.dart';
|
import 'package:lightmeter/screens/metering/screen_metering.dart';
|
||||||
|
import 'package:lightmeter/screens/metering/utils/notifier_volume_keys.dart';
|
||||||
|
|
||||||
class MeteringFlow extends StatefulWidget {
|
class MeteringFlow extends StatefulWidget {
|
||||||
const MeteringFlow({super.key});
|
const MeteringFlow({super.key});
|
||||||
|
|
|
@ -5,12 +5,12 @@ import 'package:lightmeter/data/models/volume_action.dart';
|
||||||
import 'package:lightmeter/data/volume_events_service.dart';
|
import 'package:lightmeter/data/volume_events_service.dart';
|
||||||
|
|
||||||
class VolumeKeysNotifier extends ChangeNotifier with RouteAware {
|
class VolumeKeysNotifier extends ChangeNotifier with RouteAware {
|
||||||
final VolumeEventsService volumeEventsService;
|
final VolumeEventsService _volumeEventsService;
|
||||||
late final StreamSubscription<VolumeKey> _volumeKeysSubscription;
|
late final StreamSubscription<VolumeKey> _volumeKeysSubscription;
|
||||||
VolumeKey _value = VolumeKey.up;
|
VolumeKey _value = VolumeKey.up;
|
||||||
|
|
||||||
VolumeKeysNotifier(this.volumeEventsService) {
|
VolumeKeysNotifier(this._volumeEventsService) {
|
||||||
_volumeKeysSubscription = volumeEventsService
|
_volumeKeysSubscription = _volumeEventsService
|
||||||
.volumeButtonsEventStream()
|
.volumeButtonsEventStream()
|
||||||
.map((event) => event == 24 ? VolumeKey.up : VolumeKey.down)
|
.map((event) => event == 24 ? VolumeKey.up : VolumeKey.down)
|
||||||
.listen((event) {
|
.listen((event) {
|
||||||
|
@ -19,6 +19,8 @@ class VolumeKeysNotifier extends ChangeNotifier with RouteAware {
|
||||||
}
|
}
|
||||||
|
|
||||||
VolumeKey get value => _value;
|
VolumeKey get value => _value;
|
||||||
|
|
||||||
|
@protected
|
||||||
set value(VolumeKey newValue) {
|
set value(VolumeKey newValue) {
|
||||||
_value = newValue;
|
_value = newValue;
|
||||||
notifyListeners();
|
notifyListeners();
|
50
test/screens/metering/utils/notifier_volume_keys_test.dart
Normal file
50
test/screens/metering/utils/notifier_volume_keys_test.dart
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:lightmeter/data/models/volume_action.dart';
|
||||||
|
import 'package:lightmeter/data/volume_events_service.dart';
|
||||||
|
import 'package:lightmeter/screens/metering/utils/notifier_volume_keys.dart';
|
||||||
|
import 'package:mocktail/mocktail.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
class _MockVolumeEventsService extends Mock implements VolumeEventsService {}
|
||||||
|
|
||||||
|
class _ValueChanged {
|
||||||
|
void onChanged(VolumeKey value) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MockValueChanged extends Mock implements _ValueChanged {}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
late _MockVolumeEventsService mockVolumeEventsService;
|
||||||
|
|
||||||
|
setUp(() {
|
||||||
|
mockVolumeEventsService = _MockVolumeEventsService();
|
||||||
|
});
|
||||||
|
|
||||||
|
test(
|
||||||
|
'Listen to `volumeButtonsEventStream()`',
|
||||||
|
() async {
|
||||||
|
final StreamController<int> volumeButtonsEvents = StreamController<int>();
|
||||||
|
when(() => mockVolumeEventsService.volumeButtonsEventStream()).thenAnswer((_) => volumeButtonsEvents.stream);
|
||||||
|
|
||||||
|
final volumeKeysNotifier = VolumeKeysNotifier(mockVolumeEventsService);
|
||||||
|
final functions = _MockValueChanged();
|
||||||
|
volumeKeysNotifier.addListener(() => functions.onChanged(volumeKeysNotifier.value));
|
||||||
|
expect(volumeKeysNotifier.value, VolumeKey.up);
|
||||||
|
|
||||||
|
volumeButtonsEvents.add(25);
|
||||||
|
volumeButtonsEvents.add(25);
|
||||||
|
volumeButtonsEvents.add(25);
|
||||||
|
volumeButtonsEvents.add(24);
|
||||||
|
volumeButtonsEvents.add(24);
|
||||||
|
volumeButtonsEvents.add(25);
|
||||||
|
await Future.delayed(Duration.zero);
|
||||||
|
verify(() => functions.onChanged(VolumeKey.up)).called(2);
|
||||||
|
verify(() => functions.onChanged(VolumeKey.down)).called(4);
|
||||||
|
|
||||||
|
volumeKeysNotifier.removeListener(() => functions.onChanged(volumeKeysNotifier.value));
|
||||||
|
await volumeKeysNotifier.dispose();
|
||||||
|
await volumeButtonsEvents.close();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
Loading…
Reference in a new issue