midori/tests/tab.vala
2013-10-23 20:45:02 -07:00

286 lines
10 KiB
Vala
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Copyright (C) 2012 Christian Dywan <christian@twotoasts.de>
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.
*/
void tab_load_title () {
/*
var view = new Midori.View.with_title ();
view.set_uri ("about:blank");
do {
}
while (view.load_status != Midori.LoadStatus.FINISHED);
Katze.assert_str_equal ("about:blank", "about:blank", view.uri);
Katze.assert_str_equal ("about:blank", "", view.get_display_uri ()); */
}
struct TestCaseEllipsize {
public string uri;
public string? title;
public Pango.EllipsizeMode expected_ellipsize;
public string expected_title;
}
const TestCaseEllipsize[] titles = {
{ "http://secure.wikimedia.org/wikipedia/en/wiki/Cat",
"Cat - Wikipedia, the free encyclopedia",
Pango.EllipsizeMode.END, null },
{ "https://ar.wikipedia.org/wiki/%D9%82%D8%B7",
"قط - ويكيبيديا، الموسوعة الحرة",
Pango.EllipsizeMode.END, null },
{ "https://ar.wikipedia.org/wiki/قط",
"قط - ويكيبيديا، الموسوعة الحرة",
Pango.EllipsizeMode.END, null },
{ "http://help.duckduckgo.com/customer/portal/articles/352255-wordpress",
"DuckDuckGo | WordPress",
Pango.EllipsizeMode.START, null },
{ "file:///home/user",
"OMG!",
Pango.EllipsizeMode.START, "/home/user" },
{ "http://paste.foo/0007-Bump-version-to-0.4.7.patch",
null,
Pango.EllipsizeMode.START, "0007-Bump-version-to-0.4.7.patch" },
{ "http://translate.google.com/#en/de/cat%0Adog%0Ahorse",
"Google Translator",
Pango.EllipsizeMode.END, null }
};
static void tab_display_title () {
foreach (var title in titles) {
string result = Midori.Tab.get_display_title (title.title, title.uri);
#if HAVE_WIN32
string expected = title.expected_title ?? title.title;
#else
string expected = title.expected_title ?? "" + title.title;
#endif
if (result != expected)
error ("%s expected for %s but got %s",
expected, title.title, result);
}
}
static void tab_display_ellipsize () {
foreach (var title in titles) {
Pango.EllipsizeMode result = Midori.Tab.get_display_ellipsize (
Midori.Tab.get_display_title (title.title, title.uri), title.uri);
if (result != title.expected_ellipsize)
error ("%s expected for %s/ %s but got %s",
title.expected_ellipsize.to_string (), title.title, title.uri, result.to_string ());
}
}
void tab_special () {
Midori.Test.grab_max_timeout ();
Midori.Test.log_set_fatal_handler_for_icons ();
var browser = new Midori.Browser ();
var settings = new Midori.WebSettings ();
browser.set ("settings", settings);
var tab = new Midori.View.with_title ();
tab.settings = new Midori.WebSettings ();
tab.settings.set ("enable-plugins", false);
browser.add_tab (tab);
var loop = MainContext.default ();
tab.set_uri ("about:blank");
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (tab.is_blank ());
assert (!tab.can_view_source ());
assert (tab.special);
assert (!tab.can_save ());
tab.set_uri ("about:private");
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (tab.is_blank ());
assert (!tab.can_view_source ());
assert (tab.special);
assert (!tab.can_save ());
tab.set_uri ("about:nodocs");
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (tab.is_blank ());
assert (!tab.can_view_source ());
assert (tab.special);
assert (!tab.can_save ());
tab.set_uri ("http://.invalid");
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (!tab.is_blank ());
assert (!tab.can_view_source ());
assert (tab.special);
assert (!tab.can_save ());
Midori.Test.release_max_timeout ();
}
void tab_alias () {
Midori.Test.log_set_fatal_handler_for_icons ();
var browser = new Midori.Browser ();
var settings = new Midori.WebSettings ();
browser.set ("settings", settings);
var tab = new Midori.View.with_title ();
tab.settings = new Midori.WebSettings ();
tab.settings.set ("enable-plugins", false);
browser.add_tab (tab);
var loop = MainContext.default ();
tab.settings.tabhome = "http://.invalid/";
tab.set_uri ("about:new");
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (tab.uri == tab.settings.tabhome);
#if !HAVE_WEBKIT2
// Check that this is the real page, not white page with a URL
assert (!tab.web_view.search_text ("about:", true, false, false));
#endif
tab.settings.tabhome = "about:blank";
tab.set_uri ("about:new");
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (tab.uri == tab.settings.tabhome);
#if !HAVE_WEBKIT2
// Check that this is the real page, not white page with a URL
assert (!tab.web_view.search_text ("about:", true, false, false));
#endif
tab.settings.tabhome = "about:search";
tab.settings.location_entry_search = "http://.invalid/";
tab.set_uri ("about:new");
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (tab.uri == tab.settings.location_entry_search);
#if !HAVE_WEBKIT2
// Check that this is the real page, not white page with a URL
assert (!tab.web_view.search_text ("about:", true, false, false));
#endif
tab.settings.tabhome = "about:home";
tab.settings.homepage = "http://.invalid/";
tab.set_uri ("about:new");
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (tab.uri == tab.settings.homepage);
#if !HAVE_WEBKIT2
// Check that this is the real page, not white page with a URL
assert (!tab.web_view.search_text ("about:", true, false, false));
#endif
}
void tab_http () {
Midori.Test.grab_max_timeout ();
Midori.Test.log_set_fatal_handler_for_icons ();
var browser = new Midori.Browser ();
var settings = new Midori.WebSettings ();
browser.set ("settings", settings);
var tab = new Midori.View.with_title ();
tab.settings = new Midori.WebSettings ();
tab.settings.set ("enable-plugins", false);
browser.add_tab (tab);
var loop = MainContext.default ();
var test_address = new Soup.Address ("127.0.0.1", Soup.ADDRESS_ANY_PORT);
test_address.resolve_sync (null);
var test_server = new Soup.Server ("interface", test_address, null);
string test_url = "http://127.0.0.1:%u".printf (test_server.get_port ());
test_server.run_async ();
test_server.add_handler ("/", (server, msg, path, query, client)=>{
msg.set_status_full (200, "OK");
msg.response_body.append_take ("<body></body>".data);
});
var item = tab.get_proxy_item ();
item.set_meta_integer ("delay", Midori.Delay.UNDELAYED);
tab.set_uri (test_url);
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (tab.can_view_source ());
assert (!tab.special);
assert (tab.can_save ());
tab.set_uri (test_url);
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (!tab.is_blank ());
assert (tab.can_view_source ());
assert (!tab.special);
assert (tab.can_save ());
var source = new Midori.View.with_title (null, tab.settings);
browser.add_tab (source);
source.view_source = true;
source.web_view.load_uri (test_url);
do { loop.iteration (true); } while (source.load_status != Midori.LoadStatus.FINISHED);
assert (!source.is_blank ());
assert (!source.can_view_source ());
assert (!source.special);
/* FIXME assert (source.can_save ()); */
assert (source.view_source);
source.set_uri ("http://.invalid");
do { loop.iteration (true); } while (source.load_status != Midori.LoadStatus.FINISHED);
assert (!source.is_blank ());
assert (!source.can_view_source ());
assert (source.special);
assert (!source.can_save ());
assert (!source.view_source);
Midori.Test.release_max_timeout ();
}
void tab_movement () {
Midori.Test.log_set_fatal_handler_for_icons ();
var browser = new Midori.Browser ();
var settings = new Midori.WebSettings ();
browser.set ("settings", settings);
var tab = new Midori.View.with_title ();
tab.settings = new Midori.WebSettings ();
for (var i = 0 ; i < 7; i++)
browser.add_uri ("about:blank");
browser.activate_action ("TabMoveForward");
browser.activate_action ("TabMoveBackward");
browser.activate_action ("TabMoveFirst");
browser.activate_action ("TabMoveLast");
browser.activate_action ("TabDuplicate");
browser.activate_action ("TabCloseOther");
}
void tab_download_dialog () {
Midori.Test.log_set_fatal_handler_for_icons ();
var loop = MainContext.default ();
var browser = new Gtk.Window (Gtk.WindowType.TOPLEVEL);
var tab = new Midori.View.with_title ();
browser.add (tab);
/* An embedded plugin shouldn't cause a download dialog */
Midori.Test.set_dialog_response (Gtk.ResponseType.DELETE_EVENT);
bool did_request_download = false;
tab.download_requested.connect ((download) => {
did_request_download = true;
return true;
});
/* png2swf -z -j 1 -o data/midori.swf ./icons/16x16/midori.png */
tab.set_html ("<embed src=\"res:///midori.swf\">");
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (!did_request_download);
}
void main (string[] args) {
Test.init (ref args);
Midori.App.setup (ref args, null);
Midori.Paths.init (Midori.RuntimeMode.NORMAL, null);
#if !HAVE_WEBKIT2
WebKit.get_default_session ().set_data<bool> ("midori-session-initialized", true);
#endif
Test.add_func ("/tab/load-title", tab_load_title);
Test.add_func ("/tab/display-title", tab_display_title);
Test.add_func ("/tab/ellipsize", tab_display_ellipsize);
Test.add_func ("/tab/special", tab_special);
Test.add_func ("/tab/alias", tab_alias);
Test.add_func ("/tab/http", tab_http);
Test.add_func ("/tab/movement", tab_movement);
Test.add_func ("/tab/download", tab_download_dialog);
Test.run ();
}