aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/ephy-snapshot-service-test.c266
2 files changed, 270 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d41bd8ad4..5c49dac0b 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -12,6 +12,7 @@ noinst_PROGRAMS = \
test-ephy-search-entry \
test-ephy-session \
test-ephy-shell \
+ test-ephy-snapshot-service \
test-ephy-sqlite \
test-ephy-string \
test-ephy-web-app-utils \
@@ -152,6 +153,9 @@ test_ephy_shell_SOURCES = \
$(top_builddir)/src/epiphany-resources.h \
ephy-shell-test.c
+test_ephy_snapshot_service_SOURCES = \
+ ephy-snapshot-service-test.c
+
test_ephy_sqlite_SOURCES = \
ephy-sqlite-test.c
diff --git a/tests/ephy-snapshot-service-test.c b/tests/ephy-snapshot-service-test.c
new file mode 100644
index 000000000..2ece2df1e
--- /dev/null
+++ b/tests/ephy-snapshot-service-test.c
@@ -0,0 +1,266 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Copyright © 2012 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-debug.h"
+#include "ephy-snapshot-service.h"
+
+#include <libsoup/soup.h>
+#include <string.h>
+
+#define TEST_SERVER_URI "http://127.0.0.1:45716"
+static time_t mtime;
+SoupServer *server;
+
+static gboolean
+quit_when_test_done (GtkWidget *w,
+ GdkEvent *event,
+ gint *tests)
+{
+ if (--(*tests) == 0)
+ gtk_main_quit ();
+
+ return FALSE;
+}
+
+static void
+on_snapshot_ready (GObject *source,
+ GAsyncResult *res,
+ gint *tests)
+{
+ GdkPixbuf *pixbuf;
+#if 0
+ GtkWidget *w,*i;
+#endif
+ GError *error = NULL;
+
+ pixbuf = ephy_snapshot_service_get_snapshot_finish (EPHY_SNAPSHOT_SERVICE (source),
+ res, &error);
+ g_assert (GDK_IS_PIXBUF (pixbuf) || error != NULL);
+
+ if (error) {
+ g_print ("Error loading pixbuf: %s\n", error->message);
+ g_error_free (error);
+ quit_when_test_done (NULL, NULL, tests);
+ return;
+ } else
+
+#if 0
+ w = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ i = gtk_image_new_from_pixbuf (pixbuf);
+ gtk_container_add (GTK_CONTAINER (w), i);
+ gtk_widget_show_all (w);
+ g_signal_connect (w, "delete-event",
+ G_CALLBACK (quit_when_test_done), tests);
+#else
+ quit_when_test_done (NULL, NULL, tests);
+#endif
+}
+
+static void
+test_snapshot (void)
+{
+ EphySnapshotService *service = ephy_snapshot_service_get_default ();
+ WebKitWebView *webview = WEBKIT_WEB_VIEW (webkit_web_view_new ());
+ gint tests = 1;
+
+ webkit_web_view_load_uri (webview, TEST_SERVER_URI);
+ ephy_snapshot_service_get_snapshot_async (service,
+ webview,
+ TEST_SERVER_URI,
+ mtime,
+ NULL,
+ (GAsyncReadyCallback)on_snapshot_ready,
+ &tests);
+ gtk_main ();
+}
+
+static void
+test_cached_snapshot (void)
+{
+ gint tests = 1;
+ EphySnapshotService *service = ephy_snapshot_service_get_default ();
+ WebKitWebView *webview = WEBKIT_WEB_VIEW (webkit_web_view_new ());
+
+ webkit_web_view_load_uri (webview, TEST_SERVER_URI);
+ ephy_snapshot_service_get_snapshot_async (service,
+ webview,
+ TEST_SERVER_URI,
+ mtime,
+ NULL,
+ (GAsyncReadyCallback)on_snapshot_ready,
+ &tests);
+ gtk_main ();
+}
+
+static void
+test_many_snapshots (void)
+{
+ WebKitWebView *webview;
+ gint tests = 3;
+ EphySnapshotService *service = ephy_snapshot_service_get_default ();
+
+ webview = WEBKIT_WEB_VIEW (webkit_web_view_new ());
+ webkit_web_view_load_uri (webview, TEST_SERVER_URI "/some");
+ ephy_snapshot_service_get_snapshot_async (service,
+ webview,
+ TEST_SERVER_URI "/some",
+ mtime,
+ NULL,
+ (GAsyncReadyCallback)on_snapshot_ready,
+ &tests);
+
+ webview = WEBKIT_WEB_VIEW (webkit_web_view_new ());
+ webkit_web_view_load_uri (webview, TEST_SERVER_URI "/other");
+ ephy_snapshot_service_get_snapshot_async (service,
+ webview,
+ TEST_SERVER_URI "/other",
+ mtime,
+ NULL,
+ (GAsyncReadyCallback)on_snapshot_ready,
+ &tests);
+
+ webview = WEBKIT_WEB_VIEW (webkit_web_view_new ());
+ webkit_web_view_load_uri (webview, TEST_SERVER_URI "/place");
+ ephy_snapshot_service_get_snapshot_async (service,
+ webview,
+ TEST_SERVER_URI "/place",
+ mtime,
+ NULL,
+ (GAsyncReadyCallback)on_snapshot_ready,
+ &tests);
+ gtk_main ();
+}
+
+static void
+test_snapshot_with_cancellable (void)
+{
+ gint tests = 1;
+ EphySnapshotService *service = ephy_snapshot_service_get_default ();
+ WebKitWebView *webview = WEBKIT_WEB_VIEW (webkit_web_view_new ());
+ GCancellable *cancellable = g_cancellable_new ();
+
+ webkit_web_view_load_uri (webview, TEST_SERVER_URI "/and");
+ ephy_snapshot_service_get_snapshot_async (service,
+ webview,
+ TEST_SERVER_URI "/and",
+ mtime,
+ cancellable,
+ (GAsyncReadyCallback)on_snapshot_ready,
+ &tests);
+ gtk_main ();
+}
+
+static void
+test_already_cancelled_snapshot (void)
+{
+ gint tests = 1;
+ EphySnapshotService *service = ephy_snapshot_service_get_default ();
+ GCancellable *cancellable = g_cancellable_new ();
+ WebKitWebView *webview = WEBKIT_WEB_VIEW (webkit_web_view_new ());
+ webkit_web_view_load_uri (webview, TEST_SERVER_URI "/so");
+
+ g_cancellable_cancel (cancellable);
+ ephy_snapshot_service_get_snapshot_async (service,
+ webview,
+ TEST_SERVER_URI "/so",
+ mtime,
+ cancellable,
+ (GAsyncReadyCallback)on_snapshot_ready,
+ &tests);
+ gtk_main ();
+}
+
+static gboolean
+cancel (GCancellable *cancellable)
+{
+ g_print ("CANCELLING NOW!!!\n");
+ g_cancellable_cancel (cancellable);
+ return FALSE;
+}
+
+static void
+test_snapshot_and_timed_cancellation (void)
+{
+ gint tests = 1;
+ EphySnapshotService *service = ephy_snapshot_service_get_default ();
+ GCancellable *cancellable = g_cancellable_new ();
+ WebKitWebView *webview = WEBKIT_WEB_VIEW (webkit_web_view_new ());
+ webkit_web_view_load_uri (webview, TEST_SERVER_URI "/on");
+
+ ephy_snapshot_service_get_snapshot_async (service,
+ webview,
+ TEST_SERVER_URI "/on",
+ mtime,
+ cancellable,
+ (GAsyncReadyCallback)on_snapshot_ready,
+ &tests);
+ g_timeout_add (15, (GSourceFunc)cancel, cancellable);
+ gtk_main ();
+}
+
+static void
+server_callback (SoupServer *server, SoupMessage *msg,
+ const char *path, GHashTable *query,
+ SoupClientContext *context, gpointer data)
+{
+ const char *response = "<html><h1>This is a header</h1></html>";
+
+ if (msg->method == SOUP_METHOD_GET) {
+ soup_message_set_status (msg, SOUP_STATUS_OK);
+ soup_message_body_append (msg->response_body, SOUP_MEMORY_STATIC,
+ response, strlen (response));
+ g_print ("Client asked for path: %s\n", path);
+ soup_message_body_complete (msg->response_body);
+ }
+ else
+ soup_message_set_status (msg, SOUP_STATUS_NOT_IMPLEMENTED);
+ g_print ("Server responding to this\n");
+}
+
+int
+main (int argc, char *argv[])
+{
+ gtk_test_init (&argc, &argv);
+ ephy_debug_init ();
+
+ server = soup_server_new (SOUP_SERVER_PORT, 45716,
+ SOUP_SERVER_SERVER_HEADER, "snapshot-service-test-server",
+ NULL);
+ soup_server_add_handler (server, NULL,
+ server_callback, NULL, NULL);
+ soup_server_run_async (server);
+
+ mtime = time(NULL);
+
+ g_test_add_func ("/lib/ephy-snapshot-service/test_snapshot",
+ test_snapshot);
+ g_test_add_func ("/lib/ephy-snapshot-service/test_cached_snapshot",
+ test_cached_snapshot);
+ g_test_add_func ("/lib/ephy-snapshot-service/test_many_snapshots",
+ test_many_snapshots);
+ g_test_add_func ("/lib/ephy-snapshot-service/test_snapshot_with_cancellable",
+ test_snapshot_with_cancellable);
+ g_test_add_func ("/lib/ephy-snapshot-service/test_already_cancelled_snapshot",
+ test_already_cancelled_snapshot);
+ g_test_add_func ("/lib/ephy-snapshot-service/test_snapshot_and_timed_cancellation",
+ test_snapshot_and_timed_cancellation);
+ return g_test_run ();
+}