diff options
Diffstat (limited to 'test/endless/test-window.c')
-rw-r--r-- | test/endless/test-window.c | 252 |
1 files changed, 252 insertions, 0 deletions
diff --git a/test/endless/test-window.c b/test/endless/test-window.c new file mode 100644 index 0000000..32639be --- /dev/null +++ b/test/endless/test-window.c @@ -0,0 +1,252 @@ +/* Copyright 2013 Endless Mobile, Inc. */ + +#include <stdlib.h> +#include <gtk/gtk.h> +#include <endless/endless.h> +#include "endless/eostopbar-private.h" +#include "endless/eosmainarea-private.h" + +#include "run-tests.h" + +#define EXPECTED_TOP_BAR_HEIGHT 32 +#define EXPECTED_NULL_APPLICATION_ERRMSG \ + "*In order to create a window, you must have an application for it to " \ + "connect to.*" + +static void +test_assign_application (GApplication *app) +{ + GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); + + g_assert(EOS_APPLICATION (app) + == EOS_APPLICATION (gtk_window_get_application (GTK_WINDOW (win)))); + + gtk_widget_destroy (win); +} + +static void +test_application_not_null (GApplication *app) +{ + /* Unix-only test */ + if (g_test_trap_fork(0 /* timeout */, G_TEST_TRAP_SILENCE_STDERR)) + { + GtkWidget *win = eos_window_new (NULL); + gtk_widget_destroy (win); + exit (0); + } + + g_test_trap_assert_failed (); + g_test_trap_assert_stderr (EXPECTED_NULL_APPLICATION_ERRMSG); + + g_application_quit (app); /* No window, so otherwise won't quit */ +} + +static void +test_has_top_bar (GApplication *app) +{ + GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); + GtkWidget *top_bar = container_find_descendant_with_type (GTK_CONTAINER (win), EOS_TYPE_TOP_BAR); + g_assert (top_bar != NULL); + g_assert (EOS_IS_TOP_BAR (top_bar)); + + gtk_widget_destroy (win); +} + +static void +test_has_main_area (GApplication *app) +{ + GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); + GtkWidget *main_area = container_find_descendant_with_type (GTK_CONTAINER (win), EOS_TYPE_MAIN_AREA); + g_assert (main_area != NULL); + g_assert (EOS_IS_MAIN_AREA (main_area)); + + gtk_widget_destroy (win); +} + +static void +test_has_default_page_manager (GApplication *app) +{ + GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); + + EosPageManager *pm = eos_window_get_page_manager (EOS_WINDOW (win)); + g_assert (pm != NULL); + + g_object_get (win, "page-manager", &pm, NULL); + g_assert (pm != NULL); + + gtk_widget_destroy (win); +} + +static void +test_get_set_page_manager (GApplication *app) +{ + GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); + + EosPageManager *orig_pm = eos_window_get_page_manager (EOS_WINDOW (win)); + EosPageManager *new_pm = EOS_PAGE_MANAGER (eos_page_manager_new ()); + + g_assert (orig_pm != new_pm); + eos_window_set_page_manager(EOS_WINDOW (win), new_pm); + EosPageManager *test_pm = eos_window_get_page_manager (EOS_WINDOW (win)); + g_assert (new_pm == test_pm); + + gtk_widget_destroy (win); +} + +static void +test_get_set_font_scaling_active (GApplication *app) +{ + GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); + + gboolean is_scaling_default = eos_window_get_font_scaling_active (EOS_WINDOW (win)); + g_assert (!is_scaling_default); + + eos_window_set_font_scaling_active (EOS_WINDOW (win), TRUE); + gboolean is_scaling = eos_window_get_font_scaling_active (EOS_WINDOW (win)); + g_assert (is_scaling); + + gtk_widget_destroy (win); +} + +static void +test_get_set_font_scaling_default_size (GApplication *app) +{ + GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); + gint new_font_size = 10; + + eos_window_set_font_scaling_default_size (EOS_WINDOW (win), new_font_size); + gint returned_font_size = eos_window_get_font_scaling_default_size (EOS_WINDOW (win)); + + g_assert (new_font_size == returned_font_size); + + gtk_widget_destroy (win); +} + +static void +test_get_set_font_scaling_default_window_size (GApplication *app) +{ + GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); + gint new_window_size = 720; + + eos_window_set_font_scaling_default_window_size (EOS_WINDOW (win), new_window_size); + gint returned_window_size = eos_window_get_font_scaling_default_window_size (EOS_WINDOW (win)); + + g_assert (new_window_size == returned_window_size); + + gtk_widget_destroy (win); +} + +static void +test_get_set_font_scaling_min_font_size (GApplication *app) +{ + GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); + gint new_min_font_size = 10; + + eos_window_set_font_scaling_min_font_size (EOS_WINDOW (win), new_min_font_size); + gint returned_min_font_size = eos_window_get_font_scaling_min_font_size (EOS_WINDOW (win)); + + g_assert (new_min_font_size == returned_min_font_size); + + gtk_widget_destroy (win); +} + +static void +test_prop_page_manager (GApplication *app) +{ + GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); + + EosPageManager *orig_pm; + g_object_get(win, "page-manager", &orig_pm, NULL); + EosPageManager *new_pm = EOS_PAGE_MANAGER (eos_page_manager_new ()); + + g_assert (orig_pm != new_pm); + g_object_set(win, "page-manager", new_pm, NULL); + EosPageManager *test_pm; + g_object_get(win, "page-manager", &test_pm, NULL); + g_assert (new_pm == test_pm); + + gtk_widget_destroy (win); +} + +static void +test_main_area_widgets_visibility (GApplication *app) +{ + GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); + EosPageManager *pm = eos_window_get_page_manager (EOS_WINDOW (win)); + GtkWidget *main_area = container_find_descendant_with_type (GTK_CONTAINER (win), EOS_TYPE_MAIN_AREA); + + GtkWidget *page0 = gtk_label_new ("no-no"); + GtkWidget *page1 = gtk_label_new ("yes-no"); + GtkWidget *page2 = gtk_label_new ("no-yes"); + GtkWidget *page3 = gtk_label_new ("yes-yes"); + + GtkWidget *toolbox1 = gtk_label_new ("toolbox1"); + GtkWidget *toolbox3 = gtk_label_new ("toolbox3"); + + gtk_container_add (GTK_CONTAINER (pm), page0); + gtk_container_add_with_properties (GTK_CONTAINER (pm), page1, + "custom-toolbox-widget", toolbox1, + NULL); + gtk_container_add_with_properties (GTK_CONTAINER (pm), page2, + "page-actions", TRUE, + NULL); + gtk_container_add_with_properties (GTK_CONTAINER (pm), page3, + "custom-toolbox-widget", toolbox3, + "page-actions", TRUE, + NULL); + + GtkWidget *tb; + gboolean actions; + EosMainArea *ma = EOS_MAIN_AREA (main_area); + + eos_page_manager_set_visible_page (pm, page0); + tb = eos_main_area_get_toolbox (ma); + actions = eos_main_area_get_actions (ma); + g_assert (tb == NULL); + g_assert (actions == FALSE); + + eos_page_manager_set_visible_page (pm, page1); + tb = eos_main_area_get_toolbox (ma); + actions = eos_main_area_get_actions (ma); + g_assert (tb == toolbox1); + g_assert (actions == FALSE); + + eos_page_manager_set_visible_page (pm, page2); + tb = eos_main_area_get_toolbox (ma); + actions = eos_main_area_get_actions (ma); + g_assert (tb == NULL); + g_assert (actions == TRUE); + + eos_page_manager_set_visible_page (pm, page3); + tb = eos_main_area_get_toolbox (ma); + actions = eos_main_area_get_actions (ma); + g_assert (tb == toolbox3); + g_assert (actions == TRUE); + + gtk_widget_destroy (win); +} + +void +add_window_tests (void) +{ + ADD_APP_WINDOW_TEST ("/window/assign-application", test_assign_application); + ADD_APP_WINDOW_TEST ("/window/application-not-null", + test_application_not_null); + ADD_APP_WINDOW_TEST ("/window/has-top-bar", test_has_top_bar); + ADD_APP_WINDOW_TEST ("/window/has-main-area", test_has_main_area); + ADD_APP_WINDOW_TEST ("/window/has-default-page-manager", + test_has_default_page_manager); + ADD_APP_WINDOW_TEST ("/window/get-set-page-manager", + test_get_set_page_manager); + ADD_APP_WINDOW_TEST ("/window/get-set-font-scaling-active", + test_get_set_font_scaling_active); + ADD_APP_WINDOW_TEST ("/window/get-set-font-scaling-default-size", + test_get_set_font_scaling_default_size); + ADD_APP_WINDOW_TEST ("/window/get-set-font-scaling-default-window-size", + test_get_set_font_scaling_default_window_size); + ADD_APP_WINDOW_TEST ("/window/get-set-font-scaling-min-font-size", + test_get_set_font_scaling_min_font_size); + ADD_APP_WINDOW_TEST ("/window/prop-page-manager", test_prop_page_manager); + ADD_APP_WINDOW_TEST ("/window/main-area-widgets-visibility", + test_main_area_widgets_visibility); +} |