diff options
author | Xan Lopez <xlopez@igalia.com> | 2011-11-25 20:39:50 +0800 |
---|---|---|
committer | Xan Lopez <xan@igalia.com> | 2012-03-07 04:49:42 +0800 |
commit | 374d66dd260b989f22eba25dad4fabc49da2d586 (patch) | |
tree | d32121ea4f1769a3a725c75f1cf01229cb533f95 /tests | |
parent | 77ee0fdf4c5383f2134608e741b73f51ef30f430 (diff) | |
download | gsoc2013-epiphany-374d66dd260b989f22eba25dad4fabc49da2d586.tar gsoc2013-epiphany-374d66dd260b989f22eba25dad4fabc49da2d586.tar.gz gsoc2013-epiphany-374d66dd260b989f22eba25dad4fabc49da2d586.tar.bz2 gsoc2013-epiphany-374d66dd260b989f22eba25dad4fabc49da2d586.tar.lz gsoc2013-epiphany-374d66dd260b989f22eba25dad4fabc49da2d586.tar.xz gsoc2013-epiphany-374d66dd260b989f22eba25dad4fabc49da2d586.tar.zst gsoc2013-epiphany-374d66dd260b989f22eba25dad4fabc49da2d586.zip |
Add EphyHistoryService and helper classes
EphyHistoryService provides a high-level API to store history
information. It will processed by a worker thread using SQLite to
provide a fast, responsive service to the main UI.
Based on the code by Martin Robinson (mrobinson@igalia.com) and
Claudio Saavedra (csaavedra@igalia.com).
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 6 | ||||
-rw-r--r-- | tests/ephy-history.c | 324 |
2 files changed, 330 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 1a0d2cc26..addca34e3 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -2,6 +2,7 @@ noinst_PROGRAMS = \ test-ephy-download \ test-ephy-embed-single \ test-ephy-embed-utils \ + test-ephy-history \ test-ephy-location-entry \ test-ephy-search-entry \ test-ephy-sqlite \ @@ -81,6 +82,7 @@ check-local: test-nonrecursive INCLUDES = \ -I$(top_srcdir)/embed \ -I$(top_srcdir)/lib \ + -I$(top_srcdir)/lib/history \ -I$(top_srcdir)/lib/widgets \ -I$(top_srcdir)/src \ -I$(top_srcdir)/src/bookmarks @@ -94,6 +96,7 @@ LDADD = \ $(top_builddir)/src/bookmarks/libephybookmarks.la \ $(top_builddir)/embed/libephyembed.la \ $(top_builddir)/lib/widgets/libephywidgets.la \ + $(top_builddir)/lib/history/libephyhistory.la \ $(top_builddir)/lib/libephymisc.la \ $(top_builddir)/lib/egg/libegg.la \ $(DBUS_LIBS) \ @@ -115,6 +118,9 @@ test_ephy_embed_single_SOURCES = \ test_ephy_embed_utils_SOURCES = \ ephy-embed-utils-test.c +test_ephy_history_SOURCES = \ + ephy-history.c + test_ephy_location_entry_SOURCES = \ ephy-location-entry-test.c diff --git a/tests/ephy-history.c b/tests/ephy-history.c new file mode 100644 index 000000000..0f2d2822c --- /dev/null +++ b/tests/ephy-history.c @@ -0,0 +1,324 @@ +/* vim: set sw=2 ts=2 sts=2 et: */ +/* + * ephy-sqlite-statement.c + * This file is part of Epiphany + * + * 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-history-service.h" +#include <glib.h> +#include <glib/gstdio.h> +#include <gtk/gtk.h> + +static EphyHistoryService * +ensure_empty_history (const char* filename) +{ + if (g_file_test (filename, G_FILE_TEST_IS_REGULAR)) + g_unlink (filename); + + return ephy_history_service_new (filename); +} + +static void +test_create_history_service (void) +{ + gchar *temporary_file = g_build_filename (g_get_tmp_dir (), "epiphany-history-test.db", NULL); + EphyHistoryService *service = ensure_empty_history (temporary_file); + + g_free (temporary_file); + g_object_unref (service); +} + +static gboolean +destroy_history_service_and_end_main_loop (EphyHistoryService *service) +{ + g_object_unref (service); + g_assert (TRUE); + gtk_main_quit (); + + return FALSE; +} + +static void +test_create_history_service_and_destroy_later (void) +{ + gchar *temporary_file = g_build_filename (g_get_tmp_dir (), "epiphany-history-test.db", NULL); + EphyHistoryService *service = ensure_empty_history (temporary_file); + g_free (temporary_file); + g_timeout_add (100, (GSourceFunc) destroy_history_service_and_end_main_loop, service); + + gtk_main (); +} + +static void +page_vist_created (EphyHistoryService *service, gboolean success, gpointer result_data, gpointer user_data) +{ + g_object_unref (service); + g_assert (result_data == NULL); + g_assert (user_data == NULL); + g_assert (success); + gtk_main_quit (); +} + +static void +test_create_history_entry (void) +{ + gchar *temporary_file = g_build_filename (g_get_tmp_dir (), "epiphany-history-test.db", NULL); + EphyHistoryService *service = ensure_empty_history(temporary_file); + + EphyHistoryPageVisit *visit = ephy_history_page_visit_new ("http://www.gnome.org", 0, EPHY_PAGE_VISIT_TYPED); + ephy_history_service_add_visit (service, visit, page_vist_created, NULL); + ephy_history_page_visit_free (visit); + g_free (temporary_file); + + gtk_main (); +} + +static GList * +create_test_page_visit_list () +{ + GList *visits = NULL; + int i; + for (i = 0; i < 100; i++) { + visits = g_list_append (visits, ephy_history_page_visit_new ("http://www.gnome.org", 3, EPHY_PAGE_VISIT_TYPED)); + visits = g_list_append (visits, ephy_history_page_visit_new ("http://www.gnome.org", 5, EPHY_PAGE_VISIT_TYPED)); + visits = g_list_append (visits, ephy_history_page_visit_new ("http://www.cuteoverload.com", 7, EPHY_PAGE_VISIT_TYPED)); + visits = g_list_append (visits, ephy_history_page_visit_new ("http://www.cuteoverload.com", 8, EPHY_PAGE_VISIT_TYPED)); + } + return visits; +} + +static void +verify_create_history_entry_cb (EphyHistoryService *service, gboolean success, gpointer result_data, gpointer user_data) +{ + GList *visits = (GList *) result_data; + GList *baseline_visits = create_test_page_visit_list (); + GList *current = visits; + GList *current_baseline = baseline_visits; + + g_assert (user_data == NULL); + g_assert (success); + g_assert (visits != NULL); + g_assert_cmpint (g_list_length (visits), ==, g_list_length (baseline_visits)); + + while (current_baseline) { + EphyHistoryPageVisit *visit, *baseline_visit; + + g_assert (current); + visit = (EphyHistoryPageVisit *) current->data; + baseline_visit = (EphyHistoryPageVisit *) current_baseline->data; + + g_assert_cmpstr (visit->url->url, ==, baseline_visit->url->url); + g_assert_cmpstr (visit->url->title, ==, baseline_visit->url->title); + g_assert_cmpint (visit->visit_time, ==, baseline_visit->visit_time); + g_assert_cmpint (visit->visit_type, ==, baseline_visit->visit_type); + + current = current->next; + current_baseline = current_baseline->next; + } + + ephy_history_page_visit_list_free (visits); + ephy_history_page_visit_list_free (baseline_visits); + + g_object_unref (service); + gtk_main_quit (); +} + +static void +verify_create_history_entry (EphyHistoryService *service, gboolean success, gpointer result_data, gpointer user_data) +{ + g_assert (result_data == NULL); + g_assert_cmpint (42, ==, GPOINTER_TO_INT(user_data)); + g_assert (success); + ephy_history_service_find_visits_in_time (service, 0, 8, verify_create_history_entry_cb, NULL); +} + +static void +test_create_history_entries (void) +{ + gchar *temporary_file = g_build_filename (g_get_tmp_dir (), "epiphany-history-test.db", NULL); + EphyHistoryService *service = ensure_empty_history(temporary_file); + + GList *visits = create_test_page_visit_list (); + + /* We use 42 here just to verify that user_data is passed properly to the callback */ + ephy_history_service_add_visits (service, visits, verify_create_history_entry, GINT_TO_POINTER(42)); + ephy_history_page_visit_list_free (visits); + g_free (temporary_file); + + gtk_main (); +} + +static void +get_url (EphyHistoryService *service, gboolean success, gpointer result_data, gpointer user_data) +{ + EphyHistoryURL *url = (EphyHistoryURL *) result_data; + + g_assert (success == TRUE); + g_assert (url != NULL); + g_assert_cmpstr (url->title, ==, "GNOME"); + + ephy_history_url_free (url); + g_object_unref (service); + gtk_main_quit(); +} + +static void +set_url_title (EphyHistoryService *service, gboolean success, gpointer result_data, gpointer user_data) +{ + gboolean test_result = GPOINTER_TO_INT (user_data); + g_assert (success == TRUE); + + if (test_result == FALSE) { + g_object_unref (service); + gtk_main_quit (); + } else + ephy_history_service_get_url (service, "http://www.gnome.org", get_url, NULL); +} + +static void +set_url_title_visit_created (EphyHistoryService *service, gboolean success, gpointer result_data, gpointer user_data) +{ + ephy_history_service_set_url_title (service, "http://www.gnome.org", "GNOME", set_url_title, user_data); +} + +static void +test_set_url_title_helper (gboolean test_results) +{ + gchar *temporary_file = g_build_filename (g_get_tmp_dir (), "epiphany-history-test.db", NULL); + EphyHistoryService *service = ensure_empty_history(temporary_file); + + EphyHistoryPageVisit *visit = ephy_history_page_visit_new ("http://www.gnome.org", 0, EPHY_PAGE_VISIT_TYPED); + ephy_history_service_add_visit (service, visit, set_url_title_visit_created, GINT_TO_POINTER (test_results)); + ephy_history_page_visit_free (visit); + g_free (temporary_file); + + gtk_main (); +} + +static void +test_set_url_title (void) +{ + test_set_url_title_helper (FALSE); +} + +static void +test_set_url_title_is_correct (void) +{ + test_set_url_title_helper (TRUE); +} + +static void +set_url_title_url_not_existent (EphyHistoryService *service, gboolean success, gpointer result_data, gpointer user_data) +{ + g_assert (success == FALSE); + g_object_unref (service); + gtk_main_quit (); +} + +static void +test_set_url_title_url_not_existent (void) +{ + gchar *temporary_file = g_build_filename (g_get_tmp_dir (), "epiphany-history-test.db", NULL); + EphyHistoryService *service = ensure_empty_history(temporary_file); + g_free (temporary_file); + + ephy_history_service_set_url_title (service, "http://www.gnome.org", "GNOME", set_url_title_url_not_existent, NULL); + + gtk_main(); +} + +static void +test_get_url_done (EphyHistoryService *service, gboolean success, gpointer result_data, gpointer user_data) +{ + EphyHistoryURL *url; + gboolean expected_success = GPOINTER_TO_INT (user_data); + + url = (EphyHistoryURL *)result_data; + + g_assert (success == expected_success); + + if (expected_success == TRUE) { + g_assert (url != NULL); + g_assert_cmpstr (url->url, ==, "http://www.gnome.org"); + g_assert_cmpint (url->id, !=, -1); + ephy_history_url_free (url); + } else + g_assert (url == NULL); + + g_object_unref (service); + gtk_main_quit (); +} + +static void +test_get_url_visit_added (EphyHistoryService *service, gboolean success, gpointer result_data, gpointer user_data) +{ + g_assert (success == TRUE); + + ephy_history_service_get_url (service, "http://www.gnome.org", test_get_url_done, user_data); +} + +static void +test_get_url_helper (gboolean add_entry) +{ + gchar *temporary_file = g_build_filename (g_get_tmp_dir (), "epiphany-history-test.db", NULL); + EphyHistoryService *service = ensure_empty_history(temporary_file); + g_free (temporary_file); + + if (add_entry == TRUE) { + EphyHistoryPageVisit *visit = ephy_history_page_visit_new ("http://www.gnome.org", 0, EPHY_PAGE_VISIT_TYPED); + ephy_history_service_add_visit (service, visit, test_get_url_visit_added, GINT_TO_POINTER (add_entry)); + ephy_history_page_visit_free (visit); + } else + ephy_history_service_get_url (service, "http://www.gnome.org", test_get_url_done, GINT_TO_POINTER (add_entry)); + + gtk_main(); +} + +static void +test_get_url (void) +{ + test_get_url_helper (TRUE); +} + +static void +test_get_url_not_existent (void) +{ + test_get_url_helper (FALSE); +} + +int +main (int argc, char *argv[]) +{ + gtk_test_init (&argc, &argv); + + g_test_add_func ("/embed/history/test_create_history_service", test_create_history_service); + g_test_add_func ("/embed/history/test_create_history_service_and_destroy_later", test_create_history_service_and_destroy_later); + g_test_add_func ("/embed/history/test_create_history_entry", test_create_history_entry); + g_test_add_func ("/embed/history/test_create_history_entries", test_create_history_entries); + g_test_add_func ("/embed/history/test_set_url_title", test_set_url_title); + g_test_add_func ("/embed/history/test_set_url_title_is_correct", test_set_url_title_is_correct); + g_test_add_func ("/embed/history/test_set_url_title_url_not_existent", test_set_url_title_url_not_existent); + g_test_add_func ("/embed/history/test_get_url", test_get_url); + g_test_add_func ("/embed/history/test_get_url_not_existent", test_get_url_not_existent); + + return g_test_run (); +} |