c88746d2da
I move all of the core tests into the core/ directory to keep them together. Gui unit tests will be put in new directories. Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
163 lines
3.9 KiB
C++
163 lines
3.9 KiB
C++
/*
|
|
* Copyright 2013 (c) Anna Schumaker.
|
|
*/
|
|
#include <core/callback.h>
|
|
#include <core/deck.h>
|
|
#include <core/library.h>
|
|
#include <tests/test.h>
|
|
|
|
static Queue *Q_NULL = NULL;
|
|
static Track *TRACK_NULL = NULL;
|
|
|
|
static void test_init()
|
|
{
|
|
unsigned int val;
|
|
File f("deck", 0);
|
|
std::list<TempQueue>::iterator it;
|
|
|
|
test_equal(deck :: next(), TRACK_NULL);
|
|
|
|
test :: cp_data_dir();
|
|
tagdb :: init();
|
|
library :: init();
|
|
deck :: init();
|
|
|
|
test_equal(library :: get_queue()->has_flag(Q_RANDOM), true);
|
|
test_equal(deck :: get_queues().size(), (size_t)2);
|
|
|
|
it = deck :: get_queues().begin();
|
|
test_equal(it->size(), (unsigned)4);
|
|
for (unsigned int i = 0; i < 4; i++)
|
|
test_equal((*it)[i]->id, i);
|
|
|
|
it++;
|
|
test_equal(it->size(), (unsigned)5);
|
|
for (unsigned int i = 0; i < 5; i++)
|
|
test_equal((*it)[i]->id, i + 4);
|
|
|
|
/*
|
|
* Test that we saved the deck in the new format
|
|
*/
|
|
f.open(OPEN_READ);
|
|
test_equal(f.get_version(), (unsigned)1);
|
|
f >> val; /* number of queues */
|
|
test_equal(val, (unsigned)2);
|
|
|
|
for (unsigned int i = 0; i < 2; i++) {
|
|
f >> val; /* queues[i].flags */
|
|
test_equal(val, (unsigned)1);
|
|
|
|
f >> val; /* queues[i].size */
|
|
test_equal(val, 4 + i);
|
|
|
|
for (unsigned int j = 0; j < 4 + i; j++) {
|
|
f >> val;
|
|
test_equal(val, (4 * i) + j);
|
|
}
|
|
}
|
|
|
|
f.close();
|
|
}
|
|
|
|
static unsigned int n = 0;
|
|
static void on_queue_removed(Queue *queue)
|
|
{
|
|
n++;
|
|
}
|
|
|
|
static void test_create_mv_destroy()
|
|
{
|
|
Queue *q1, *q2;
|
|
|
|
q1 = deck :: create(true);
|
|
test_not_equal(q1, Q_NULL);
|
|
test_equal(q1->has_flag(Q_ENABLED), true);
|
|
test_equal(q1->has_flag(Q_RANDOM), true);
|
|
test_equal(deck :: index(q1), (unsigned)2);
|
|
test_equal(deck :: get(2), q1);
|
|
|
|
q2 = deck :: create(false);
|
|
test_not_equal(q2, Q_NULL);
|
|
test_equal(q2->has_flag(Q_ENABLED), true);
|
|
test_equal(q2->has_flag(Q_RANDOM), false);
|
|
test_equal(deck :: index(q2), (unsigned)3);
|
|
test_equal(deck :: get(3), q2);
|
|
|
|
deck :: move(q1, 3);
|
|
test_equal(deck :: index(q1), (unsigned)3);
|
|
deck :: move(q1, 3);
|
|
test_equal(deck :: index(q1), (unsigned)3);
|
|
deck :: move(q1, 2);
|
|
test_equal(deck :: index(q1), (unsigned)2);
|
|
|
|
get_callbacks()->on_pq_removed = on_queue_removed;
|
|
|
|
deck :: destroy(q1);
|
|
test_equal(n, (unsigned)1);
|
|
test_equal(deck :: index(q1), (unsigned)3);
|
|
test_equal(deck :: index(q2), (unsigned)2);
|
|
|
|
deck :: destroy(q2);
|
|
test_equal(n, (unsigned)2);
|
|
test_equal(deck :: index(q2), (unsigned)2);
|
|
|
|
test_equal(deck :: get(3), Q_NULL);
|
|
}
|
|
|
|
static void test_next_prev()
|
|
{
|
|
std::list<TempQueue>::iterator it = deck :: get_queues().begin();
|
|
Queue *q = deck :: get_queue();
|
|
Queue *q0 = &(*it++);
|
|
Queue *q1 = &(*it++);
|
|
|
|
q0->unset_flag(Q_RANDOM);
|
|
for (unsigned int i = 0; i < 4; i++)
|
|
q0->add(tagdb :: lookup(i));
|
|
|
|
test_not_equal(q, Q_NULL);
|
|
test_equal(q->size(), (unsigned)0);
|
|
test_equal(deck :: prev(), TRACK_NULL);
|
|
|
|
for (unsigned int i = 0; i < 2; i++) {
|
|
test_equal(deck :: next()->id, (unsigned)0);
|
|
test_equal(deck :: next()->id, (unsigned)1);
|
|
test_equal(deck :: next()->id, (unsigned)2);
|
|
test_equal(deck :: next()->id, (unsigned)3);
|
|
test_equal(q->size(), (unsigned)4);
|
|
}
|
|
|
|
for (unsigned int i = 0; i < 2; i++) {
|
|
if (i == 1)
|
|
test_equal(deck :: prev()->id, (unsigned)3);
|
|
test_equal(deck :: prev()->id, (unsigned)2);
|
|
test_equal(deck :: prev()->id, (unsigned)1);
|
|
test_equal(deck :: prev()->id, (unsigned)0);
|
|
}
|
|
|
|
test_equal(deck :: get_queues().size(), (size_t)1);
|
|
test_equal(deck :: index(q1), (unsigned)0);
|
|
|
|
q1->unset_flag(Q_ENABLED);
|
|
library :: get_queue()->unset_flag(Q_RANDOM);
|
|
|
|
test_equal(q1->size(), (unsigned)5);
|
|
deck :: next();
|
|
test_equal(q1->size(), (unsigned)5);
|
|
|
|
q1->set_flag(Q_ENABLED);
|
|
for (unsigned int i = 0; i < 5; i++)
|
|
deck :: next();
|
|
test_equal(deck :: get_queues().size(), (size_t)0);
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
test :: rm_data_dir();
|
|
|
|
run_test("Deck Init Test", test_init);
|
|
run_test("Deck Create, Move and Destroy Test", test_create_mv_destroy);
|
|
run_test("Deck Next and Prev Test", test_next_prev);
|
|
return 0;
|
|
}
|