#include #include #include "run-tests.h" #define PAGE1_NAME "page1" #define PAGE2_NAME "page2" #define PAGE3_NAME "page3" #define EXPECTED_PAGE_NAME PAGE2_NAME #define EXPECTED_CHANGED_PAGE_NAME "changed-name" #define DUPLICATE_PAGE_NAME "duplicate-name" #define EXPECTED_DUPLICATE_PAGE_NAME_ERRMSG "*Not setting page name to \"" \ DUPLICATE_PAGE_NAME "\", because page manager already contains a page by " \ "that name*" #define ADD_PAGE_MANAGER_TEST(path, test_func) \ g_test_add ((path), PageManagerFixture, NULL, \ pm_fixture_setup, (test_func), pm_fixture_teardown) #define ADD_EMPTY_PAGE_MANAGER_TEST(path, test_func) \ g_test_add ((path), PageManagerFixture, NULL, \ empty_pm_fixture_setup, (test_func), pm_fixture_teardown); typedef struct { GtkWidget *pm; GtkWidget *page1; GtkWidget *page2; GtkWidget *page3; } PageManagerFixture; static void pm_fixture_setup (PageManagerFixture *fixture, gconstpointer unused) { fixture->pm = eos_page_manager_new (); fixture->page1 = gtk_label_new ("1"); fixture->page2 = gtk_label_new ("2"); fixture->page3 = gtk_label_new ("3"); gtk_container_add_with_properties (GTK_CONTAINER (fixture->pm), fixture->page1, "name", PAGE1_NAME, NULL); gtk_container_add_with_properties (GTK_CONTAINER (fixture->pm), fixture->page2, "name", PAGE2_NAME, NULL); gtk_container_add_with_properties (GTK_CONTAINER (fixture->pm), fixture->page3, "name", PAGE3_NAME, NULL); } static void empty_pm_fixture_setup (PageManagerFixture *fixture, gconstpointer unused) { fixture->pm = eos_page_manager_new (); } static void pm_fixture_teardown (PageManagerFixture *fixture, gconstpointer unused) { gtk_widget_destroy (fixture->pm); } static void test_pm_get_set_visible_page (PageManagerFixture *fixture, gconstpointer unused) { GtkWidget *visible_page; visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); g_assert (visible_page != fixture->page2); eos_page_manager_set_visible_page (EOS_PAGE_MANAGER (fixture->pm), fixture->page2); visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); g_assert (visible_page == fixture->page2); } static void test_pm_prop_visible_page (PageManagerFixture *fixture, gconstpointer unused) { GtkWidget *visible_page; g_object_get (fixture->pm, "visible-page", &visible_page, NULL); g_assert (visible_page != fixture->page2); g_object_set (fixture->pm, "visible-page", fixture->page2, NULL); g_object_get (fixture->pm, "visible-page", &visible_page, NULL); g_assert (visible_page == fixture->page2); } static void test_pm_get_set_visible_page_name (PageManagerFixture *fixture, gconstpointer unused) { const gchar *name; name = eos_page_manager_get_visible_page_name (EOS_PAGE_MANAGER (fixture->pm)); g_assert_cmpstr (name, !=, EXPECTED_PAGE_NAME); eos_page_manager_set_visible_page_name (EOS_PAGE_MANAGER (fixture->pm), EXPECTED_PAGE_NAME); name = eos_page_manager_get_visible_page_name (EOS_PAGE_MANAGER (fixture->pm)); g_assert_cmpstr (name, ==, EXPECTED_PAGE_NAME); } static void test_pm_prop_visible_page_name (PageManagerFixture *fixture, gconstpointer unused) { gchar *name; g_object_get (fixture->pm, "visible-page-name", &name, NULL); g_assert_cmpstr (name, !=, EXPECTED_PAGE_NAME); g_free (name); g_object_set (fixture->pm, "visible-page-name", EXPECTED_PAGE_NAME, NULL); g_object_get (fixture->pm, "visible-page-name", &name, NULL); g_assert_cmpstr (name, ==, EXPECTED_PAGE_NAME); g_free (name); } static void test_pm_get_set_page_name (PageManagerFixture *fixture, gconstpointer unused) { const gchar *name; name = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm), fixture->page1); g_assert_cmpstr (name, ==, PAGE1_NAME); name = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm), fixture->page2); g_assert_cmpstr (name, ==, PAGE2_NAME); name = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm), fixture->page3); g_assert_cmpstr (name, ==, PAGE3_NAME); eos_page_manager_set_page_name (EOS_PAGE_MANAGER (fixture->pm), fixture->page2, EXPECTED_CHANGED_PAGE_NAME); name = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm), fixture->page2); g_assert_cmpstr (name, ==, EXPECTED_CHANGED_PAGE_NAME); } static void test_pm_child_prop_name (PageManagerFixture *fixture, gconstpointer unused) { gchar *name; gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page1, "name", &name, NULL); g_assert_cmpstr (name, ==, PAGE1_NAME); g_free (name); gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page2, "name", &name, NULL); g_assert_cmpstr (name, ==, PAGE2_NAME); g_free (name); gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page3, "name", &name, NULL); g_assert_cmpstr (name, ==, PAGE3_NAME); g_free (name); gtk_container_child_set (GTK_CONTAINER (fixture->pm), fixture->page2, "name", EXPECTED_CHANGED_PAGE_NAME, NULL); gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page2, "name", &name, NULL); g_assert_cmpstr (name, ==, EXPECTED_CHANGED_PAGE_NAME); g_free (name); } static void test_pm_page_no_name (PageManagerFixture *fixture, gconstpointer unused) { const gchar *name_get; gchar *name_prop; GtkWidget *new_page = gtk_label_new("new"); gtk_container_add (GTK_CONTAINER (fixture->pm), new_page); name_get = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm), new_page); g_assert (name_get == NULL); gtk_container_child_get (GTK_CONTAINER (fixture->pm), new_page, "name", &name_prop, NULL); g_assert (name_prop == NULL); } static void test_pm_set_page_no_name (PageManagerFixture *fixture, gconstpointer unused) { const gchar *name; eos_page_manager_set_page_name (EOS_PAGE_MANAGER (fixture->pm), fixture->page1, NULL); name = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm), fixture->page1); g_assert (name == NULL); name = eos_page_manager_get_visible_page_name (EOS_PAGE_MANAGER (fixture->pm)); g_assert (name == NULL); } static void test_pm_remove_page_behavior (PageManagerFixture *fixture, gconstpointer unused) { GtkWidget *visible_page; visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); g_assert (visible_page == fixture->page1); gtk_container_remove (GTK_CONTAINER (fixture->pm), fixture->page3); visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); g_assert (visible_page == fixture->page1); gtk_container_remove (GTK_CONTAINER (fixture->pm), fixture->page2); visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); g_assert (visible_page == fixture->page1); gtk_container_remove (GTK_CONTAINER (fixture->pm), fixture->page1); visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); g_assert (visible_page == NULL); } static void test_pm_remove_page_undefined_behavior (PageManagerFixture *fixture, gconstpointer unused) { GtkWidget *visible_page; visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); g_assert (visible_page == fixture->page1); gtk_container_remove (GTK_CONTAINER (fixture->pm), fixture->page1); visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); g_assert (visible_page != fixture->page1); } static void test_pm_remove_page_by_name (PageManagerFixture *fixture, gconstpointer unused) { GList *pages = gtk_container_get_children (GTK_CONTAINER (fixture->pm)); guint length = g_list_length (pages); g_list_free (pages); eos_page_manager_remove_page_by_name (EOS_PAGE_MANAGER (fixture->pm), PAGE2_NAME); pages = gtk_container_get_children (GTK_CONTAINER (fixture->pm)); g_assert_cmpuint (g_list_length (pages), ==, length - 1); g_assert (g_list_find (pages, fixture->page1) != NULL); g_assert (g_list_find (pages, fixture->page2) == NULL); g_assert (g_list_find (pages, fixture->page3) != NULL); g_list_free (pages); } static void test_pm_duplicate_page_name (PageManagerFixture *fixture, gconstpointer unused) { eos_page_manager_set_page_name (EOS_PAGE_MANAGER (fixture->pm), fixture->page1, DUPLICATE_PAGE_NAME); /* Should not complain */ eos_page_manager_set_page_name (EOS_PAGE_MANAGER (fixture->pm), fixture->page1, DUPLICATE_PAGE_NAME); g_test_expect_message (TEST_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, EXPECTED_DUPLICATE_PAGE_NAME_ERRMSG); eos_page_manager_set_page_name (EOS_PAGE_MANAGER (fixture->pm), fixture->page2, DUPLICATE_PAGE_NAME); g_test_assert_expected_messages (); const gchar *name = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm), fixture->page2); g_assert_cmpstr (name, !=, DUPLICATE_PAGE_NAME); } static void test_empty_pm_visible_page (PageManagerFixture *fixture, gconstpointer unused) { GtkWidget *visible_page_get, *visible_page_prop; visible_page_get = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); g_assert (visible_page_get == NULL); g_object_get (fixture->pm, "visible-page", &visible_page_prop, NULL); g_assert (visible_page_prop == NULL); } static void test_empty_pm_visible_page_name (PageManagerFixture *fixture, gconstpointer unused) { const gchar *name_get; gchar *name_prop; name_get = eos_page_manager_get_visible_page_name (EOS_PAGE_MANAGER (fixture->pm)); g_assert (name_get == NULL); g_object_get (fixture->pm, "visible-page-name", &name_prop, NULL); g_assert (name_prop == NULL); } static void test_empty_pm_add_page_behavior (PageManagerFixture *fixture, gconstpointer unused) { GtkWidget *visible_page; GtkWidget *page1 = gtk_label_new ("page1"); GtkWidget *page2 = gtk_label_new ("page2"); gtk_container_add (GTK_CONTAINER (fixture->pm), page1); visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); g_assert (visible_page == page1); gtk_container_add (GTK_CONTAINER (fixture->pm), page2); visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); g_assert (visible_page == page1); /* Not page2! */ } void add_page_manager_tests (void) { ADD_PAGE_MANAGER_TEST ("/page-manager/get-set-visible-page", test_pm_get_set_visible_page); ADD_PAGE_MANAGER_TEST ("/page-manager/prop-visible-page", test_pm_prop_visible_page); ADD_PAGE_MANAGER_TEST ("/page-manager/get-set-visible-page-name", test_pm_get_set_visible_page_name); ADD_PAGE_MANAGER_TEST ("/page-manager/prop-visible-page-name", test_pm_prop_visible_page_name); ADD_PAGE_MANAGER_TEST ("/page-manager/get-set-page-name", test_pm_get_set_page_name); ADD_PAGE_MANAGER_TEST ("/page-manager/child-prop-name", test_pm_child_prop_name); ADD_PAGE_MANAGER_TEST ("/page-manager/page-no-name", test_pm_page_no_name); ADD_PAGE_MANAGER_TEST ("/page-manager/set-page-no-name", test_pm_set_page_no_name); ADD_PAGE_MANAGER_TEST ("/page-manager/remove-page-by-name", test_pm_remove_page_by_name); ADD_PAGE_MANAGER_TEST ("/page-manager/duplicate-page-name", test_pm_duplicate_page_name); ADD_EMPTY_PAGE_MANAGER_TEST ("/page-manager/empty-visible-page", test_empty_pm_visible_page); ADD_EMPTY_PAGE_MANAGER_TEST ("/page-manager/empty-visible-page-name", test_empty_pm_visible_page_name); ADD_EMPTY_PAGE_MANAGER_TEST ("/page-manager/add-page-behavior", test_empty_pm_add_page_behavior); /* Disabled until https://bugzilla.gnome.org/show_bug.cgi?id=699756 is fixed [endlessm/eos-sdk#67] */ if (FALSE) { ADD_PAGE_MANAGER_TEST ("/page-manager/remove-page-behavior", test_pm_remove_page_behavior); ADD_PAGE_MANAGER_TEST ("/page-manager/remove-page-undefined-behavior", test_pm_remove_page_undefined_behavior); } }