aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDiego Escalante Urrelo <descalante@igalia.com>2011-01-19 00:10:11 +0800
committerDiego Escalante Urrelo <descalante@igalia.com>2011-03-08 04:34:52 +0800
commitb9f9bf1a0763492f8bf41b8856bbd1149c5871a9 (patch)
tree92ad55101bff9eabcbc17afdba4a398ce4c4b709 /tests
parent7f7826a163f31bb662247ac4486dca0d01df35f6 (diff)
downloadgsoc2013-epiphany-b9f9bf1a0763492f8bf41b8856bbd1149c5871a9.tar
gsoc2013-epiphany-b9f9bf1a0763492f8bf41b8856bbd1149c5871a9.tar.gz
gsoc2013-epiphany-b9f9bf1a0763492f8bf41b8856bbd1149c5871a9.tar.bz2
gsoc2013-epiphany-b9f9bf1a0763492f8bf41b8856bbd1149c5871a9.tar.lz
gsoc2013-epiphany-b9f9bf1a0763492f8bf41b8856bbd1149c5871a9.tar.xz
gsoc2013-epiphany-b9f9bf1a0763492f8bf41b8856bbd1149c5871a9.tar.zst
gsoc2013-epiphany-b9f9bf1a0763492f8bf41b8856bbd1149c5871a9.zip
ephy-download: add the new EphyDownload object
EphyDownload is a wrapper object around WebKitDownload that handles common behavior in downloads: auto-destination, default action for the MIME type. It can be used to wrap a WebKitDownload coming from a WebKitView or to download a url: ephy_download_new_for_uri and ephy_download_new_for_download are provided. Its lifetime is not automagic like EphyEmbedPersist, so you have to unref it when you no longer need it. This new object replaces EphyEmbedPersist and enables us to use a single codepath for downloads in all Epiphany. Bug #618443
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am6
-rw-r--r--tests/ephy-download.c207
-rw-r--r--tests/ephy-embed-persist.c315
3 files changed, 210 insertions, 318 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 8cba75725..bb538d845 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,5 +1,5 @@
noinst_PROGRAMS = \
- test-ephy-embed-persist \
+ test-ephy-download \
test-ephy-embed-single \
test-ephy-location-entry \
test-ephy-search-entry \
@@ -33,8 +33,8 @@ LDADD += \
$(SEED_LIBS)
endif
-test_ephy_embed_persist_SOURCES = \
- ephy-embed-persist.c
+test_ephy_download_SOURCES = \
+ ephy-download.c
test_ephy_embed_single_SOURCES = \
ephy-embed-single.c
diff --git a/tests/ephy-download.c b/tests/ephy-download.c
new file mode 100644
index 000000000..14fe81a2d
--- /dev/null
+++ b/tests/ephy-download.c
@@ -0,0 +1,207 @@
+/* vim: set sw=2 ts=2 sts=2 et: */
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * ephy-download.c
+ * This file is part of Epiphany
+ *
+ * Copyright © 2011 - Igalia S.L.
+ *
+ * Epiphany 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 of the License, or
+ * (at your option) any later version.
+ *
+ * Epiphany 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 Epiphany; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#include "config.h"
+#include "ephy-debug.h"
+#include "ephy-download.h"
+#include "ephy-embed-prefs.h"
+#include "ephy-file-helpers.h"
+#include "ephy-shell.h"
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <gtk/gtk.h>
+#include <string.h>
+
+#define HTML_STRING "testing-embed-persist"
+SoupURI *base_uri;
+
+static char *
+get_uri_for_path (const char *path)
+{
+ SoupURI *uri;
+ char *uri_string;
+
+ uri = soup_uri_new_with_base (base_uri, path);
+ uri_string = soup_uri_to_string (uri, FALSE);
+ soup_uri_free (uri);
+
+ return uri_string;
+}
+
+static void
+server_callback (SoupServer *server,
+ SoupMessage *msg,
+ const char *path,
+ GHashTable *query,
+ SoupClientContext *context,
+ gpointer data)
+{
+ soup_message_set_status (msg, SOUP_STATUS_OK);
+
+ if (g_str_equal (path, "/cancelled"))
+ soup_message_set_status (msg, SOUP_STATUS_CANT_CONNECT);
+
+ soup_message_body_append (msg->response_body, SOUP_MEMORY_STATIC,
+ HTML_STRING, strlen (HTML_STRING));
+
+ soup_message_body_complete (msg->response_body);
+}
+
+typedef struct {
+ GMainLoop *loop;
+ EphyDownload *download;
+ char *destination;
+ char *source;
+} Fixture;
+
+static void
+fixture_setup (Fixture *fixture, gconstpointer data)
+{
+ char *tmp_filename;
+ char *dest_file;
+
+ tmp_filename = ephy_file_tmp_filename ("ephy-download-XXXXXX", NULL);
+ dest_file = g_build_filename (ephy_file_tmp_dir (), tmp_filename, NULL);
+
+ fixture->source = get_uri_for_path ("/default");
+ fixture->download = ephy_download_new_for_uri (fixture->source);
+ fixture->destination = g_filename_to_uri (dest_file, NULL, NULL);
+ fixture->loop = g_main_loop_new (NULL, TRUE);
+
+ ephy_download_set_destination_uri (fixture->download, fixture->destination);
+
+ g_free (tmp_filename);
+ g_free (dest_file);
+}
+
+static void
+fixture_teardown (Fixture *fixture, gconstpointer data)
+{
+ g_free (fixture->destination);
+ g_free (fixture->source);
+
+ g_object_unref (fixture->download);
+
+ g_main_loop_unref (fixture->loop);
+}
+
+static gboolean
+test_file_was_downloaded (EphyDownload *download)
+{
+ char *filename;
+ gboolean ret;
+
+ filename = g_filename_from_uri (ephy_download_get_destination_uri (download),
+ NULL, NULL);
+
+ ret = g_file_test (filename, G_FILE_TEST_EXISTS);
+ g_free (filename);
+
+ return ret;
+}
+
+static void
+completed_cb (EphyDownload *download,
+ Fixture *fixture)
+{
+ g_assert (test_file_was_downloaded (download));
+ g_main_loop_quit (fixture->loop);
+}
+
+static void
+test_ephy_download_new (Fixture *fixture, gconstpointer data)
+{
+ g_assert (EPHY_IS_DOWNLOAD (fixture->download));
+}
+
+static void
+test_ephy_download_new_for_uri (Fixture *fixture, gconstpointer data)
+{
+ EphyDownload *download;
+
+ download = ephy_download_new_for_uri (fixture->source);
+
+ g_assert (EPHY_IS_DOWNLOAD (download));
+
+ g_assert_cmpstr (fixture->source, ==, ephy_download_get_source_uri (download));
+
+ g_signal_connect (G_OBJECT (download), "completed",
+ G_CALLBACK (completed_cb), fixture);
+
+ g_main_loop_run (fixture->loop);
+}
+
+static void
+test_ephy_download_start (Fixture *fixture, gconstpointer data)
+{
+ g_signal_connect (G_OBJECT (fixture->download), "completed",
+ G_CALLBACK (completed_cb), fixture);
+
+ g_main_loop_run (fixture->loop);
+}
+
+int
+main (int argc, char *argv[])
+{
+ int ret;
+ SoupServer *server;
+
+ gtk_test_init (&argc, &argv);
+ g_thread_init (NULL);
+
+ ephy_debug_init ();
+ ephy_embed_prefs_init ();
+ _ephy_shell_create_instance ();
+
+ if (!ephy_file_helpers_init (NULL, TRUE, FALSE, NULL)) {
+ g_debug ("Something wrong happened with ephy_file_helpers_init()");
+ return -1;
+ }
+
+ server = soup_server_new (SOUP_SERVER_PORT, 0, NULL);
+ soup_server_run_async (server);
+
+ base_uri = soup_uri_new ("http://127.0.0.1/");
+ soup_uri_set_port (base_uri, soup_server_get_port (server));
+
+ soup_server_add_handler (server, NULL, server_callback, NULL, NULL);
+
+ g_test_add ("/embed/ephy-download/new",
+ Fixture, NULL, fixture_setup,
+ test_ephy_download_new, fixture_teardown);
+ g_test_add ("/embed/ephy-download/new_for_uri",
+ Fixture, NULL, fixture_setup,
+ test_ephy_download_new_for_uri, fixture_teardown);
+ g_test_add ("/embed/ephy-download/start",
+ Fixture, NULL, fixture_setup,
+ test_ephy_download_start, fixture_teardown);
+
+ ret = g_test_run ();
+
+ g_object_unref (ephy_shell);
+ ephy_file_helpers_shutdown ();
+
+ return ret;
+}
diff --git a/tests/ephy-embed-persist.c b/tests/ephy-embed-persist.c
deleted file mode 100644
index 971c3577d..000000000
--- a/tests/ephy-embed-persist.c
+++ /dev/null
@@ -1,315 +0,0 @@
-/* vim: set sw=2 ts=2 sts=2 et: */
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * ephy-embed-persist.c
- * This file is part of Epiphany
- *
- * Copyright © 2009, 2010 - Gustavo Noronha Silva
- * Copyright © 2010 - Igalia S.L.
- *
- * Epiphany 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 of the License, or
- * (at your option) any later version.
- *
- * Epiphany 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 Epiphany; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "ephy-debug.h"
-#include "ephy-embed-persist.h"
-#include "ephy-embed-prefs.h"
-#include "ephy-file-helpers.h"
-#include "ephy-shell.h"
-#include "ephy-stock-icons.h"
-#include <glib.h>
-#include <glib/gstdio.h>
-#include <gtk/gtk.h>
-#include <libsoup/soup.h>
-#include <string.h>
-
-#define HTML_STRING "testing-embed-persist"
-SoupURI *base_uri;
-
-static char *
-get_uri_for_path (const char *path)
-{
- SoupURI *uri;
- char *uri_string;
-
- uri = soup_uri_new_with_base (base_uri, path);
- uri_string = soup_uri_to_string (uri, FALSE);
- soup_uri_free (uri);
-
- return uri_string;
-}
-
-static void
-server_callback (SoupServer *server,
- SoupMessage *msg,
- const char *path,
- GHashTable *query,
- SoupClientContext *context,
- gpointer data)
-{
- soup_message_set_status (msg, SOUP_STATUS_OK);
-
- if (g_str_equal (path, "/cancelled"))
- soup_message_set_status (msg, SOUP_STATUS_CANT_CONNECT);
-
- soup_message_body_append (msg->response_body, SOUP_MEMORY_STATIC,
- HTML_STRING, strlen (HTML_STRING));
-
- soup_message_body_complete (msg->response_body);
-}
-
-typedef struct {
- GMainLoop *loop;
- EphyEmbedPersist *embed;
- char *destination;
-} PersistFixture;
-
-static void
-persist_fixture_setup (PersistFixture *fixture,
- gconstpointer data)
-{
- char *tmp_filename;
- char *uri_string;
-
- tmp_filename = ephy_file_tmp_filename ("embed-persist-save-XXXXXX", NULL);
- fixture->destination = g_build_filename (ephy_file_tmp_dir (), tmp_filename, NULL);
-
- fixture->loop = g_main_loop_new (NULL, TRUE);
- fixture->embed = EPHY_EMBED_PERSIST (g_object_new (EPHY_TYPE_EMBED_PERSIST, NULL));
-
- uri_string = get_uri_for_path ("/default");
-
- ephy_embed_persist_set_source (fixture->embed, uri_string);
- ephy_embed_persist_set_dest (fixture->embed, fixture->destination);
- ephy_embed_persist_set_flags (fixture->embed, EPHY_EMBED_PERSIST_NO_VIEW);
-
- g_free (tmp_filename);
- g_free (uri_string);
-}
-
-static void
-persist_fixture_teardown (PersistFixture *fixture,
- gconstpointer data)
-{
- g_unlink (fixture->destination);
- g_free (fixture->destination);
-
- if (fixture->embed != NULL)
- g_object_unref (fixture->embed);
-
- g_main_loop_unref (fixture->loop);
-}
-
-static void
-test_embed_persist_new (PersistFixture *fixture,
- gconstpointer data)
-{
- g_assert (EPHY_IS_EMBED_PERSIST (fixture->embed));
-}
-
-static void
-test_embed_persist_set_dest (PersistFixture *fixture,
- gconstpointer data)
-{
- const char *dest_value = NULL;
- char *read_value;
-
- ephy_embed_persist_set_dest (fixture->embed, dest_value);
- g_object_get (G_OBJECT (fixture->embed), "dest", &read_value, NULL);
-
- g_assert_cmpstr (dest_value, ==, read_value);
-
- g_free (read_value);
-}
-
-static void
-test_embed_persist_set_embed (PersistFixture *fixture,
- gconstpointer data)
-{
- EphyEmbed *orig_value;
- EphyEmbed *fail_value;
- EphyEmbed *read_value;
-
- orig_value = EPHY_EMBED (g_object_new (EPHY_TYPE_EMBED, NULL));
- fail_value = EPHY_EMBED (g_object_new (EPHY_TYPE_EMBED, NULL));
-
- ephy_embed_persist_set_embed (fixture->embed, orig_value);
- g_object_get (G_OBJECT (fixture->embed), "embed", &read_value, NULL);
-
- g_assert (read_value == orig_value);
- g_assert (read_value != fail_value);
-
- g_object_unref (read_value);
- g_object_ref_sink (fail_value);
- g_object_unref (fail_value);
-}
-
-static void
-test_embed_persist_save_empty_dest (PersistFixture *fixture,
- gconstpointer data)
-{
- ephy_embed_persist_set_source (fixture->embed, "ficticious-source");
-
- /* No dest is set and no EPHY_EMBED_PERSIST_ASK_DESTINATION flag,
- so the destination will be downloads folder with the suggested filename. */
- g_assert (ephy_embed_persist_save (fixture->embed) == TRUE);
-
- /* Otherwise the reference from ephy_embed_persist_save () is never unref'd */
- ephy_embed_persist_cancel (fixture->embed);
-}
-
-static void
-test_embed_persist_save (PersistFixture *fixture,
- gconstpointer data)
-{
- /* Source and dest set, should return TRUE */
- g_assert (ephy_embed_persist_save (fixture->embed) == TRUE);
-
- /* Otherwise the reference from ephy_embed_persist_save () is never unref'd */
- ephy_embed_persist_cancel (fixture->embed);
-}
-
-static void
-test_embed_persist_cancel (PersistFixture *fixture,
- gconstpointer data)
-{
- ephy_embed_persist_cancel (fixture->embed);
- /* This is the only case where the embed unrefs itself */
- fixture->embed = NULL;
-}
-
-static void
-completed_cb (EphyEmbedPersist *persist,
- PersistFixture *fixture)
-{
- g_main_loop_quit (fixture->loop);
-}
-
-static void
-test_embed_persist_save_completed (PersistFixture *fixture,
- gconstpointer userdata)
-{
- g_signal_connect (G_OBJECT (fixture->embed), "completed",
- G_CALLBACK (completed_cb), fixture);
-
- ephy_embed_persist_save (fixture->embed);
-
- g_main_loop_run (fixture->loop);
-
- g_assert (g_file_test (fixture->destination, G_FILE_TEST_EXISTS));
-}
-
-static void
-cancelled_cb (EphyEmbedPersist *persist,
- PersistFixture *fixture)
-{
- g_main_loop_quit (fixture->loop);
-}
-
-static void
-test_embed_persist_cancelled (PersistFixture *fixture,
- gconstpointer userdata)
-{
- char *uri_string;
-
- g_signal_connect (G_OBJECT (fixture->embed), "cancelled",
- G_CALLBACK (cancelled_cb), fixture);
-
- uri_string = get_uri_for_path ("/cancelled");
- ephy_embed_persist_set_source (fixture->embed, uri_string);
- g_free (uri_string);
-
- g_assert (ephy_embed_persist_save (fixture->embed));
-
- g_main_loop_run (fixture->loop);
-}
-
-int
-main (int argc, char *argv[])
-{
- int ret;
- SoupServer *server;
-
- gtk_test_init (&argc, &argv);
- g_thread_init (NULL);
-
- ephy_debug_init ();
- ephy_embed_prefs_init ();
- _ephy_shell_create_instance ();
-
- if (!ephy_file_helpers_init (NULL, TRUE, FALSE, NULL)) {
- g_debug ("Something wrong happened with ephy_file_helpers_init()");
- return -1;
- }
-
- server = soup_server_new (SOUP_SERVER_PORT, 0, NULL);
- soup_server_run_async (server);
-
- base_uri = soup_uri_new ("http://127.0.0.1/");
- soup_uri_set_port (base_uri, soup_server_get_port (server));
-
- soup_server_add_handler (server, NULL, server_callback, NULL, NULL);
-
- g_test_add ("/embed/ephy-embed-persist/new",
- PersistFixture, NULL,
- persist_fixture_setup,
- test_embed_persist_new,
- persist_fixture_teardown);
- g_test_add ("/embed/ephy-embed-persist/set_dest",
- PersistFixture, NULL,
- persist_fixture_setup,
- test_embed_persist_set_dest,
- persist_fixture_teardown);
- g_test_add ("/embed/ephy-embed-persist/set_embed",
- PersistFixture, NULL,
- persist_fixture_setup,
- test_embed_persist_set_embed,
- persist_fixture_teardown);
- g_test_add ("/embed/ephy-embed-persist/save_empty_dest",
- PersistFixture, NULL,
- persist_fixture_setup,
- test_embed_persist_save_empty_dest,
- persist_fixture_teardown);
-
- g_test_add ("/embed/ephy-embed-persist/save",
- PersistFixture, NULL,
- persist_fixture_setup,
- test_embed_persist_save,
- persist_fixture_teardown);
- g_test_add ("/embed/ephy-embed-persist/cancel",
- PersistFixture, NULL,
- persist_fixture_setup,
- test_embed_persist_cancel,
- persist_fixture_teardown);
-
- g_test_add ("/embed/ephy-embed-persist/save_completed",
- PersistFixture, NULL,
- persist_fixture_setup,
- test_embed_persist_save_completed,
- persist_fixture_teardown);
- g_test_add ("/embed/ephy-embed-persist/cancelled",
- PersistFixture, NULL,
- persist_fixture_setup,
- test_embed_persist_cancelled,
- persist_fixture_teardown);
-
- ret = g_test_run ();
-
- g_object_unref (ephy_shell);
- ephy_file_helpers_shutdown ();
-
- return ret;
-}