mirror of
https://github.com/libSDL2pp/libSDL2pp.git
synced 2025-08-03 10:55:57 -04:00
227 lines
6.3 KiB
C++
227 lines
6.3 KiB
C++
#include <vector>
|
|
|
|
#include <SDL2/SDL.h>
|
|
#include <SDL2pp/SDL2pp.hh>
|
|
|
|
#include "testing.h"
|
|
|
|
using namespace SDL2pp;
|
|
|
|
BEGIN_TEST(int, char*[])
|
|
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: sound finished handler
|
|
// Since we can't pass a closure to SetChannelFinishedHandler,
|
|
// we have to use static var
|
|
static int finchan = -1;
|
|
mixer.SetChannelFinishedHandler([](int chan){ finchan = chan; });
|
|
|
|
// 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);
|
|
EXPECT_EQUAL(finchan, -1);
|
|
|
|
mixer.ResumeChannel(chan);
|
|
|
|
EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 1);
|
|
EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0);
|
|
EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING);
|
|
EXPECT_EQUAL(finchan, -1);
|
|
|
|
mixer.ExpireChannel(chan, delay);
|
|
|
|
EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 1);
|
|
EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0);
|
|
EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING);
|
|
EXPECT_EQUAL(finchan, -1);
|
|
|
|
SDL_Delay(delay * 2);
|
|
|
|
EXPECT_EQUAL(mixer.IsChannelPlaying(chan), 0);
|
|
EXPECT_EQUAL(mixer.IsChannelPaused(chan), 0);
|
|
EXPECT_EQUAL(mixer.GetChannelFading(chan), MIX_NO_FADING);
|
|
EXPECT_EQUAL(finchan, chan);
|
|
|
|
mixer.RemoveChannelFinishedHandler();
|
|
|
|
// 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 finished handler
|
|
static bool finmusic = false;
|
|
mixer.SetMusicFinishedHandler([](){ finmusic = true; });
|
|
|
|
// 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);
|
|
EXPECT_EQUAL(finmusic, false);
|
|
|
|
mixer.PauseMusic();
|
|
|
|
EXPECT_EQUAL(mixer.IsMusicPlaying(), true);
|
|
EXPECT_EQUAL(mixer.IsMusicPaused(), true);
|
|
EXPECT_EQUAL(mixer.GetMusicFading(), MIX_NO_FADING);
|
|
EXPECT_EQUAL(finmusic, false);
|
|
|
|
mixer.ResumeMusic();
|
|
|
|
EXPECT_EQUAL(mixer.IsMusicPlaying(), true);
|
|
EXPECT_EQUAL(mixer.IsMusicPaused(), false);
|
|
EXPECT_EQUAL(mixer.GetMusicFading(), MIX_NO_FADING);
|
|
EXPECT_EQUAL(finmusic, false);
|
|
|
|
EXPECT_EQUAL(mixer.FadeOutMusic(delay), true);
|
|
|
|
EXPECT_EQUAL(mixer.IsMusicPlaying(), true);
|
|
EXPECT_EQUAL(mixer.IsMusicPaused(), false);
|
|
EXPECT_EQUAL(mixer.GetMusicFading(), MIX_FADING_OUT);
|
|
EXPECT_EQUAL(finmusic, false);
|
|
|
|
SDL_Delay(delay * 2);
|
|
|
|
EXPECT_EQUAL(mixer.IsMusicPlaying(), false);
|
|
EXPECT_EQUAL(mixer.IsMusicPaused(), false);
|
|
EXPECT_EQUAL(mixer.GetMusicFading(), MIX_NO_FADING);
|
|
EXPECT_EQUAL(finmusic, true);
|
|
|
|
mixer.RemoveMusicFinishedHandler();
|
|
|
|
// 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()
|