summaryrefslogtreecommitdiff
path: root/test/test-page-manager.c
diff options
context:
space:
mode:
authorP. F. Chimento <philip.chimento@gmail.com>2013-05-03 18:33:05 +0200
committerP. F. Chimento <philip.chimento@gmail.com>2013-05-13 16:41:15 +0200
commit5e9dcb466c5506a8ea4b52e1eb452df6d806c823 (patch)
treec896145fc89115c6ffc37484f460a0e5330f7964 /test/test-page-manager.c
parent55be2cb2bd90e55832af798c05e699c99fc3d38f (diff)
Implement EosPageManager
Minimum functionality for EosPageManager. Currently uses a GtkNotebook internally until we decide what to do regarding GtkStack. (Philip; map/unmap Matt, Patrick)
Diffstat (limited to 'test/test-page-manager.c')
-rw-r--r--test/test-page-manager.c333
1 files changed, 333 insertions, 0 deletions
diff --git a/test/test-page-manager.c b/test/test-page-manager.c
new file mode 100644
index 0000000..00ce0ad
--- /dev/null
+++ b/test/test-page-manager.c
@@ -0,0 +1,333 @@
+#include <gtk/gtk.h>
+#include <endless/endless.h>
+
+#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_cmpstr (name_get, ==, "");
+ gtk_container_child_get (GTK_CONTAINER (fixture->pm), new_page,
+ "name", &name_prop,
+ NULL);
+ g_assert_cmpstr (name_prop, ==, "");
+ g_free (name_prop);
+}
+
+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/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);
+ }
+}