libSDL2pp/tests/live_mixer.cc
Dmitry Marakasov 24482d85f6 Follow SDL2 include path conventions
Though these are broken and error prone, as they ignore the possibility
of conflicts between SDL, SDL2 and wrappers thereof discarding useful
include path prefix (SDL2/), since SDL and satellite libraries follow
these it's too hard to stay away.

So don't use prefixes for SDL include paths any longer.
2017-02-08 13:19:04 +03:00

237 lines
6.7 KiB
C++

#include <vector>
#include <SDL.h>
#include <SDL2pp/SDL2pp.hh>
#include "testing.h"
#include "movetest.hh"
using namespace SDL2pp;
BEGIN_TEST(int, char*[])
SDL sdl(SDL_INIT_AUDIO);
SDLMixer mixerlib(MIX_INIT_OGG);
{
// Init
EXPECT_EQUAL(mixerlib.GetInitFlags(), MIX_INIT_OGG, "Mix_Init(0) doesn't return mask of init'd loaders", NON_FATAL);
EXPECT_TRUE(mixerlib.InitMore(MIX_INIT_FLAC) & MIX_INIT_FLAC);
EXPECT_EQUAL(mixerlib.GetInitFlags(), MIX_INIT_OGG | MIX_INIT_FLAC, "Mix_Init(0) doesn't return mask of init'd loaders", NON_FATAL);
}
Mixer mixer(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 4096);
Chunk sound(TESTDATA_DIR "/test.ogg");
Music music(TESTDATA_DIR "/test.ogg");
MOVE_TEST(Chunk, sound, Get, nullptr);
MOVE_TEST(Music, music, Get, nullptr);
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()