/* * Copyright 2015 (c) Anna Schumaker. */ #include #include #include #include #include #include #include #include #include struct core_init_data init_data = { .audio_ops = &audio_ops, }; static inline const gchar *test_get_label_text(const gchar *name) { return gtk_label_get_text(GTK_LABEL(gui_builder_widget(name))); } static inline bool test_get_toggle_state(const gchar *name) { return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui_builder_widget(name))); } static inline int test_spin_button_value(const gchar *name) { return gtk_spin_button_get_value(GTK_SPIN_BUTTON(gui_builder_widget(name))); } static inline void test_click_button(const gchar *name) { gtk_button_clicked(GTK_BUTTON(gui_builder_widget(name))); } static void test_audio_seek(gint64 pos) { GstState state; audio_seek(pos); state = audio_cur_state(); while (state != GST_STATE_PAUSED && state != GST_STATE_PLAYING) state = audio_cur_state(); } static void test_audio() { struct track *track; gchar *duration; int argc = 0; gtk_init(&argc, NULL); gui_builder_init("share/ocarina/ocarina6.glade"); test_equal(gtk_widget_is_visible(gui_builder_widget("o_play")), true); test_equal(gtk_widget_is_visible(gui_builder_widget("o_pause")), false); test_equal(test_get_toggle_state("o_pause_enabled"), (bool)false); test_equal(test_spin_button_value("o_pause_count"), 0); test_equal(test_get_toggle_state("o_favorite"), (bool)false); test_equal(test_get_toggle_state("o_hide"), (bool)false); core_init(&argc, NULL, &init_data); collection_add("tests/Music/Hyrule Symphony"); while (idle_run_task()) {}; track = track_get(0); playlist_add(PL_FAVORITED, track); playlist_add(PL_HIDDEN, track); audio_load(track); duration = string_sec2str(track->tr_length); test_equal(test_get_label_text("o_title"), track->tr_title); test_equal(test_get_label_text("o_album"), track->tr_album->al_name); test_equal(test_get_label_text("o_artist"), track->tr_artist->ar_name); test_equal(test_get_label_text("o_position"), "0:00"); test_equal(test_get_label_text("o_duration"), duration); test_equal(test_get_toggle_state("o_favorite"), (bool)true); test_equal(test_get_toggle_state("o_hide"), (bool)true); g_free(duration); test_click_button("o_play"); test_equal(gtk_widget_is_visible(gui_builder_widget("o_play")), false); test_equal(gtk_widget_is_visible(gui_builder_widget("o_pause")), true); test_click_button("o_pause"); test_equal(gtk_widget_is_visible(gui_builder_widget("o_play")), true); test_equal(gtk_widget_is_visible(gui_builder_widget("o_pause")), false); test_click_button("o_pause_enabled"); test_equal(test_get_toggle_state("o_pause_enabled"), (bool)true); audio_eos(); test_equal(audio_cur_track()->tr_track, 1); test_equal(test_get_toggle_state("o_pause_enabled"), (bool)false); test_click_button("o_next"); test_equal(audio_cur_track()->tr_track, 2); test_equal(test_get_toggle_state("o_favorite"), (bool)false); test_equal(test_get_toggle_state("o_hide"), (bool)false); gtk_spin_button_set_value( GTK_SPIN_BUTTON(gui_builder_widget("o_pause_count")), 1); test_equal(test_get_toggle_state("o_pause_enabled"), (bool)true); test_equal(test_spin_button_value("o_pause_count"), 1); audio_eos(); test_equal(audio_cur_track()->tr_track, 3); test_equal(test_get_toggle_state("o_pause_enabled"), (bool)true); test_equal(test_spin_button_value("o_pause_count"), 0); audio_eos(); test_equal(audio_cur_track()->tr_track, 4); test_equal(test_get_toggle_state("o_pause_enabled"), (bool)false); test_click_button("o_prev"); test_equal(audio_cur_track()->tr_track, 3); test_click_button("o_pause"); test_audio_seek(71 * GST_SECOND); test_gui_audio_timeout(); test_equal(test_get_label_text("o_position"), "1:11"); test_equal((guint)gtk_adjustment_get_upper( GTK_ADJUSTMENT(gui_builder_object("o_progress"))), audio_cur_track()->tr_length); test_click_button("o_stop"); test_equal(audio_cur_state(), GST_STATE_PAUSED); test_equal(audio_position(), 0); gui_builder_deinit(); } DECLARE_UNIT_TESTS( UNIT_TEST("Audio GUI", test_audio), );