ocarina/tests/gui/audio.c

144 lines
4.3 KiB
C

/*
* Copyright 2015 (c) Anna Schumaker.
*/
#include <core/audio.h>
#include <core/core.h>
#include <core/idle.h>
#include <core/playlist.h>
#include <core/string.h>
#include <gui/audio.h>
#include <gui/builder.h>
#include <gui/filter.h>
#include <gui/model.h>
#include <gui/playlist.h>
#include <gui/sidebar.h>
#include <gui/treeview.h>
#include <gui/window.h>
#include <tests/test.h>
struct core_init_data init_data = {
.audio_ops = &audio_ops,
};
static void test_audio_init()
{
g_assert_cmpstr(gtk_label_get_text(gui_album_tag()), ==, " ");
g_assert_cmpstr(gtk_label_get_text(gui_artist_tag()), ==, " ");
g_assert_cmpstr(gtk_label_get_text(gui_title_tag()), ==, " ");
g_assert_cmpstr(gtk_label_get_text(gui_position()), ==, "0:00");
g_assert_cmpstr(gtk_label_get_text(gui_duration()), ==, "0:00");
g_assert_cmpstr(gtk_combo_box_text_get_active_text(gui_pause_after()),
==, "(disabled)");
g_assert_cmpuint(gtk_combo_box_get_active(
GTK_COMBO_BOX(gui_pause_after())), ==, 0);
g_assert_true( gtk_widget_is_visible(GTK_WIDGET(gui_play_button())));
g_assert_false(gtk_widget_is_visible(GTK_WIDGET(gui_pause_button())));
}
static void test_audio_load()
{
struct track *track = track_get(0);
gchar *length = string_sec2str(track->tr_length);
audio_load(track);
g_assert_cmpstr(gtk_label_get_text(gui_album_tag()), ==,
track->tr_album->al_name);
g_assert_cmpstr(gtk_label_get_text(gui_artist_tag()), ==,
track->tr_album->al_artist->ar_name);
g_assert_cmpstr(gtk_label_get_text(gui_title_tag()), ==,
track->tr_title);
g_assert_cmpstr(gtk_label_get_text(gui_duration()), ==, length);
g_assert_cmpstr(gtk_label_get_text(gui_position()), ==, "0:00");
g_assert_false(gtk_widget_is_visible(GTK_WIDGET(gui_play_button())));
g_assert_true( gtk_widget_is_visible(GTK_WIDGET(gui_pause_button())));
g_assert_cmpuint(gtk_adjustment_get_upper(gui_seek()), ==,
track->tr_length);
g_free(length);
}
static void test_audio_buttons()
{
audio_load(track_get(0));
gtk_button_clicked(gui_pause_button());
g_assert_cmpuint(audio_cur_state(), ==, GST_STATE_PAUSED);
g_assert_true( gtk_widget_is_visible(GTK_WIDGET(gui_play_button())));
g_assert_false(gtk_widget_is_visible(GTK_WIDGET(gui_pause_button())));
gtk_button_clicked(gui_play_button());
g_assert_cmpuint(audio_cur_state(), ==, GST_STATE_PLAYING);
g_assert_false(gtk_widget_is_visible(GTK_WIDGET(gui_play_button())));
g_assert_true( gtk_widget_is_visible(GTK_WIDGET(gui_pause_button())));
gtk_button_clicked(gui_next_button());
if (track_get(0)->tr_track == 1)
gtk_button_clicked(gui_next_button());
g_assert(audio_cur_track() != track_get(0));
gtk_button_clicked(gui_prev_button());
g_assert(audio_cur_track() == track_get(0));
gtk_combo_box_set_active(GTK_COMBO_BOX(gui_pause_after()), 2);
audio_eos();
g_assert_cmpuint(audio_cur_state(), ==, GST_STATE_PLAYING);
g_assert_cmpuint(gtk_combo_box_get_active(
GTK_COMBO_BOX(gui_pause_after())), ==, 1);
audio_eos();
g_assert_cmpuint(audio_cur_state(), ==, GST_STATE_PAUSED);
g_assert_cmpuint(gtk_combo_box_get_active(
GTK_COMBO_BOX(gui_pause_after())), ==, 0);
}
static void test_audio_seek()
{
GstState state;
audio_load(track_get(0));
gtk_button_clicked(gui_pause_button());
audio_seek(10 * GST_SECOND);
do {
state = audio_cur_state();
} while (state != GST_STATE_PAUSED && state != GST_STATE_PLAYING);
g_assert_cmpint(gui_audio_timeout(), ==, G_SOURCE_CONTINUE);
g_assert_cmpint(gtk_adjustment_get_value(gui_seek()), ==, 10);
g_assert_cmpstr(gtk_label_get_text(gui_position()), ==, "0:10");
}
int main(int argc, char **argv)
{
int ret;
gtk_init(&argc, NULL);
core_init(&argc, &argv, &init_data);
gui_builder_init("share/ocarina/ocarina.ui");
gui_model_init();
gui_filter_init();
gui_treeview_init();
gui_sidebar_init();
gui_playlist_init();
gui_audio_init();
gui_pl_library_add("tests/Music/Hyrule Symphony");
while (idle_run_task()) {};
g_test_init(&argc, &argv, NULL);
g_test_add_func("/Gui/Audio/Init", test_audio_init);
g_test_add_func("/Gui/Audio/Load", test_audio_load);
g_test_add_func("/Gui/Audio/Buttons", test_audio_buttons);
g_test_add_func("/Gui/Audio/Seek", test_audio_seek);
ret = g_test_run();
core_deinit();
gui_audio_deinit();
gui_filter_deinit();
gui_treeview_deinit();
gui_model_deinit();
gui_window_deinit();
gui_builder_deinit();
return ret;
}