diff --git a/gio/tests/file.c b/gio/tests/file.c index 3ece6d4fa..d32d955cd 100644 --- a/gio/tests/file.c +++ b/gio/tests/file.c @@ -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 diff --git a/glib/tests/convert.c b/glib/tests/convert.c index 6a7bfaf72..6cf19ad10 100644 --- a/glib/tests/convert.c +++ b/glib/tests/convert.c @@ -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 diff --git a/glib/tests/uri.c b/glib/tests/uri.c index 94a0d5dac..5e12ab27c 100644 --- a/glib/tests/uri.c +++ b/glib/tests/uri.c @@ -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},