ocarina/tests/core/audio.cpp

209 lines
4.5 KiB
C++
Raw Normal View History

/*
* Copyright 2013 (c) Anna Schumaker.
*/
#include <core/audio.h>
#include <core/driver.h>
#include <core/library.h>
#include <core/tags/tags.h>
#include <tests/test.h>
Track *TRACK_NULL = NULL;
class TestDriver : public Driver
{
public:
bool playing;
long cur_pos;
long cur_duration;
std::string cur_file;
TestDriver() : playing(false), cur_pos(0), cur_duration(0) {}
~TestDriver() {};
void load(Track *track)
{
cur_file = track->path();
playing = false;
cur_pos = 0;
}
bool play()
{
playing = true;
return true;
}
bool pause()
{
playing = false;
return true;
}
bool is_playing() { return playing; }
void seek_to(long offset) { cur_pos = offset; }
long position() { return cur_pos; }
long duration() { return cur_duration; }
};
void test_pre_init()
{
TestDriver *driver = (TestDriver *)audio :: get_driver();
test_equal(audio :: current_track(), TRACK_NULL);
audio :: play();
test_equal(driver->playing, false);
driver->playing = true;
audio :: pause();
test_equal(driver->playing, true);
audio :: stop();
test_equal(driver->playing, true);
driver->playing = false;
audio :: seek_to(4242);
test_equal(driver->position(), (long)0);
driver->cur_pos = 4242;
test_equal(audio :: position(), (long)0);
driver->cur_pos = 0;
driver->cur_duration = 4242;
test_equal(audio :: duration(), (long)0);
driver->cur_duration = 0;
audio :: next();
test_equal(audio :: current_track(), TRACK_NULL);
audio :: prev();
test_equal(audio :: current_track(), TRACK_NULL);
}
void test_init()
{
Track *track;
test :: cp_data_dir();
audio :: init();
track = audio :: current_track();
test_equal(track, TRACK_NULL);
tags :: init();
library :: init();
audio :: init();
track = audio :: current_track();
test_not_equal(track, TRACK_NULL);
}
void test_playback_controls()
{
TestDriver *driver = (TestDriver *)audio :: get_driver();
audio :: play();
test_equal(driver->playing, true);
audio :: pause();
test_equal(driver->playing, false);
audio :: seek_to(4242);
test_equal(driver->cur_pos, (long)4242);
test_equal(audio :: position(), (long)4242);
audio :: play();
audio :: stop();
test_equal(driver->playing, false);
test_equal(driver->cur_pos, (long)0);
audio :: seek_to(4242);
driver->cur_duration = 424242;
test_equal(audio :: position(), (long)4242);
test_equal(audio :: duration(), (long)424242);
audio :: seek_to(83 * O_SECOND);
test_equal(audio :: position_str(), (std::string)"1:23");
}
void test_track_controls()
{
Track *track = NULL;
TestDriver *driver = (TestDriver *)audio :: get_driver();
library :: get_queue()->unset_flag(Q_RANDOM);
audio :: pause();
audio :: next();
test_not_equal(audio :: current_track()->index(), (unsigned)2);
test_equal(driver->is_playing(), false);
audio :: play();
audio :: next();
test_equal(driver->is_playing(), true);
audio :: load_track(track);
test_not_equal(audio :: current_track(), track);
track = tags :: get_track(0);
audio :: seek_to(4242);
audio :: load_track(track);
test_equal(driver->is_playing(), true);
test_equal(audio :: position(), (long)0);
audio :: seek_to(4242);
audio :: load_track(track);
test_equal(driver->is_playing(), true);
test_equal(audio :: position(), (long)4242);
track = audio :: current_track();
driver->eos();
test_not_equal(audio :: current_track(), track);
}
void test_autopause()
{
TestDriver *driver = (TestDriver *)audio :: get_driver();
audio :: play();
test_equal(audio :: pause_enabled(), false);
test_equal(audio :: pause_count(), (unsigned)0);
audio :: pause_after(true, 3);
test_equal(audio :: pause_enabled(), true);
test_equal(audio :: pause_count(), (unsigned)3);
audio :: pause_after(false, 3);
test_equal(audio :: pause_enabled(), false);
test_equal(audio :: pause_count(), (unsigned)3);
audio :: pause_after(false, 5);
test_equal(audio :: pause_enabled(), true);
test_equal(audio :: pause_count(), (unsigned)5);
for (int i = 4; i >= 0; i--) {
driver->eos();
test_equal(audio :: pause_enabled(), true);
test_equal(audio :: pause_count(), (unsigned)i);
test_equal(driver->is_playing(), true);
}
driver->eos();
test_equal(audio :: pause_enabled(), false);
test_equal(audio :: pause_count(), (unsigned)0);
test_equal(driver->is_playing(), false);
}
int main(int argc, char **argv)
{
TestDriver driver;
run_test("Test Audio Pre-Init", test_pre_init);
run_test("Test Audio Init", test_init);
run_test("Test Audio Playback Controls", test_playback_controls);
run_test("Test Audio Track Controls", test_track_controls);
run_test("Test Audio Automatic Pausing", test_autopause);
return 0;
}