From e6bc4cea2c48e3c4a512afec22848d420c7ef72b Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Thu, 23 Jun 2011 13:44:02 +0200 Subject: [PATCH] urlmon: Added more CreateURLMoniker* tests. --- dlls/urlmon/tests/uri.c | 200 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c index bc8482559f7..477722fe92c 100644 --- a/dlls/urlmon/tests/uri.c +++ b/dlls/urlmon/tests/uri.c @@ -71,6 +71,8 @@ static HRESULT (WINAPI *pCoInternetCombineIUri)(IUri*,IUri*,DWORD,IUri**,DWORD_P static HRESULT (WINAPI *pCoInternetGetSession)(DWORD,IInternetSession**,DWORD); static HRESULT (WINAPI *pCoInternetCombineUrlEx)(IUri*,LPCWSTR,DWORD,IUri**,DWORD_PTR); static HRESULT (WINAPI *pCoInternetParseIUri)(IUri*,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD_PTR); +static HRESULT (WINAPI *pCreateURLMonikerEx)(IMoniker*,LPCWSTR,IMoniker**,DWORD); +static HRESULT (WINAPI *pCreateURLMonikerEx2)(IMoniker*,IUri*,IMoniker**,DWORD); static const WCHAR http_urlW[] = { 'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q', '.','o','r','g','/',0}; @@ -10078,6 +10080,199 @@ static void test_CoInternetParseIUri_Pluggable(void) { if(uri) IUri_Release(uri); } +typedef struct { + const char *url; + DWORD uri_flags; + const char *base_url; + DWORD base_uri_flags; + const char *legacy_url; + const char *uniform_url; + const char *no_canon_url; + const char *uri_url; +} create_urlmon_test_t; + +static const create_urlmon_test_t create_urlmon_tests[] = { + { + "http://www.winehq.org",Uri_CREATE_NO_CANONICALIZE, + NULL,0, + "http://www.winehq.org/", + "http://www.winehq.org/", + "http://www.winehq.org", + "http://www.winehq.org" + }, + { + "file://c:\\dir\\file.txt",Uri_CREATE_NO_CANONICALIZE, + NULL,0, + "file://c:\\dir\\file.txt", + "file:///c:/dir/file.txt", + "file:///c:/dir/file.txt", + "file:///c:/dir/file.txt" + }, + { + "file://c:\\dir\\file.txt",Uri_CREATE_FILE_USE_DOS_PATH, + NULL,0, + "file://c:\\dir\\file.txt", + "file:///c:/dir/file.txt", + "file:///c:/dir/file.txt", + "file://c:\\dir\\file.txt" + }, + { + "dat%61",Uri_CREATE_ALLOW_RELATIVE, + "http://www.winehq.org",0, + "http://www.winehq.org/data", + "http://www.winehq.org/data", + "http://www.winehq.org:80/data", + }, + { + "file.txt",Uri_CREATE_ALLOW_RELATIVE, + "file://c:\\dir\\x.txt",Uri_CREATE_NO_CANONICALIZE, + "file://c:\\dir\\file.txt", + "file:///c:/dir/file.txt", + "file:///c:/dir/file.txt", + }, + { + "",Uri_CREATE_ALLOW_RELATIVE, + NULL,0, + "", + "", + "", + "" + }, + { + "test",Uri_CREATE_ALLOW_RELATIVE, + NULL,0, + "test", + "test", + "test", + "test" + }, + { + "c:\\dir\\file.txt",Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME, + NULL,0, + "file://c:\\dir\\file.txt", + "file:///c:/dir/file.txt", + "file:///c:/dir/file.txt", + "file:///c:/dir/file.txt", + } +}; + +#define test_urlmon_display_name(a,b) _test_urlmon_display_name(__LINE__,a,b) +static void _test_urlmon_display_name(unsigned line, IMoniker *mon, const char *exurl) +{ + WCHAR *display_name; + HRESULT hres; + + hres = IMoniker_GetDisplayName(mon, NULL, NULL, &display_name); + ok_(__FILE__,line)(hres == S_OK, "GetDisplayName failed: %08x\n", hres); + ok_(__FILE__,line)(!strcmp_aw(exurl, display_name), "unexpected display name: %s, expected %s\n", + wine_dbgstr_w(display_name), exurl); + + CoTaskMemFree(display_name); +} + +#define test_display_uri(a,b) _test_display_uri(__LINE__,a,b) +static void _test_display_uri(unsigned line, IMoniker *mon, const char *exurl) +{ + IUriContainer *uri_container; + IUri *uri; + BSTR display_uri; + HRESULT hres; + + hres = IMoniker_QueryInterface(mon, &IID_IUriContainer, (void**)&uri_container); + ok(hres == S_OK, "Could not get IUriContainer iface: %08x\n", hres); + + uri = NULL; + hres = IUriContainer_GetIUri(uri_container, &uri); + IUriContainer_Release(uri_container); + ok(hres == S_OK, "GetIUri failed: %08x\n", hres); + ok(uri != NULL, "uri == NULL\n"); + + hres = IUri_GetDisplayUri(uri, &display_uri); + IUri_Release(uri); + ok(hres == S_OK, "GetDisplayUri failed: %08x\n", hres); + ok_(__FILE__,line)(!strcmp_aw(exurl, display_uri), "unexpected display uri: %s, expected %s\n", + wine_dbgstr_w(display_uri), exurl); + SysFreeString(display_uri); +} + +static void test_CreateURLMoniker(void) +{ + const create_urlmon_test_t *test; + IMoniker *mon, *base_mon; + WCHAR *url, *base_url; + IUri *uri, *base_uri; + HRESULT hres; + + for(test = create_urlmon_tests; test < create_urlmon_tests + sizeof(create_urlmon_tests)/sizeof(*create_urlmon_tests); test++) { + url = a2w(test->url); + base_url = a2w(test->base_url); + + if(base_url) { + hres = pCreateUri(base_url, test->base_uri_flags, 0, &base_uri); + ok(hres == S_OK, "CreateUri failed: %08x\n", hres); + + hres = pCreateURLMonikerEx2(NULL, base_uri, &base_mon, URL_MK_NO_CANONICALIZE); + ok(hres == S_OK, "CreateURLMonikerEx2 failed: %08x\n", hres); + }else { + base_uri = NULL; + base_mon = NULL; + } + + hres = CreateURLMoniker(base_mon, url, &mon); + ok(hres == S_OK, "CreateURLMoniker failed: %08x\n", hres); + test_urlmon_display_name(mon, test->legacy_url); + test_display_uri(mon, test->legacy_url); + IMoniker_Release(mon); + + hres = pCreateURLMonikerEx(base_mon, url, &mon, URL_MK_LEGACY); + ok(hres == S_OK, "CreateURLMoniker failed: %08x\n", hres); + test_urlmon_display_name(mon, test->legacy_url); + test_display_uri(mon, test->legacy_url); + IMoniker_Release(mon); + + hres = pCreateURLMonikerEx(base_mon, url, &mon, URL_MK_UNIFORM); + ok(hres == S_OK, "CreateURLMoniker failed: %08x\n", hres); + test_urlmon_display_name(mon, test->uniform_url); + test_display_uri(mon, test->uniform_url); + IMoniker_Release(mon); + + hres = pCreateURLMonikerEx(base_mon, url, &mon, URL_MK_NO_CANONICALIZE); + ok(hres == S_OK, "CreateURLMoniker failed: %08x\n", hres); + test_urlmon_display_name(mon, test->no_canon_url); + test_display_uri(mon, test->no_canon_url); + IMoniker_Release(mon); + + hres = pCreateUri(url, test->uri_flags, 0, &uri); + ok(hres == S_OK, "CreateUri failed: %08x\n", hres); + + hres = pCreateURLMonikerEx2(base_mon, uri, &mon, URL_MK_LEGACY); + ok(hres == S_OK, "CreateURLMonikerEx2 failed: %08x\n", hres); + test_urlmon_display_name(mon, base_url ? test->legacy_url : test->uri_url); + test_display_uri(mon, base_url ? test->legacy_url : test->uri_url); + IMoniker_Release(mon); + + hres = pCreateURLMonikerEx2(base_mon, uri, &mon, URL_MK_UNIFORM); + ok(hres == S_OK, "CreateURLMonikerEx2 failed: %08x\n", hres); + test_urlmon_display_name(mon, base_url ? test->uniform_url : test->uri_url); + test_display_uri(mon, base_url ? test->uniform_url : test->uri_url); + IMoniker_Release(mon); + + hres = pCreateURLMonikerEx2(base_mon, uri, &mon, URL_MK_NO_CANONICALIZE); + ok(hres == S_OK, "CreateURLMonikerEx2 failed: %08x\n", hres); + test_urlmon_display_name(mon, base_url ? test->no_canon_url : test->uri_url); + test_display_uri(mon, base_url ? test->no_canon_url : test->uri_url); + IMoniker_Release(mon); + + IUri_Release(uri); + heap_free(url); + heap_free(base_url); + if(base_uri) + IUri_Release(base_uri); + if(base_mon) + IMoniker_Release(base_mon); + } +} + START_TEST(uri) { HMODULE hurlmon; @@ -10089,6 +10284,8 @@ START_TEST(uri) { pCoInternetCombineIUri = (void*) GetProcAddress(hurlmon, "CoInternetCombineIUri"); pCoInternetCombineUrlEx = (void*) GetProcAddress(hurlmon, "CoInternetCombineUrlEx"); pCoInternetParseIUri = (void*) GetProcAddress(hurlmon, "CoInternetParseIUri"); + pCreateURLMonikerEx = (void*) GetProcAddress(hurlmon, "CreateURLMonikerEx"); + pCreateURLMonikerEx2 = (void*) GetProcAddress(hurlmon, "CreateURLMonikerEx2"); if(!pCreateUri) { win_skip("CreateUri is not present, skipping tests.\n"); @@ -10187,5 +10384,8 @@ START_TEST(uri) { trace("test CoInternetParseIUri pluggable...\n"); test_CoInternetParseIUri_Pluggable(); + trace("test CreateURLMoniker...\n"); + test_CreateURLMoniker(); + unregister_protocols(); }