Files
SpotiFLAC-Mobile/test/preview_player_runtime_test.dart
T

52 lines
2.0 KiB
Dart

import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:spotiflac_android/providers/music_player_provider.dart';
import 'package:spotiflac_android/providers/preview_player_provider.dart';
import 'package:spotiflac_android/services/music_player_service.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
ProviderContainer previews(MusicPlayerRuntime runtime) => ProviderContainer(
overrides: [musicPlayerRuntimeProvider.overrideWithValue(runtime)],
);
test('preview ownership stays within its playback runtime', () async {
final firstRuntime = MusicPlayerRuntime();
final secondRuntime = MusicPlayerRuntime();
final first = previews(firstRuntime);
final second = previews(secondRuntime);
first.read(previewPlayerProvider);
second.read(previewPlayerProvider);
final secondHook = secondRuntime.exclusiveAudioHook;
expect(firstRuntime.exclusiveAudioHook, isNotNull);
expect(secondHook, isNotNull);
expect(firstRuntime.exclusiveAudioHook, isNot(same(secondHook)));
first.dispose();
expect(firstRuntime.exclusiveAudioHook, isNull);
expect(secondRuntime.exclusiveAudioHook, same(secondHook));
second.dispose();
expect(secondRuntime.exclusiveAudioHook, isNull);
await firstRuntime.dispose();
await secondRuntime.dispose();
});
test('disposing an old preview preserves the new audio owner', () async {
final runtime = MusicPlayerRuntime();
final first = previews(runtime);
final second = previews(runtime);
first.read(previewPlayerProvider);
final firstHook = runtime.exclusiveAudioHook;
second.read(previewPlayerProvider);
final secondHook = runtime.exclusiveAudioHook;
expect(firstHook, isNot(same(secondHook)));
first.dispose();
expect(runtime.exclusiveAudioHook, same(secondHook));
second.dispose();
expect(runtime.exclusiveAudioHook, isNull);
await runtime.dispose();
});
}