2 * Copyright (C) 2008 Holger Hans Peter Freyther
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
22 #include <webkit/webkit.h>
24 #if GTK_CHECK_VERSION(2, 14, 0)
26 static void test_webkit_web_history_item_lifetime(void)
28 WebKitWebView* webView;
29 WebKitWebBackForwardList* backForwardList;
30 WebKitWebHistoryItem* currentItem;
31 WebKitWebHistoryItem* forwardItem;
32 WebKitWebHistoryItem* backItem;
33 WebKitWebHistoryItem* nthItem;
34 WebKitWebHistoryItem* item1;
35 WebKitWebHistoryItem* item2;
36 WebKitWebHistoryItem* item3;
37 WebKitWebHistoryItem* item4;
38 GList* backList = NULL;
39 GList* forwardList = NULL;
42 webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
43 g_object_ref_sink(webView);
44 backForwardList = webkit_web_view_get_back_forward_list(webView);
45 g_assert_cmpint(G_OBJECT(backForwardList)->ref_count, ==, 1);
48 item1 = webkit_web_history_item_new_with_data("http://example.com/1/", "Site 1");
49 webkit_web_back_forward_list_add_item(backForwardList, item1);
50 g_object_unref(item1);
52 item2 = webkit_web_history_item_new_with_data("http://example.com/2/", "Site 2");
53 webkit_web_back_forward_list_add_item(backForwardList, item2);
54 g_object_unref(item2);
56 item3 = webkit_web_history_item_new_with_data("http://example.com/3/", "Site 3");
57 webkit_web_back_forward_list_add_item(backForwardList, item3);
58 g_object_unref(item3);
60 item4 = webkit_web_history_item_new_with_data("http://example.com/4/", "Site 4");
61 webkit_web_back_forward_list_add_item(backForwardList, item4);
62 g_object_unref(item4);
64 /* make sure these functions don't add unnecessary ref to the history item */
65 backItem = webkit_web_back_forward_list_get_back_item(backForwardList);
66 g_object_ref(backItem);
67 g_assert_cmpint(G_OBJECT(backItem)->ref_count, ==, 2);
68 g_object_unref(backItem);
69 g_assert_cmpint(G_OBJECT(backItem)->ref_count, ==, 1);
71 currentItem = webkit_web_back_forward_list_get_current_item(backForwardList);
72 g_object_ref(currentItem);
73 g_assert_cmpint(G_OBJECT(currentItem)->ref_count, ==, 2);
74 g_object_unref(currentItem);
75 g_assert_cmpint(G_OBJECT(currentItem)->ref_count, ==, 1);
77 webkit_web_back_forward_list_go_to_item(backForwardList, item2);
78 forwardItem = webkit_web_back_forward_list_get_forward_item(backForwardList);
79 g_object_ref(forwardItem);
80 g_assert_cmpint(G_OBJECT(forwardItem)->ref_count, ==, 2);
81 g_object_unref(forwardItem);
82 g_assert_cmpint(G_OBJECT(forwardItem)->ref_count, ==, 1);
84 nthItem = webkit_web_back_forward_list_get_nth_item(backForwardList, 1);
85 g_object_ref(nthItem);
86 g_assert_cmpint(G_OBJECT(nthItem)->ref_count, ==, 2);
87 g_object_unref(nthItem);
88 g_assert_cmpint(G_OBJECT(nthItem)->ref_count, ==, 1);
90 backList = webkit_web_back_forward_list_get_back_list_with_limit(backForwardList, 5);
91 for (; backList; backList = backList->next)
92 g_assert_cmpint(G_OBJECT(backList->data)->ref_count, ==, 1);
94 forwardList = webkit_web_back_forward_list_get_forward_list_with_limit(backForwardList, 5);
95 for (; forwardList; forwardList = forwardList->next)
96 g_assert_cmpint(G_OBJECT(forwardList->data)->ref_count, ==, 1);
98 g_list_free(forwardList);
99 g_list_free(backList);
100 g_assert_cmpint(G_OBJECT(item1)->ref_count, ==, 1);
101 g_assert_cmpint(G_OBJECT(item2)->ref_count, ==, 1);
102 g_assert_cmpint(G_OBJECT(item3)->ref_count, ==, 1);
103 g_assert_cmpint(G_OBJECT(item4)->ref_count, ==, 1);
104 g_assert_cmpint(G_OBJECT(backForwardList)->ref_count, ==, 1);
105 g_object_unref(webView);
108 static void test_webkit_web_back_forward_list_order(void)
110 WebKitWebView* webView;
111 WebKitWebBackForwardList* webBackForwardList;
112 WebKitWebHistoryItem* item1;
113 WebKitWebHistoryItem* item2;
114 WebKitWebHistoryItem* item3;
115 WebKitWebHistoryItem* item4;
116 WebKitWebHistoryItem* currentItem;
117 GList* backList = NULL;
118 GList* forwardList = NULL;
121 webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
122 g_object_ref_sink(webView);
124 webkit_web_view_set_maintains_back_forward_list(webView, TRUE);
125 webBackForwardList = webkit_web_view_get_back_forward_list(webView);
126 g_assert(webBackForwardList);
128 // Check that there is no item.
129 g_assert(!webkit_web_back_forward_list_get_current_item(webBackForwardList));
130 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0);
131 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0);
132 g_assert(!webkit_web_view_can_go_forward(webView));
133 g_assert(!webkit_web_view_can_go_back(webView));
136 item1 = webkit_web_history_item_new_with_data("http://example.com/1/", "Site 1");
137 webkit_web_back_forward_list_add_item(webBackForwardList, item1);
138 g_object_unref(item1);
139 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, item1));
141 item2 = webkit_web_history_item_new_with_data("http://example.com/2/", "Site 2");
142 webkit_web_back_forward_list_add_item(webBackForwardList, item2);
143 g_object_unref(item2);
144 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, item2));
146 item3 = webkit_web_history_item_new_with_data("http://example.com/3/", "Site 3");
147 webkit_web_back_forward_list_add_item(webBackForwardList, item3);
148 g_object_unref(item3);
149 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, item3));
151 item4 = webkit_web_history_item_new_with_data("http://example.com/4/", "Site 4");
152 webkit_web_back_forward_list_add_item(webBackForwardList, item4);
153 g_object_unref(item4);
154 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, item4));
156 // check the back list order
157 backList = webkit_web_back_forward_list_get_back_list_with_limit(webBackForwardList, 5);
160 currentItem = WEBKIT_WEB_HISTORY_ITEM(backList->data);
161 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/3/");
162 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Site 3");
163 backList = backList->next;
165 currentItem = WEBKIT_WEB_HISTORY_ITEM(backList->data);
166 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/2/");
167 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Site 2");
168 backList = backList->next;
170 currentItem = WEBKIT_WEB_HISTORY_ITEM(backList->data);
171 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/1/");
172 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Site 1");
173 g_list_free(backList);
175 // check the forward list order
176 g_assert(webkit_web_view_go_to_back_forward_item(webView, item1));
177 forwardList = webkit_web_back_forward_list_get_forward_list_with_limit(webBackForwardList,5);
178 g_assert(forwardList);
180 currentItem = WEBKIT_WEB_HISTORY_ITEM(forwardList->data);
181 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/4/");
182 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Site 4");
183 forwardList = forwardList->next;
185 currentItem = WEBKIT_WEB_HISTORY_ITEM(forwardList->data);
186 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/3/");
187 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Site 3");
188 forwardList = forwardList->next;
190 currentItem = WEBKIT_WEB_HISTORY_ITEM(forwardList->data);
191 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/2/");
192 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Site 2");
194 g_list_free(forwardList);
195 g_object_unref(webView);
198 static void test_webkit_web_back_forward_list_add_item(void)
200 WebKitWebView* webView;
201 WebKitWebBackForwardList* webBackForwardList;
202 WebKitWebHistoryItem* addItem1;
203 WebKitWebHistoryItem* addItem2;
204 WebKitWebHistoryItem* backItem;
205 WebKitWebHistoryItem* currentItem;
208 webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
209 g_object_ref_sink(webView);
211 webkit_web_view_set_maintains_back_forward_list(webView, TRUE);
212 webBackForwardList = webkit_web_view_get_back_forward_list(webView);
213 g_assert(webBackForwardList);
215 // Check that there is no item.
216 g_assert(!webkit_web_back_forward_list_get_current_item(webBackForwardList));
217 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0);
218 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0);
219 g_assert(!webkit_web_view_can_go_forward(webView));
220 g_assert(!webkit_web_view_can_go_back(webView));
223 addItem1 = webkit_web_history_item_new_with_data("http://example.com/", "Added site");
224 webkit_web_back_forward_list_add_item(webBackForwardList, addItem1);
225 g_object_unref(addItem1);
226 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, addItem1));
228 // Check that the added item is the current item.
229 currentItem = webkit_web_back_forward_list_get_current_item(webBackForwardList);
230 g_assert(currentItem);
231 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0);
232 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0);
233 g_assert(!webkit_web_view_can_go_forward(webView));
234 g_assert(!webkit_web_view_can_go_back(webView));
235 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/");
236 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Added site");
239 addItem2 = webkit_web_history_item_new_with_data("http://example.com/2/", "Added site 2");
240 webkit_web_back_forward_list_add_item(webBackForwardList, addItem2);
241 g_object_unref(addItem2);
242 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, addItem2));
244 // Check that the added item is new current item.
245 currentItem = webkit_web_back_forward_list_get_current_item(webBackForwardList);
246 g_assert(currentItem);
247 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0);
248 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 1);
249 g_assert(!webkit_web_view_can_go_forward(webView));
250 g_assert(webkit_web_view_can_go_back(webView));
251 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/2/");
252 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Added site 2");
254 backItem = webkit_web_back_forward_list_get_back_item(webBackForwardList);
256 g_assert_cmpstr(webkit_web_history_item_get_uri(backItem), ==, "http://example.com/");
257 g_assert_cmpstr(webkit_web_history_item_get_title(backItem), ==, "Added site");
259 // Go to the first added item.
260 g_assert(webkit_web_view_go_to_back_forward_item(webView, addItem1));
261 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 1);
262 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0);
263 g_assert(webkit_web_view_can_go_forward(webView));
264 g_assert(!webkit_web_view_can_go_back(webView));
266 g_object_unref(webView);
269 static void test_webkit_web_back_forward_list_clear(void)
271 WebKitWebView* webView;
272 WebKitWebBackForwardList* webBackForwardList;
273 WebKitWebHistoryItem* addItem;
276 webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
277 g_object_ref_sink(webView);
279 webBackForwardList = webkit_web_view_get_back_forward_list(webView);
280 g_assert(webBackForwardList);
282 // Check that there is no item.
283 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0);
284 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0);
285 g_assert(!webkit_web_back_forward_list_get_current_item(webBackForwardList));
286 g_assert(!webkit_web_view_can_go_forward(webView));
287 g_assert(!webkit_web_view_can_go_back(webView));
289 // Check that clearing the empty list does not modify counters
290 webkit_web_back_forward_list_clear(webBackForwardList);
291 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0);
292 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0);
293 g_assert(!webkit_web_back_forward_list_get_current_item(webBackForwardList));
294 g_assert(!webkit_web_view_can_go_forward(webView));
295 g_assert(!webkit_web_view_can_go_back(webView));
298 addItem = webkit_web_history_item_new_with_data("http://example.com/", "Added site");
299 webkit_web_back_forward_list_add_item(webBackForwardList, addItem);
300 g_object_unref(addItem);
301 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, addItem));
303 // Check that after clearing the list the added item is no longer in the list
304 webkit_web_back_forward_list_clear(webBackForwardList);
305 g_assert(!webkit_web_back_forward_list_contains_item(webBackForwardList, addItem));
307 // Check that after clearing it, the list is empty
308 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0);
309 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0);
310 g_assert(!webkit_web_back_forward_list_get_current_item(webBackForwardList));
311 g_assert(!webkit_web_view_can_go_forward(webView));
312 g_assert(!webkit_web_view_can_go_back(webView));
314 g_object_unref(webView);
317 int main(int argc, char** argv)
320 gtk_test_init(&argc, &argv, NULL);
322 g_test_bug_base("https://bugs.webkit.org/");
323 g_test_add_func("/webkit/webbackforwardlist/add_item", test_webkit_web_back_forward_list_add_item);
324 g_test_add_func("/webkit/webbackforwardlist/list_order", test_webkit_web_back_forward_list_order);
325 g_test_add_func("/webkit/webhistoryitem/lifetime", test_webkit_web_history_item_lifetime);
326 g_test_add_func("/webkit/webbackforwardlist/clear", test_webkit_web_back_forward_list_clear);
327 return g_test_run ();
331 int main(int argc, char** argv)
333 g_critical("You will need gtk-2.14.0 to run the unit tests. Doing nothing now.");