diff options
Diffstat (limited to 'test/endless/test-action-menu.c')
-rw-r--r-- | test/endless/test-action-menu.c | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/test/endless/test-action-menu.c b/test/endless/test-action-menu.c new file mode 100644 index 0000000..0450f6c --- /dev/null +++ b/test/endless/test-action-menu.c @@ -0,0 +1,217 @@ +#include <gtk/gtk.h> +#include <endless/endless.h> + +#include <endless/eosactionmenu-private.h> + +#include "run-tests.h" + +#include "endless/eosactionmenu.c" + +#define ADD_ACTION_MENU_TEST(path, test_func) \ + g_test_add ((path), ActionMenuFixture, NULL, \ + am_fixture_setup, (test_func), am_fixture_teardown) + +typedef struct +{ + EosActionMenu *action_menu; + GtkAction *action1; + GtkAction *action2; + GtkAction *action3; +} ActionMenuFixture; + +static void +am_fixture_setup (ActionMenuFixture *fixture, + gconstpointer unused) +{ + fixture->action_menu = EOS_ACTION_MENU (eos_action_menu_new ()); + fixture->action1 = gtk_action_new ("1", "1", "1", "1"); + fixture->action2 = gtk_action_new ("2", "2", "2", "2"); + fixture->action3 = gtk_action_new ("3", "3", "3", "3"); + + g_object_ref (fixture->action1); + g_object_ref (fixture->action2); + g_object_ref (fixture->action3); +} + +static void +am_fixture_teardown (ActionMenuFixture *fixture, + gconstpointer unused) +{ + gtk_widget_destroy (GTK_WIDGET (fixture->action_menu)); + g_object_unref (fixture->action1); + g_object_unref (fixture->action2); + g_object_unref (fixture->action3); +} + +/* TESTS */ + +static void +test_am_add_action (ActionMenuFixture *fixture, + gconstpointer unused) +{ + gint size; + gchar *label, *icon_id; + + gtk_action_set_is_important (fixture->action1, TRUE); + gtk_action_set_icon_name (fixture->action1, "object-select-symbolic"); + + eos_action_menu_add_action (fixture->action_menu, fixture->action1); + + EosActionMenuPrivate *action_menu_priv = eos_action_menu_get_instance_private (fixture->action_menu); + GtkWidget *button = gtk_grid_get_child_at (GTK_GRID (action_menu_priv->center_grid), 0, 0); + + g_assert (EOS_IS_ACTION_BUTTON (button)); + + g_object_get (button, + "size", &size, + "label", &label, + "icon-id", &icon_id, + NULL); + + g_assert ( size == EOS_ACTION_BUTTON_SIZE_PRIMARY); + g_assert ( g_strcmp0 (label, gtk_action_get_label (fixture->action1)) == 0); + g_assert ( g_strcmp0 (icon_id, gtk_action_get_icon_name (fixture->action1)) == 0); + + g_free (label); + g_free (icon_id); +} + +static void +test_am_get_action (ActionMenuFixture *fixture, + gconstpointer unused) +{ + eos_action_menu_add_action (fixture->action_menu, fixture->action1); + + GtkAction *retrieved = eos_action_menu_get_action (fixture->action_menu, "1"); + + g_assert (retrieved == fixture->action1); +} + +static void +test_am_list_actions (ActionMenuFixture *fixture, + gconstpointer unused) +{ + GList *list = eos_action_menu_list_actions (fixture->action_menu); + + g_assert (list == NULL); + + eos_action_menu_add_action (fixture->action_menu, fixture->action1); + eos_action_menu_add_action (fixture->action_menu, fixture->action2); + + list = eos_action_menu_list_actions (fixture->action_menu); + + g_assert (g_list_find (list, fixture->action1) != NULL); + g_assert (g_list_find (list, fixture->action2) != NULL); + + g_assert (g_list_find (list, fixture->action3) == NULL); +} + +static gboolean +menu_contains_button_with_label (EosActionMenu *menu, const gchar* button_label) +{ + GList* children; + gboolean found = FALSE; + + EosActionMenuPrivate *action_menu_priv = eos_action_menu_get_instance_private (menu); + children = gtk_container_get_children (GTK_CONTAINER (action_menu_priv->center_grid)); + + children = g_list_concat (children, + gtk_container_get_children (GTK_CONTAINER (action_menu_priv->bottom_grid))); + + for (GList *i = children; i != NULL ; i = i->next) + { + if (EOS_IS_ACTION_BUTTON (i->data)) + { + if (g_strcmp0 (eos_action_button_get_label (EOS_ACTION_BUTTON (i->data)), + button_label) == 0) + { + found = TRUE; + break; + } + } + } + + g_list_free (children); + + return found; +} + +static void +test_am_remove_action (ActionMenuFixture *fixture, + gconstpointer unused) +{ + GList *list; + + eos_action_menu_add_action (fixture->action_menu, fixture->action1); + eos_action_menu_add_action (fixture->action_menu, fixture->action2); + eos_action_menu_add_action (fixture->action_menu, fixture->action3); + + eos_action_menu_remove_action (fixture->action_menu, fixture->action2); + + list = eos_action_menu_list_actions (fixture->action_menu); + + g_assert (g_list_find (list, fixture->action1) != NULL); + g_assert (g_list_find (list, fixture->action2) == NULL); + g_assert (g_list_find (list, fixture->action3) != NULL); + + // the buttons have been removed as well + g_assert (menu_contains_button_with_label (fixture->action_menu, + gtk_action_get_label (fixture->action1))); + g_assert (!menu_contains_button_with_label (fixture->action_menu, + gtk_action_get_label (fixture->action2))); + g_assert (menu_contains_button_with_label (fixture->action_menu, + gtk_action_get_label (fixture->action3))); + + eos_action_menu_remove_action (fixture->action_menu, fixture->action1); + eos_action_menu_remove_action (fixture->action_menu, fixture->action3); + + list = eos_action_menu_list_actions (fixture->action_menu); + + g_assert (g_list_find (list, fixture->action1) == NULL); + g_assert (g_list_find (list, fixture->action2) == NULL); + g_assert (g_list_find (list, fixture->action3) == NULL); + + // the container is empty + EosActionMenuPrivate *action_menu_priv = eos_action_menu_get_instance_private (fixture->action_menu); + g_assert (gtk_container_get_children (GTK_CONTAINER (action_menu_priv->center_grid)) == NULL); + g_assert (gtk_container_get_children (GTK_CONTAINER (action_menu_priv->bottom_grid)) == NULL); +} + +static void +test_am_remove_action_by_name (ActionMenuFixture *fixture, + gconstpointer unused) +{ + eos_action_menu_add_action (fixture->action_menu, fixture->action1); + eos_action_menu_add_action (fixture->action_menu, fixture->action2); + eos_action_menu_add_action (fixture->action_menu, fixture->action3); + + eos_action_menu_remove_action_by_name (fixture->action_menu, "2"); + + GList *list = eos_action_menu_list_actions (fixture->action_menu); + + g_assert (g_list_find (list, fixture->action1) != NULL); + g_assert (g_list_find (list, fixture->action2) == NULL); + g_assert (g_list_find (list, fixture->action3) != NULL); + + g_assert (menu_contains_button_with_label (fixture->action_menu, + gtk_action_get_label (fixture->action1))); + g_assert (!menu_contains_button_with_label (fixture->action_menu, + gtk_action_get_label (fixture->action2))); + g_assert (menu_contains_button_with_label (fixture->action_menu, + gtk_action_get_label (fixture->action3))); +} + +void +add_action_menu_tests (void) +{ + ADD_ACTION_MENU_TEST ("/action-menu/add-action", + test_am_add_action); + ADD_ACTION_MENU_TEST ("/action-menu/get-action", + test_am_get_action); + ADD_ACTION_MENU_TEST ("/action-menu/list-actions", + test_am_list_actions); + ADD_ACTION_MENU_TEST ("/action-menu/remove-action", + test_am_remove_action); + ADD_ACTION_MENU_TEST ("/action-menu/remove-action-by-name", + test_am_remove_action_by_name); +} |