/*
* 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.
*
* This library 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 Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see .
*
*/
#include "evolution-data-server-config.h"
#include
#include
#include
#include
#include "camel-test.h"
const gchar *base = "http://a/b/c/d;p?q#f";
struct {
const gchar *url_string, *result;
} tests[] = {
{ "g:h", "g:h" },
{ "g", "http://a/b/c/g" },
{ "./g", "http://a/b/c/g" },
{ "g/", "http://a/b/c/g/" },
{ "/g", "http://a/g" },
{ "//g", "http://g" },
{ "?y", "http://a/b/c/d;p?y" },
{ "g?y", "http://a/b/c/g?y" },
{ "g?y/./x", "http://a/b/c/g?y/./x" },
{ "#s", "http://a/b/c/d;p?q#s" },
{ "g#s", "http://a/b/c/g#s" },
{ "g#s/./x", "http://a/b/c/g#s/./x" },
{ "g?y#s", "http://a/b/c/g?y#s" },
{ ";x", "http://a/b/c/d;x" },
{ "g;x", "http://a/b/c/g;x" },
{ "g;x?y#s", "http://a/b/c/g;x?y#s" },
{ ".", "http://a/b/c/" },
{ "./", "http://a/b/c/" },
{ "..", "http://a/b/" },
{ "../", "http://a/b/" },
{ "../g", "http://a/b/g" },
{ "../..", "http://a/" },
{ "../../", "http://a/" },
{ "../../g", "http://a/g" },
{ "", "http://a/b/c/d;p?q#f" },
{ "../../../g", "http://a/../g" },
{ "../../../../g", "http://a/../../g" },
{ "/./g", "http://a/./g" },
{ "/../g", "http://a/../g" },
{ "g.", "http://a/b/c/g." },
{ ".g", "http://a/b/c/.g" },
{ "g..", "http://a/b/c/g.." },
{ "..g", "http://a/b/c/..g" },
{ "./../g", "http://a/b/g" },
{ "./g/.", "http://a/b/c/g/" },
{ "g/./h", "http://a/b/c/g/h" },
{ "g/../h", "http://a/b/c/h" },
{ "http:g", "http:g" },
{ "http:", "http:" },
/* (not from rfc 1808) */
{ "sendmail:", "sendmail:" },
{ "mbox:/var/mail/user", "mbox:/var/mail/user" },
{ "pop://user@host", "pop://user@host" },
{ "pop://user@host:99", "pop://user@host:99" },
{ "pop://user:password@host", "pop://user:password@host" },
{ "pop://user:password@host:99", "pop://user:password@host:99" },
{ "pop://user;auth=APOP@host", "pop://user;auth=APOP@host" },
{ "pop://user@host/;keep_on_server", "pop://user@host/;keep_on_server" },
{ "pop://user@host/;keep_on_server=1", "pop://user@host/;keep_on_server=1" },
{ "pop://us%65r@host", "pop://user@host" },
{ "pop://us%40r@host", "pop://us%40r@host" },
{ "pop://us%3ar@host", "pop://us%3ar@host" },
{ "pop://us%2fr@host", "pop://us%2fr@host" }
};
gint
main (gint argc,
gchar **argv)
{
CamelURL *base_url, *url;
gchar *url_string;
gint i;
GError *error = NULL;
camel_test_init (argc, argv);
camel_test_start ("URL parsing");
camel_test_push ("base URL parsing");
base_url = camel_url_new (base, &error);
if (!base_url) {
camel_test_fail (
"Could not parse %s: %s\n",
base, error->message);
}
camel_test_pull ();
camel_test_push ("base URL unparsing");
url_string = camel_url_to_string (base_url, 0);
if (strcmp (url_string, base) != 0) {
camel_test_fail (
"URL <%s> unparses to <%s>\n",
base, url_string);
}
camel_test_pull ();
g_free (url_string);
for (i = 0; i < G_N_ELEMENTS (tests); i++) {
camel_test_push ("<%s> + <%s> = <%s>?", base, tests[i].url_string, tests[i].result);
url = camel_url_new_with_base (base_url, tests[i].url_string);
if (!url) {
camel_test_fail ("could not parse");
camel_test_pull ();
continue;
}
url_string = camel_url_to_string (url, 0);
if (strcmp (url_string, tests[i].result) != 0)
camel_test_fail ("got <%s>!", url_string);
g_free (url_string);
camel_test_pull ();
}
camel_test_end ();
return 0;
}