From 3fc285222a67a53884723963eb7f37dd74e8ff4f Mon Sep 17 00:00:00 2001 From: Christian Dywan Date: Mon, 20 Apr 2009 21:35:33 +0200 Subject: [PATCH] Add an attempt at unit testing history --- tests/history.c | 221 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 tests/history.c diff --git a/tests/history.c b/tests/history.c new file mode 100644 index 00000000..edf4b257 --- /dev/null +++ b/tests/history.c @@ -0,0 +1,221 @@ +/* + Copyright (C) 2009 Christian Dywan + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + See the file COPYING for the full license text. +*/ + +#if HAVE_CONFIG_H + #include +#endif + +#include "midori.h" +#include "midori-history.h" +#include "sokoke.h" + +static void +history_panel_create (void) +{ + MidoriApp* app; + MidoriHistory* history; + gpointer value; + + app = g_object_new (MIDORI_TYPE_APP, NULL); + + history = g_object_new (MIDORI_TYPE_HISTORY, NULL); + value = katze_object_get_object (history, "app"); + g_assert (value == NULL); + gtk_widget_destroy (GTK_WIDGET (history)); + + history = g_object_new (MIDORI_TYPE_HISTORY, "app", app, NULL); + value = katze_object_get_object (history, "app"); + g_assert (value == app); + gtk_widget_destroy (GTK_WIDGET (history)); + + history = g_object_new (MIDORI_TYPE_HISTORY, NULL); + g_object_set (history, "app", app, NULL); + value = katze_object_get_object (history, "app"); + g_assert (value == app); + gtk_widget_destroy (GTK_WIDGET (history)); +} + +static KatzeItem* +bookmark_new (const gchar* uri, + const gchar* title) +{ + return g_object_new (KATZE_TYPE_ITEM, "uri", uri, "name", title, NULL); +} + +static KatzeArray* +folder_new (const gchar* title) +{ + KatzeArray* folder; + + folder = katze_array_new (KATZE_TYPE_ARRAY); + g_object_set (folder, "name", title, NULL); + return folder; +} + +static void +history_panel_fill (void) +{ + MidoriApp* app; + KatzeArray* array; + MidoriHistory* history; + GList* children; + GtkWidget* treeview; + GtkTreeModel* model; + GtkTreeIter iter; + KatzeItem* bookmark; + KatzeArray* folder; + guint n; + gpointer value; + + app = g_object_new (MIDORI_TYPE_APP, NULL); + array = katze_array_new (KATZE_TYPE_ARRAY); + g_object_set (app, "history", array, NULL); + value = katze_object_get_object (app, "history"); + g_assert (value == array); + history = g_object_new (MIDORI_TYPE_HISTORY, "app", app, NULL); + children = gtk_container_get_children (GTK_CONTAINER (history)); + treeview = g_list_nth_data (children, 0); + g_list_free (children); + g_assert (GTK_IS_TREE_VIEW (treeview)); + model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview)); + g_assert (GTK_IS_TREE_MODEL (model)); + n = gtk_tree_model_iter_n_children (model, NULL); + g_assert_cmpint (n, ==, 0); + bookmark = bookmark_new ("http://www.example.com", "Example"); + katze_array_add_item (array, bookmark); + n = gtk_tree_model_iter_n_children (model, NULL); + g_assert_cmpint (n, ==, 1); + katze_array_remove_item (array, bookmark); + n = gtk_tree_model_iter_n_children (model, NULL); + g_assert_cmpint (n, ==, 0); + bookmark = bookmark_new ("http://www.example.com", "Example"); + katze_array_add_item (array, bookmark); + folder = folder_new ("Empty"); + katze_array_add_item (array, folder); + n = gtk_tree_model_iter_n_children (model, NULL); + g_assert_cmpint (n, ==, 2); + katze_array_remove_item (array, folder); + n = gtk_tree_model_iter_n_children (model, NULL); + g_assert_cmpint (n, ==, 1); + folder = folder_new ("Empty"); + katze_array_add_item (array, folder); + folder = folder_new ("Kurioses"); + katze_array_add_item (array, folder); + bookmark = bookmark_new ("http://www.ende.de", "Das Ende"); + katze_array_add_item (folder, bookmark); + n = gtk_tree_model_iter_n_children (model, NULL); + g_assert_cmpint (n, ==, 3); + folder = folder_new ("Miscellaneous"); + katze_array_add_item (array, folder); + gtk_tree_model_iter_nth_child (model, &iter, NULL, 3); + n = gtk_tree_model_iter_n_children (model, &iter); + g_assert_cmpint (n, ==, 0); + bookmark = bookmark_new ("http://thesaurus.reference.com/", "Thesaurus"); + katze_array_add_item (folder, bookmark); + n = gtk_tree_model_iter_n_children (model, &iter); + g_assert_cmpint (n, ==, 1); + bookmark = bookmark_new ("http://en.wikipedia.org/", "Wikipedia"); + katze_array_add_item (folder, bookmark); + n = gtk_tree_model_iter_n_children (model, &iter); + g_assert_cmpint (n, ==, 2); + katze_array_remove_item (folder, bookmark); + n = gtk_tree_model_iter_n_children (model, &iter); + g_assert_cmpint (n, ==, 1); + katze_array_remove_item (array, folder); + n = gtk_tree_model_iter_n_children (model, NULL); + g_assert_cmpint (n, ==, 3); + katze_array_add_item (array, folder); + /* katze_array_clear (folder); + n = gtk_tree_model_iter_n_children (model, &iter); + g_assert_cmpint (n, ==, 0); */ + katze_array_clear (array); + n = gtk_tree_model_iter_n_children (model, NULL); + g_assert_cmpint (n, ==, 0); +} + +static void +notify_load_status_cb (GtkWidget* view, + GParamSpec* pspec, + guint* done) +{ + MidoriLoadStatus status; + + status = midori_view_get_load_status (MIDORI_VIEW (view)); + if (*done == 2 && status == MIDORI_LOAD_COMMITTED) + *done = 1; + else if (*done == 1 && status == MIDORI_LOAD_FINISHED) + *done = 0; +} + +static void +history_browser_add (void) +{ + MidoriBrowser* browser; + MidoriWebSettings* settings; + KatzeArray* array; + GtkWidget* view; + guint done; + KatzeItem* date; + gsize i; + GtkActionGroup* action_group; + GtkAction* action; + + browser = midori_browser_new (); + settings = midori_web_settings_new (); + array = katze_array_new (KATZE_TYPE_ARRAY); + g_object_set (browser, "settings", settings, "history", array, NULL); + view = midori_view_new (NULL); + midori_browser_add_tab (browser, view); + midori_view_set_uri (MIDORI_VIEW (view), + "data:text/html;charset=utf-8,TestTest"); + g_signal_connect (view, "notify::load-status", + G_CALLBACK (notify_load_status_cb), &done); + done = 2; + while (done) + gtk_main_iteration (); + g_assert_cmpint (katze_array_get_length (array), ==, 1); + date = katze_array_get_nth_item (array, 0); + g_assert_cmpint (katze_array_get_length (KATZE_ARRAY (date)), ==, 1); + i = 0; + gtk_widget_show (view); + midori_browser_set_current_tab (browser, view); + g_assert (midori_browser_get_current_tab (browser) == view); + done = 2; + action_group = midori_browser_get_action_group (browser); + action = gtk_action_group_get_action (action_group, "Location"); + midori_location_action_set_uri (MIDORI_LOCATION_ACTION (action), + "data:text/html;charset=utf-8,TestTest"); + g_signal_emit_by_name (action, "submit-uri", + "data:text/html;charset=utf-8,TestTest", FALSE); + while (done) + gtk_main_iteration (); + g_assert_cmpint (katze_array_get_length (array), ==, 1); + date = katze_array_get_nth_item (array, 0); + g_assert_cmpint (katze_array_get_length (KATZE_ARRAY (date)), ==, 1); + i = 0; +} + +int +main (int argc, + char** argv) +{ + /* libSoup uses threads, so we need to initialize threads. */ + if (!g_thread_supported ()) g_thread_init (NULL); + g_test_init (&argc, &argv, NULL); + gtk_init_check (&argc, &argv); + sokoke_register_stock_items (); + + g_test_add_func ("/history/panel/create", history_panel_create); + g_test_add_func ("/history/panel/fill", history_panel_fill); + g_test_add_func ("/history/browser/add", history_browser_add); + + return g_test_run (); +}