From 3953d77a9b520f3a79133c121150240c7882475d Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Mon, 7 Sep 2015 01:59:59 +0300 Subject: [PATCH] Add mixer live test --- tests/CMakeLists.txt | 4 + tests/live_mixer.cc | 202 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 tests/live_mixer.cc diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 734e6ef..f853d69 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -11,6 +11,10 @@ SET(LIVE_TESTS live_rendering ) +IF(SDL2PP_WITH_MIXER) + SET(LIVE_TESTS ${LIVE_TESTS} live_mixer) +ENDIF(SDL2PP_WITH_MIXER) + # disable self-move warning: it's deliberately used in tests INCLUDE(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-Wno-self-move" COMPILER_SUPPORTS_WNOSELFMOVE) diff --git a/tests/live_mixer.cc b/tests/live_mixer.cc new file mode 100644 index 0000000..49bdf3a --- /dev/null +++ b/tests/live_mixer.cc @@ -0,0 +1,202 @@ +#include + +#include +#include + +#include "testing.h" + +using namespace SDL2pp; + +BEGIN_TEST() + SDL sdl(SDL_INIT_AUDIO); + SDLMixer mixerlib; + + Mixer mixer(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 4096); + + Chunk sound(TESTDATA_DIR "/test.ogg"); + Music music(TESTDATA_DIR "/test.ogg"); + + EXPECT_TRUE(sound.Get()); + EXPECT_TRUE(music.Get()); + + constexpr int delay = 500; + + // Chunk methods + { + int prevvol = sound.GetVolume(); + EXPECT_EQUAL(sound.SetVolume(MIX_MAX_VOLUME/2), prevvol); + EXPECT_EQUAL(sound.GetVolume(), MIX_MAX_VOLUME/2); + } + + // Music methods + EXPECT_EQUAL(music.GetType(), MUS_OGG); + + // Mixer: channels + EXPECT_TRUE(mixer.GetNumChannels() > 0); + EXPECT_EQUAL(mixer.AllocateChannels(10), 10); + EXPECT_EQUAL(mixer.GetNumChannels(), 10); + + // Mixer: volume + { + int prevvol = mixer.GetVolume(0); + EXPECT_EQUAL(mixer.SetVolume(0, MIX_MAX_VOLUME/2), prevvol); + EXPECT_EQUAL(mixer.GetVolume(0), MIX_MAX_VOLUME/2); + } + + // Mixer: idle channel status + EXPECT_EQUAL(mixer.IsChannelPlaying(0), 0); + EXPECT_EQUAL(mixer.IsChannelPaused(0), 0); + EXPECT_EQUAL(mixer.GetChannelFading(0), MIX_NO_FADING); + + // Mixer: basic playing, operations and status examination + int chan = mixer.PlayChannel(-1, sound); + EXPECT_TRUE(chan >= 0); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 1); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING); + + mixer.PauseChannel(chan); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 1); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 1); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING); + + mixer.ResumeChannel(chan); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 1); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING); + + mixer.ExpireChannel(chan, delay); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 1); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING); + + SDL_Delay(delay * 2); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 0); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING); + + // Mixer: timed play + chan = mixer.PlayChannel(-1, sound, -1, delay); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 1); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING); + + SDL_Delay(delay * 2); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 0); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING); + + // Mixer: fading + chan = mixer.FadeInChannel(-1, sound, -1, delay); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 1); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_FADING_IN); + + SDL_Delay(delay * 2); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 1); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING); + + EXPECT_EQUAL(mixer.FadeOutChannel(chan, 500), 1); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 1); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_FADING_OUT); + + SDL_Delay(delay * 2); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 0); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING); + + // Mixer: timed fading, halt + chan = mixer.FadeInChannel(-1, sound, -1, delay, delay * 4); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 1); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_FADING_IN); + + SDL_Delay(delay * 2); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 1); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING); + + mixer.HaltChannel(-1); + + EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 0); + EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0); + EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING); + + // Mixer: music volume + { + int prevvol = mixer.GetMusicVolume(); + EXPECT_EQUAL(mixer.SetMusicVolume(MIX_MAX_VOLUME/2), prevvol); + EXPECT_EQUAL(mixer.GetMusicVolume(), MIX_MAX_VOLUME/2); + } + + // Mixer: music + EXPECT_EQUAL(mixer.IsMusicPlaying(), false); + + mixer.PlayMusic(music, -1); + + EXPECT_EQUAL(mixer.IsMusicPlaying(), true); + EXPECT_EQUAL(mixer.IsMusicPaused(), false); + EXPECT_EQUAL(mixer.GetMusicFading(), MIX_NO_FADING); + + mixer.PauseMusic(); + + EXPECT_EQUAL(mixer.IsMusicPlaying(), true); + EXPECT_EQUAL(mixer.IsMusicPaused(), true); + EXPECT_EQUAL(mixer.GetMusicFading(), MIX_NO_FADING); + + mixer.ResumeMusic(); + + EXPECT_EQUAL(mixer.IsMusicPlaying(), true); + EXPECT_EQUAL(mixer.IsMusicPaused(), false); + EXPECT_EQUAL(mixer.GetMusicFading(), MIX_NO_FADING); + + EXPECT_EQUAL(mixer.FadeOutMusic(delay), true); + + EXPECT_EQUAL(mixer.IsMusicPlaying(), true); + EXPECT_EQUAL(mixer.IsMusicPaused(), false); + EXPECT_EQUAL(mixer.GetMusicFading(), MIX_FADING_OUT); + + SDL_Delay(delay * 2); + + EXPECT_EQUAL(mixer.IsMusicPlaying(), false); + EXPECT_EQUAL(mixer.IsMusicPaused(), false); + EXPECT_EQUAL(mixer.GetMusicFading(), MIX_NO_FADING); + + // Mixer: music fadein, rewind, halt + mixer.FadeInMusic(music, -1, delay); + + EXPECT_EQUAL(mixer.IsMusicPlaying(), true); + EXPECT_EQUAL(mixer.IsMusicPaused(), false); + EXPECT_EQUAL(mixer.GetMusicFading(), MIX_FADING_IN); + + SDL_Delay(delay * 2); + + EXPECT_EQUAL(mixer.IsMusicPlaying(), true); + EXPECT_EQUAL(mixer.IsMusicPaused(), false); + EXPECT_EQUAL(mixer.GetMusicFading(), MIX_NO_FADING); + + mixer.RewindMusic(); + + mixer.SetMusicPosition(0.0); + + mixer.HaltMusic(); + + EXPECT_EQUAL(mixer.IsMusicPlaying(), false); + EXPECT_EQUAL(mixer.IsMusicPaused(), false); + EXPECT_EQUAL(mixer.GetMusicFading(), MIX_NO_FADING); +END_TEST()