From faf6df60a26466edcef08f438d420417308f38ef Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Tue, 10 May 2022 11:55:55 -0300 Subject: [PATCH] coverage --- .../lib/src/pinball_audio_pool.dart | 2 - .../test/src/pinball_audio_pool_test.dart | 73 +++++++++++++++++++ .../test/src/pinball_audio_test.dart | 4 +- 3 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 packages/pinball_audio/test/src/pinball_audio_pool_test.dart diff --git a/packages/pinball_audio/lib/src/pinball_audio_pool.dart b/packages/pinball_audio/lib/src/pinball_audio_pool.dart index d48421c9..60f92cb3 100644 --- a/packages/pinball_audio/lib/src/pinball_audio_pool.dart +++ b/packages/pinball_audio/lib/src/pinball_audio_pool.dart @@ -1,4 +1,3 @@ -// coverage:ignore-start import 'dart:async'; import 'package:audioplayers/audioplayers.dart'; @@ -86,4 +85,3 @@ class PinballAudioPool { _players.where((entry) => entry.player == player).single.available = true; } } -// coverage:ignore-end diff --git a/packages/pinball_audio/test/src/pinball_audio_pool_test.dart b/packages/pinball_audio/test/src/pinball_audio_pool_test.dart new file mode 100644 index 00000000..319f0992 --- /dev/null +++ b/packages/pinball_audio/test/src/pinball_audio_pool_test.dart @@ -0,0 +1,73 @@ +// ignore_for_file: one_member_abstracts + +import 'package:audioplayers/audioplayers.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:pinball_audio/src/pinball_audio_pool.dart'; + +class _MockAudioPlayer extends Mock implements AudioPlayer {} + +class _MockConfigureAudioCache extends Mock { + void onCall(AudioCache cache); +} + +class _MockPlaySingleAudio extends Mock { + Future onCall(String path, {double volume}); +} + +abstract class _PreCacheSingleAudio { + Future onCall(String path); +} + +class _MockPreCacheSingleAudio extends Mock implements _PreCacheSingleAudio {} + +void main() { + group('PinballAudioPool', () { + late _PreCacheSingleAudio preCacheSingleAudio; + late _MockPlaySingleAudio playSingleAudio; + late PinballAudioPool pool; + late AudioPlayer audioPlayer; + + setUp(() { + preCacheSingleAudio = _MockPreCacheSingleAudio(); + when(() => preCacheSingleAudio.onCall(any())).thenAnswer((_) async {}); + + audioPlayer = _MockAudioPlayer(); + when(() => audioPlayer.play(any(), volume: any(named: 'volume'))) + .thenAnswer((_) async => 1); + + playSingleAudio = _MockPlaySingleAudio(); + when(() => playSingleAudio.onCall(any(), volume: any(named: 'volume'))) + .thenAnswer((_) async => audioPlayer); + + pool = PinballAudioPool( + path: 'path', + poolSize: 1, + preCacheSingleAudio: preCacheSingleAudio.onCall, + playSingleAudio: playSingleAudio.onCall, + duration: const Duration(milliseconds: 10), + ); + }); + + test('pre cache the sound', () async { + await pool.load(); + verify(() => preCacheSingleAudio.onCall('path')).called(1); + }); + + test('plays a fresh sound', () async { + await pool.load(); + await pool.play(); + + verify(() => playSingleAudio.onCall('path', volume: 1)).called(1); + }); + + test('plays from the pool after it returned', () async { + await pool.load(); + await pool.play(); + await Future.delayed(const Duration(milliseconds: 12)); + await pool.play(); + + verify(() => audioPlayer.play('path')).called(1); + }); + }); +} diff --git a/packages/pinball_audio/test/src/pinball_audio_test.dart b/packages/pinball_audio/test/src/pinball_audio_test.dart index 60107d40..92468228 100644 --- a/packages/pinball_audio/test/src/pinball_audio_test.dart +++ b/packages/pinball_audio/test/src/pinball_audio_test.dart @@ -411,7 +411,7 @@ void main() { verify( () => playSingleAudio - .onCall('packages/pinball_audio/${Assets.sfx.dino}'), + .onCall('packages/pinball_audio/${Assets.sfx.dino}', volume: 1), ).called(1); when(clock.now).thenReturn(DateTime(2022, 1, 1, 1, 6)); @@ -419,7 +419,7 @@ void main() { verify( () => playSingleAudio - .onCall('packages/pinball_audio/${Assets.sfx.dino}'), + .onCall('packages/pinball_audio/${Assets.sfx.dino}', volume: 1), ).called(1); }); });