tests: Test file:// URIs with both query and fragment

This commit is contained in:
Colomban Wendling 2023-12-20 19:23:40 +01:00
parent 0e475a6e11
commit 5790ce14e8
3 changed files with 50 additions and 34 deletions

View File

@ -3958,35 +3958,42 @@ test_enumerator_cancellation (void)
}
static void
test_from_uri_ignores_fragment (void)
test_path_from_uri_helper (const gchar *uri,
const gchar *expected_path)
{
GFile *file;
gchar *path;
file = g_file_new_for_uri ("file:///tmp/foo#bar");
path = g_file_get_path (file);
gchar *expected_platform_path;
expected_platform_path = g_strdup (expected_path);
#ifdef G_OS_WIN32
g_assert_cmpstr (path, ==, "\\tmp\\foo");
#else
g_assert_cmpstr (path, ==, "/tmp/foo");
for (gchar *p = expected_platform_path; *p; p++)
{
if (*p == '/')
*p = '\\';
}
#endif
file = g_file_new_for_uri (uri);
path = g_file_get_path (file);
g_assert_cmpstr (path, ==, expected_platform_path);
g_free (path);
g_object_unref (file);
g_free (expected_platform_path);
}
static void
test_from_uri_ignores_fragment (void)
{
test_path_from_uri_helper ("file:///tmp/foo#bar", "/tmp/foo");
test_path_from_uri_helper ("file:///tmp/foo#bar?baz", "/tmp/foo");
}
static void
test_from_uri_ignores_query_string (void)
{
GFile *file;
gchar *path;
file = g_file_new_for_uri ("file:///tmp/foo?bar");
path = g_file_get_path (file);
#ifdef G_OS_WIN32
g_assert_cmpstr (path, ==, "\\tmp\\foo");
#else
g_assert_cmpstr (path, ==, "/tmp/foo");
#endif
g_free (path);
g_object_unref (file);
test_path_from_uri_helper ("file:///tmp/foo?bar", "/tmp/foo");
test_path_from_uri_helper ("file:///tmp/foo?bar#baz", "/tmp/foo");
}
int

View File

@ -950,35 +950,42 @@ test_no_conv (void)
}
static void
test_filename_from_uri_query_is_ignored (void)
test_filename_from_uri_helper (const gchar *uri,
const gchar *expected_filename)
{
gchar *filename;
gchar *expected_platform_filename;
GError *error = NULL;
filename = g_filename_from_uri ("file:///tmp/foo?bar", NULL, &error);
g_assert_no_error (error);
expected_platform_filename = g_strdup (expected_filename);
#ifdef G_OS_WIN32
g_assert_cmpstr (filename, ==, "\\tmp\\foo");
#else
g_assert_cmpstr (filename, ==, "/tmp/foo");
for (gchar *p = expected_platform_filename; *p; p++)
{
if (*p == '/')
*p = '\\';
}
#endif
filename = g_filename_from_uri (uri, NULL, &error);
g_assert_no_error (error);
g_assert_cmpstr (filename, ==, expected_platform_filename);
g_free (filename);
g_free (expected_platform_filename);
}
static void
test_filename_from_uri_query_is_ignored (void)
{
test_filename_from_uri_helper ("file:///tmp/foo?bar", "/tmp/foo");
test_filename_from_uri_helper ("file:///tmp/foo?bar#baz", "/tmp/foo");
}
static void
test_filename_from_uri_fragment_is_ignored (void)
{
gchar *filename;
GError *error = NULL;
filename = g_filename_from_uri ("file:///tmp/foo#bar", NULL, &error);
g_assert_no_error (error);
#ifdef G_OS_WIN32
g_assert_cmpstr (filename, ==, "\\tmp\\foo");
#else
g_assert_cmpstr (filename, ==, "/tmp/foo");
#endif
g_free (filename);
test_filename_from_uri_helper ("file:///tmp/foo#bar", "/tmp/foo");
/* this doesn't have a query, only a bizarre anchor */
test_filename_from_uri_helper ("file:///tmp/foo#bar?baz", "/tmp/foo");
}
int

View File

@ -132,6 +132,8 @@ file_from_uri_tests[] = {
{ "file://%E5%E4%F6/etc", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
{ "file:///some/file?query", "/some/file", NULL, 0 },
{ "file:///some/file#bad", "/some/file", NULL, 0 },
{ "file:///some/file?query#frag", "/some/file", NULL, 0 },
{ "file:///some/file#fr?ag", "/some/file", NULL, 0 },
{ "file://some", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
{ "", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
{ "file:test", NULL, NULL, G_CONVERT_ERROR_BAD_URI},