gui/audio: Add accessor functions for audio tags

And begin working on new, cleaner unit test code.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-09-04 08:47:10 -04:00
parent 88bf71ac22
commit 869e83b7bd
4 changed files with 77 additions and 22 deletions

View File

@ -13,27 +13,32 @@
static guint audio_timeout = 0;
static inline void __audio_set_label(const gchar *label, const gchar *size,
const gchar *text)
static inline void __gui_audio_set_label_markup(GtkLabel *label,
const gchar *size,
const gchar *text)
{
gchar *markup = g_markup_printf_escaped("<span size='%s'>%s</span>",
size, text);
gtk_label_set_markup(GTK_LABEL(gui_builder_widget(label)), markup);
const gchar *fmt = "<span size='%s'>%s</span>";
gchar *markup = g_markup_printf_escaped(fmt, size, text);
gtk_label_set_markup(label, markup);
g_free(markup);
}
static inline void __audio_set_time_label(const gchar *label, unsigned int time)
{
gchar *str = string_sec2str(time);
__audio_set_label(label, "large", str);
__gui_audio_set_label_markup(GTK_LABEL(gui_builder_widget(label)),
"large",str);
g_free(str);
}
static void __audio_load(struct track *track)
{
__audio_set_label("o_title", "xx-large", track->tr_title);
__audio_set_label("o_artist", "x-large", track->tr_album->al_artist->ar_name);
__audio_set_label("o_album", "x-large", track->tr_album->al_name);
__gui_audio_set_label_markup(gui_title_tag(), "xx-large",
track->tr_title);
__gui_audio_set_label_markup(gui_album_tag(), "x-large",
track->tr_album->al_name);
__gui_audio_set_label_markup(gui_artist_tag(), "x-large",
track->tr_album->al_artist->ar_name);
__audio_set_time_label("o_duration", track->tr_length);
gui_pl_system_track_loaded(track);

View File

@ -3,6 +3,7 @@
*/
#ifndef OCARINA_GUI_AUDIO_H
#define OCARINA_GUI_AUDIO_H
#include <gui/builder.h>
/* Audio callback functions. */
extern struct audio_ops audio_ops;
@ -13,6 +14,24 @@ void gui_audio_init();
/* Called to stop the GUI audio timeout function. */
void gui_audio_deinit();
/* Called to get the label displaying the album tag. */
static inline GtkLabel *gui_album_tag(void)
{
return GTK_LABEL(gui_builder_widget("album_tag"));
}
/* Called to get the label displaying the artist tag. */
static inline GtkLabel *gui_artist_tag(void)
{
return GTK_LABEL(gui_builder_widget("artist_tag"));
}
/* Called to get the label displaying the title tag. */
static inline GtkLabel *gui_title_tag(void)
{
return GTK_LABEL(gui_builder_widget("title_tag"));
}
#ifdef CONFIG_TESTING
void test_gui_audio_timeout();
#endif /* CONFIG_TESTING */

View File

@ -321,7 +321,7 @@
<property name="column_spacing">5</property>
<property name="row_homogeneous">True</property>
<child>
<object class="GtkLabel" id="o_title">
<object class="GtkLabel" id="title_tag">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
@ -336,7 +336,7 @@
</packing>
</child>
<child>
<object class="GtkLabel" id="o_artist">
<object class="GtkLabel" id="artist_tag">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
@ -350,7 +350,7 @@
</packing>
</child>
<child>
<object class="GtkLabel" id="o_album">
<object class="GtkLabel" id="album_tag">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>

View File

@ -8,7 +8,11 @@
#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>
@ -53,12 +57,34 @@ static void test_audio_seek(gint64 pos)
state = audio_cur_state();
}
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()), ==, " ");
}
static void test_audio_load()
{
struct track *track = track_get(0);
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);
}
static void test_audio()
{
struct db_entry *dbe, *next;
struct track *track;
gchar *duration;
audio_load(track_get(1));
audio_pause();
g_assert_true(gtk_widget_is_visible(gui_builder_widget("o_play")));
g_assert_false(gtk_widget_is_visible(gui_builder_widget("o_pause")));
g_assert_cmpstr_free(test_get_pause_text(), ==, "(disabled)");
@ -79,9 +105,6 @@ static void test_audio()
g_assert_cmpuint(audio_cur_track()->tr_track, ==, track->tr_track);
duration = string_sec2str(track->tr_length);
g_assert_cmpstr(test_get_label_text("o_title"), ==, track->tr_title);
g_assert_cmpstr(test_get_label_text("o_album"), ==, track->tr_album->al_name);
g_assert_cmpstr(test_get_label_text("o_artist"), ==, track->tr_album->al_artist->ar_name);
g_assert_cmpstr(test_get_label_text("o_position"), ==, "0:00");
g_assert_cmpstr(test_get_label_text("o_duration"), ==, duration);
g_assert_true(test_get_toggle_state("favorite_button"));
@ -133,21 +156,29 @@ 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();
core_init(&argc, NULL, &init_data);
gui_filter_init();
gui_treeview_init();
gui_sidebar_init();
gui_playlist_init();
gui_audio_init();
playlist_new(PL_LIBRARY, "tests/Music/Hyrule Symphony");
gui_pl_library_add("tests/Music/Hyrule Symphony");
while (idle_run_task()) {};
g_test_init(&argc, &argv, NULL);
g_test_add_func("/Gui/Audio", test_audio);
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/Test", test_audio);
ret = g_test_run();
gui_audio_deinit();
gui_window_deinit();
gui_model_deinit();
gui_builder_deinit();
core_deinit();
gui_audio_deinit();
gui_filter_deinit();
gui_treeview_deinit();
gui_model_deinit();
gui_window_deinit();
gui_builder_deinit();
return ret;
}