[epiphany/in-tab-overview: 3/24] Add basic tests for EphySnapshotService



commit dc33199140cdb6e1316c0a34fdd104db54f82daf
Author: Claudio Saavedra <csaavedra igalia com>
Date:   Tue Jan 24 16:07:39 2012 +0200

    Add basic tests for EphySnapshotService
    
    https://bugzilla.gnome.org/show_bug.cgi?id=668578

 tests/Makefile.am                  |    4 +
 tests/ephy-snapshot-service-test.c |  266 ++++++++++++++++++++++++++++++++++++
 2 files changed, 270 insertions(+), 0 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d41bd8a..5c49dac 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 0000000..2ece2df
--- /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 ();
+}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]