diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rw-r--r-- | tests/ephy-session-test.c | 111 | ||||
-rw-r--r-- | tests/ephy-test-utils.c | 107 | ||||
-rw-r--r-- | tests/ephy-test-utils.h | 44 |
4 files changed, 173 insertions, 91 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index aaaf6c149..1c82995f5 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -156,6 +156,8 @@ test_ephy_migration_SOURCES = \ test_ephy_session_SOURCES = \ ephy-session-test.c \ + ephy-test-utils.c \ + ephy-test-utils.h \ $(top_builddir)/src/epiphany-resources.c \ $(top_builddir)/src/epiphany-resources.h diff --git a/tests/ephy-session-test.c b/tests/ephy-session-test.c index 2397ba4a7..f93a2766c 100644 --- a/tests/ephy-session-test.c +++ b/tests/ephy-session-test.c @@ -29,6 +29,7 @@ #include "ephy-settings.h" #include "ephy-shell.h" #include "ephy-session.h" +#include "ephy-test-utils.h" #include <glib.h> #include <glib/gstdio.h> @@ -89,78 +90,6 @@ disable_delayed_loading (void) FALSE); } -static guint web_view_ready_counter = 0; - -static void -load_changed_cb (WebKitWebView *web_view, -#ifdef HAVE_WEBKIT2 - WebKitLoadEvent status, -#else - GParamSpec *pspec, -#endif - GMainLoop *loop) -{ -#ifndef HAVE_WEBKIT2 - WebKitLoadStatus status = webkit_web_view_get_load_status (web_view); -#endif - - if (status == WEBKIT_LOAD_COMMITTED) { - web_view_ready_counter--; - g_signal_handlers_disconnect_by_func (web_view, load_changed_cb, loop); - - if (web_view_ready_counter == 0) - g_main_loop_quit (loop); - } - -} - -static void -wait_until_load_is_committed (WebKitWebView *web_view, GMainLoop *loop) -{ -#ifdef HAVE_WEBKIT2 - g_signal_connect (web_view, "load-changed", G_CALLBACK (load_changed_cb), loop); -#else - g_signal_connect (web_view, "notify::load-status", G_CALLBACK (load_changed_cb), loop); -#endif -} - -static void -check_ephy_web_view_address (EphyWebView *view, - const gchar *address) -{ - g_assert_cmpstr (ephy_web_view_get_address (view), ==, address); -} - -static void -web_view_created_cb (EphyEmbedShell *shell, EphyWebView *view, GMainLoop *loop) -{ - web_view_ready_counter++; - wait_until_load_is_committed (WEBKIT_WEB_VIEW (view), loop); -} - -static GMainLoop* setup_ensure_web_views_are_loaded (void) -{ - GMainLoop *loop; - - web_view_ready_counter = 0; - - loop = g_main_loop_new (NULL, FALSE); - g_signal_connect (ephy_embed_shell_get_default (), "web-view-created", - G_CALLBACK (web_view_created_cb), loop); - - return loop; -} - -static void ensure_web_views_are_loaded (GMainLoop *loop) -{ - if (web_view_ready_counter != 0) - g_main_loop_run (loop); - - g_signal_handlers_disconnect_by_func (ephy_embed_shell_get_default (), G_CALLBACK (web_view_created_cb), loop); - g_assert_cmpint (web_view_ready_counter, ==, 0); - g_main_loop_unref (loop); -} - static void test_ephy_session_load (void) { @@ -176,12 +105,12 @@ test_ephy_session_load (void) session = ephy_shell_get_session (ephy_shell_get_default ()); g_assert (session); - loop = setup_ensure_web_views_are_loaded (); + loop = ephy_test_utils_setup_ensure_web_views_are_loaded (); ret = load_session_from_string (session, session_data); g_assert (ret); - ensure_web_views_are_loaded (loop); + ephy_test_utils_ensure_web_views_are_loaded (loop); l = gtk_application_get_windows (GTK_APPLICATION (ephy_shell_get_default ())); g_assert (l); @@ -191,7 +120,7 @@ test_ephy_session_load (void) g_assert (embed); view = ephy_embed_get_web_view (embed); g_assert (view); - check_ephy_web_view_address (view, "ephy-about:memory"); + ephy_test_utils_check_ephy_web_view_address (view, "ephy-about:memory"); ephy_session_clear (session); @@ -234,11 +163,11 @@ test_ephy_session_clear (void) session = EPHY_SESSION (ephy_shell_get_session (ephy_shell_get_default ())); - loop = setup_ensure_web_views_are_loaded (); + loop = ephy_test_utils_setup_ensure_web_views_are_loaded (); load_session_from_string (session, session_data_many_windows); - ensure_web_views_are_loaded (loop); + ephy_test_utils_ensure_web_views_are_loaded (loop); l = gtk_application_get_windows (GTK_APPLICATION (ephy_shell_get_default ())); gtk_widget_destroy (GTK_WIDGET (l->data)); @@ -267,7 +196,7 @@ test_ephy_session_load_empty_session (void) session = ephy_shell_get_session (ephy_shell_get_default ()); g_assert (session); - loop = setup_ensure_web_views_are_loaded (); + loop = ephy_test_utils_setup_ensure_web_views_are_loaded (); ret = load_session_from_string (session, session_data_empty); g_assert (ret == FALSE); @@ -276,7 +205,7 @@ test_ephy_session_load_empty_session (void) * the default empty window. Got to spin the mainloop though, * since the fallback is done by queueing another session * command. */ - ensure_web_views_are_loaded (loop); + ephy_test_utils_ensure_web_views_are_loaded (loop); l = gtk_application_get_windows (GTK_APPLICATION (ephy_shell_get_default ())); g_assert (l); @@ -286,7 +215,7 @@ test_ephy_session_load_empty_session (void) g_assert (embed); view = ephy_embed_get_web_view (embed); g_assert (view); - check_ephy_web_view_address (view, "ephy-about:overview"); + ephy_test_utils_check_ephy_web_view_address (view, "ephy-about:overview"); enable_delayed_loading (); ephy_session_clear (session); @@ -307,14 +236,14 @@ test_ephy_session_load_many_windows (void) session = ephy_shell_get_session (ephy_shell_get_default ()); g_assert (session); - loop = setup_ensure_web_views_are_loaded (); + loop = ephy_test_utils_setup_ensure_web_views_are_loaded (); ret = load_session_from_string (session, session_data_many_windows); g_assert (ret); - g_assert_cmpint (web_view_ready_counter, >=, 0); - g_assert_cmpint (web_view_ready_counter, <=, 2); + g_assert_cmpint (ephy_test_utils_get_web_view_ready_counter (), >=, 0); + g_assert_cmpint (ephy_test_utils_get_web_view_ready_counter (), <=, 2); - ensure_web_views_are_loaded (loop); + ephy_test_utils_ensure_web_views_are_loaded (loop); l = gtk_application_get_windows (GTK_APPLICATION (ephy_shell_get_default ())); g_assert (l); @@ -327,7 +256,7 @@ test_ephy_session_load_many_windows (void) g_assert (view); #ifndef HAVE_WEBKIT2 /* FIXME: This #ifndef should be removed once bug #695437 is fixed. */ - check_ephy_web_view_address (view, "ephy-about:epiphany"); + ephy_test_utils_check_ephy_web_view_address (view, "ephy-about:epiphany"); #endif } @@ -351,16 +280,16 @@ open_uris_after_loading_session (const char** uris, int final_num_windows) session = ephy_shell_get_session (ephy_shell_get_default ()); g_assert (session); - loop = setup_ensure_web_views_are_loaded (); + loop = ephy_test_utils_setup_ensure_web_views_are_loaded (); user_time = gdk_x11_display_get_user_time (gdk_display_get_default ()); ret = load_session_from_string (session, session_data_many_windows); g_assert (ret); - g_assert_cmpint (web_view_ready_counter, >=, 0); - g_assert_cmpint (web_view_ready_counter, <=, 2); + g_assert_cmpint (ephy_test_utils_get_web_view_ready_counter (), >=, 0); + g_assert_cmpint (ephy_test_utils_get_web_view_ready_counter (), <=, 2); - ensure_web_views_are_loaded (loop); + ephy_test_utils_ensure_web_views_are_loaded (loop); l = gtk_application_get_windows (GTK_APPLICATION (ephy_shell_get_default ())); @@ -374,7 +303,7 @@ open_uris_after_loading_session (const char** uris, int final_num_windows) g_assert (view); #ifndef HAVE_WEBKIT2 /* FIXME: This #ifndef should be removed once bug #695437 is fixed. */ - check_ephy_web_view_address (view, "ephy-about:epiphany"); + ephy_test_utils_check_ephy_web_view_address (view, "ephy-about:epiphany"); #endif } @@ -472,7 +401,7 @@ test_ephy_session_restore_tabs (void) /* The active child should now be pointing to the restored tab, whose address is the one we copied previously. */ embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (l->data)); - check_ephy_web_view_address (ephy_embed_get_web_view (embed), url); + ephy_test_utils_check_ephy_web_view_address (ephy_embed_get_web_view (embed), url); g_free (url); ephy_session_clear (session); diff --git a/tests/ephy-test-utils.c b/tests/ephy-test-utils.c new file mode 100644 index 000000000..95a90ec2a --- /dev/null +++ b/tests/ephy-test-utils.c @@ -0,0 +1,107 @@ +/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set sw=2 ts=2 sts=2 et: */ +/* + * Copyright © 2013 Igalia S.L. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "config.h" +#include "ephy-test-utils.h" + +#include "ephy-embed-shell.h" + +#include <glib.h> + +static guint web_view_ready_counter = 0; + +guint +ephy_test_utils_get_web_view_ready_counter (void) +{ + return web_view_ready_counter; +} + +void +ephy_test_utils_check_ephy_web_view_address (EphyWebView *view, + const gchar *address) +{ + g_assert_cmpstr (ephy_web_view_get_address (view), ==, address); +} + +static void +load_changed_cb (WebKitWebView *web_view, +#ifdef HAVE_WEBKIT2 + WebKitLoadEvent status, +#else + GParamSpec *pspec, +#endif + GMainLoop *loop) +{ +#ifndef HAVE_WEBKIT2 + WebKitLoadStatus status = webkit_web_view_get_load_status (web_view); +#endif + + if (status == WEBKIT_LOAD_COMMITTED) { + web_view_ready_counter--; + g_signal_handlers_disconnect_by_func (web_view, load_changed_cb, loop); + + if (web_view_ready_counter == 0) + g_main_loop_quit (loop); + } + +} + +static void +wait_until_load_is_committed (WebKitWebView *web_view, GMainLoop *loop) +{ +#ifdef HAVE_WEBKIT2 + g_signal_connect (web_view, "load-changed", G_CALLBACK (load_changed_cb), loop); +#else + g_signal_connect (web_view, "notify::load-status", G_CALLBACK (load_changed_cb), loop); +#endif +} + +static void +web_view_created_cb (EphyEmbedShell *shell, EphyWebView *view, GMainLoop *loop) +{ + web_view_ready_counter++; + wait_until_load_is_committed (WEBKIT_WEB_VIEW (view), loop); +} + +GMainLoop* +ephy_test_utils_setup_ensure_web_views_are_loaded (void) +{ + GMainLoop *loop; + + web_view_ready_counter = 0; + + loop = g_main_loop_new (NULL, FALSE); + g_signal_connect (ephy_embed_shell_get_default (), "web-view-created", + G_CALLBACK (web_view_created_cb), loop); + + return loop; +} + +void +ephy_test_utils_ensure_web_views_are_loaded (GMainLoop *loop) +{ + if (web_view_ready_counter != 0) + g_main_loop_run (loop); + + g_signal_handlers_disconnect_by_func (ephy_embed_shell_get_default (), G_CALLBACK (web_view_created_cb), loop); + g_assert_cmpint (web_view_ready_counter, ==, 0); + g_main_loop_unref (loop); +} diff --git a/tests/ephy-test-utils.h b/tests/ephy-test-utils.h new file mode 100644 index 000000000..afd05f145 --- /dev/null +++ b/tests/ephy-test-utils.h @@ -0,0 +1,44 @@ +/* + * Copyright © 2013 Igalia S.L. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#if !defined (__EPHY_EPIPHANY_H_INSIDE__) && !defined (EPIPHANY_COMPILATION) +#error "Only <epiphany/epiphany.h> can be included directly." +#endif + +#ifndef EPHY_TEST_UTILS_H +#define EPHY_TEST_UTILS_H + +#include "ephy-web-view.h" + +#include <glib.h> + +G_BEGIN_DECLS + +guint ephy_test_utils_get_web_view_ready_counter (void); + +void ephy_test_utils_check_ephy_web_view_address (EphyWebView *view, + const gchar *address); + +GMainLoop* ephy_test_utils_setup_ensure_web_views_are_loaded (void); + +void ephy_test_utils_ensure_web_views_are_loaded (GMainLoop *loop); + +G_END_DECLS + +#endif |