aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXan Lopez <xan@igalia.com>2012-08-17 23:24:36 +0800
committerXan Lopez <xan@igalia.com>2012-08-17 23:25:06 +0800
commit70b9a089b39208856f73e26d533d4912bb37050d (patch)
treeba2f226a891da13f747f2271057d9ee86d145baa
parentcf9c1a366b1424ee55e621302c5cba02803832a8 (diff)
downloadgsoc2013-epiphany-70b9a089b39208856f73e26d533d4912bb37050d.tar.gz
gsoc2013-epiphany-70b9a089b39208856f73e26d533d4912bb37050d.tar.zst
gsoc2013-epiphany-70b9a089b39208856f73e26d533d4912bb37050d.zip
ephy-string: improve a bit ephy_string_get_host_name
And add unit tests for it.
-rw-r--r--lib/ephy-string.c9
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/ephy-string-test.c70
3 files changed, 83 insertions, 0 deletions
diff --git a/lib/ephy-string.c b/lib/ephy-string.c
index 671ed55bf..48a054d8a 100644
--- a/lib/ephy-string.c
+++ b/lib/ephy-string.c
@@ -455,6 +455,15 @@ ephy_string_get_host_name (const char *url)
if (url == NULL || g_str_has_prefix (url, "file://")) return NULL;
uri = soup_uri_new (url);
+ /* If uri is NULL it's very possible that we just got
+ * something without a scheme, let's try to prepend
+ * 'http://' */
+ if (uri == NULL)
+ {
+ char *effective_url = g_strconcat ("http://", url, NULL);
+ uri = soup_uri_new (effective_url);
+ g_free (effective_url);
+ }
if (uri == NULL) return NULL;
ret = g_strdup (uri->host);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 8a2f10690..d41bd8ad4 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -13,6 +13,7 @@ noinst_PROGRAMS = \
test-ephy-session \
test-ephy-shell \
test-ephy-sqlite \
+ test-ephy-string \
test-ephy-web-app-utils \
test-ephy-web-view \
$(NULL)
@@ -154,6 +155,9 @@ test_ephy_shell_SOURCES = \
test_ephy_sqlite_SOURCES = \
ephy-sqlite-test.c
+test_ephy_string_SOURCES = \
+ ephy-string-test.c
+
test_ephy_web_app_utils_SOURCES = \
ephy-web-app-utils-test.c
diff --git a/tests/ephy-string-test.c b/tests/ephy-string-test.c
new file mode 100644
index 000000000..df3972e90
--- /dev/null
+++ b/tests/ephy-string-test.c
@@ -0,0 +1,70 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Copyright © 2012 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-string.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+typedef struct {
+ char *uri;
+ char *hostname;
+} HostnameTest;
+
+static const HostnameTest hostname_tests[] = {
+ { "http://www.google.com", "www.google.com" },
+ { "http://www.google.com/this/is/a/path", "www.google.com" },
+ { "www.google.com", "www.google.com" },
+ { "google.com", "google.com" },
+ { "file:///tmp/", NULL },
+ { NULL, NULL },
+ { "garbage garbage", "garbage garbage" } /* FIXME: should this be NULL? */
+};
+
+static void
+test_ephy_string_get_hostname ()
+{
+ int i;
+
+ for (i = 0; i < G_N_ELEMENTS (hostname_tests); i++) {
+ char *host;
+ HostnameTest test = hostname_tests[i];
+
+ host = ephy_string_get_host_name (test.uri);
+ g_assert_cmpstr (host, ==, test.hostname);
+ g_free (host);
+ }
+}
+
+int
+main (int argc, char *argv[])
+{
+ gboolean ret;
+
+ gtk_test_init (&argc, &argv);
+
+ g_test_add_func ("/lib/ephy-string/get_hostname",
+ test_ephy_string_get_hostname);
+
+ ret = g_test_run ();
+
+ return ret;
+}