shlwapi/tests: Add tests for UrlApplyScheme.
This commit is contained in:
parent
b331b1a3ed
commit
a34f4ae848
@ -1,7 +1,7 @@
|
||||
/* Unit test suite for Path functions
|
||||
*
|
||||
* Copyright 2002 Matthew Mastracci
|
||||
* Copyright 2007 Detlef Riekenberg
|
||||
* Copyright 2007,2008 Detlef Riekenberg
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@ -40,6 +40,35 @@ static const CHAR winehqA[] = {'h','t','t','p',':','/','/','w','w','w','.','w',
|
||||
|
||||
/* ################ */
|
||||
|
||||
static const CHAR untouchedA[] = "untouched";
|
||||
|
||||
#define TEST_APPLY_MAX_LENGTH INTERNET_MAX_URL_LENGTH
|
||||
|
||||
typedef struct _TEST_URL_APPLY {
|
||||
const char * url;
|
||||
DWORD flags;
|
||||
HRESULT res;
|
||||
DWORD newlen;
|
||||
const char * newurl;
|
||||
} TEST_URL_APPLY;
|
||||
|
||||
static const TEST_URL_APPLY TEST_APPLY[] = {
|
||||
{"www.winehq.org", URL_APPLY_GUESSSCHEME | URL_APPLY_DEFAULT, S_OK, 21, "http://www.winehq.org"},
|
||||
{"www.winehq.org", URL_APPLY_GUESSSCHEME, S_OK, 21, "http://www.winehq.org"},
|
||||
{"www.winehq.org", URL_APPLY_DEFAULT, S_OK, 21, "http://www.winehq.org"},
|
||||
{"ftp.winehq.org", URL_APPLY_GUESSSCHEME | URL_APPLY_DEFAULT, S_OK, 20, "ftp://ftp.winehq.org"},
|
||||
{"ftp.winehq.org", URL_APPLY_GUESSSCHEME, S_OK, 20, "ftp://ftp.winehq.org"},
|
||||
{"ftp.winehq.org", URL_APPLY_DEFAULT, S_OK, 21, "http://ftp.winehq.org"},
|
||||
{"winehq.org", URL_APPLY_GUESSSCHEME | URL_APPLY_DEFAULT, S_OK, 17, "http://winehq.org"},
|
||||
{"winehq.org", URL_APPLY_GUESSSCHEME, S_FALSE, TEST_APPLY_MAX_LENGTH, untouchedA},
|
||||
{"winehq.org", URL_APPLY_DEFAULT, S_OK, 17, "http://winehq.org"},
|
||||
{"", URL_APPLY_GUESSSCHEME | URL_APPLY_DEFAULT, S_OK, 7, "http://"},
|
||||
{"", URL_APPLY_GUESSSCHEME, S_FALSE, TEST_APPLY_MAX_LENGTH, untouchedA},
|
||||
{"", URL_APPLY_DEFAULT, S_OK, 7, "http://"}
|
||||
};
|
||||
|
||||
/* ################ */
|
||||
|
||||
typedef struct _TEST_URL_CANONICALIZE {
|
||||
const char *url;
|
||||
DWORD flags;
|
||||
@ -338,6 +367,79 @@ static void FreeWideString(LPWSTR wszString)
|
||||
|
||||
/* ########################### */
|
||||
|
||||
static void test_UrlApplyScheme(void)
|
||||
{
|
||||
CHAR newurl[TEST_APPLY_MAX_LENGTH];
|
||||
WCHAR urlW[TEST_APPLY_MAX_LENGTH];
|
||||
WCHAR newurlW[TEST_APPLY_MAX_LENGTH];
|
||||
HRESULT res;
|
||||
DWORD len;
|
||||
DWORD i;
|
||||
|
||||
for(i = 0; i < sizeof(TEST_APPLY)/sizeof(TEST_APPLY[0]); i++) {
|
||||
len = TEST_APPLY_MAX_LENGTH;
|
||||
lstrcpyA(newurl, untouchedA);
|
||||
res = UrlApplySchemeA(TEST_APPLY[i].url, newurl, &len, TEST_APPLY[i].flags);
|
||||
ok( res == TEST_APPLY[i].res,
|
||||
"#%dA: got HRESULT 0x%x (expected 0x%x)\n", i, res, TEST_APPLY[i].res);
|
||||
|
||||
ok( len == TEST_APPLY[i].newlen,
|
||||
"#%dA: got len %d (expected %d)\n", i, len, TEST_APPLY[i].newlen);
|
||||
|
||||
ok( !lstrcmpA(newurl, TEST_APPLY[i].newurl),
|
||||
"#%dA: got '%s' (expected '%s')\n", i, newurl, TEST_APPLY[i].newurl);
|
||||
|
||||
/* returned length is in character */
|
||||
len = TEST_APPLY_MAX_LENGTH;
|
||||
lstrcpyA(newurl, untouchedA);
|
||||
MultiByteToWideChar(CP_ACP, 0, newurl, -1, newurlW, len);
|
||||
MultiByteToWideChar(CP_ACP, 0, TEST_APPLY[i].url, -1, urlW, len);
|
||||
|
||||
res = UrlApplySchemeW(urlW, newurlW, &len, TEST_APPLY[i].flags);
|
||||
WideCharToMultiByte(CP_ACP, 0, newurlW, -1, newurl, TEST_APPLY_MAX_LENGTH, NULL, NULL);
|
||||
ok( res == TEST_APPLY[i].res,
|
||||
"#%dW: got HRESULT 0x%x (expected 0x%x)\n", i, res, TEST_APPLY[i].res);
|
||||
|
||||
ok( len == TEST_APPLY[i].newlen,
|
||||
"#%dW: got len %d (expected %d)\n", i, len, TEST_APPLY[i].newlen);
|
||||
|
||||
ok( !lstrcmpA(newurl, TEST_APPLY[i].newurl),
|
||||
"#%dW: got '%s' (expected '%s')\n", i, newurl, TEST_APPLY[i].newurl);
|
||||
|
||||
}
|
||||
|
||||
/* buffer too small */
|
||||
lstrcpyA(newurl, untouchedA);
|
||||
len = lstrlenA(TEST_APPLY[0].newurl);
|
||||
res = UrlApplySchemeA(TEST_APPLY[0].url, newurl, &len, TEST_APPLY[0].flags);
|
||||
ok(res == E_POINTER, "got HRESULT 0x%x (expected E_POINTER)\n", res);
|
||||
/* The returned length include the space for the terminating 0 */
|
||||
i = lstrlenA(TEST_APPLY[0].newurl)+1;
|
||||
ok(len == i, "got len %d (expected %d)\n", len, i);
|
||||
ok(!lstrcmpA(newurl, untouchedA), "got '%s' (expected '%s')\n", newurl, untouchedA);
|
||||
|
||||
/* NULL as parameter. The length and the buffer are not modified */
|
||||
lstrcpyA(newurl, untouchedA);
|
||||
len = TEST_APPLY_MAX_LENGTH;
|
||||
res = UrlApplySchemeA(NULL, newurl, &len, TEST_APPLY[0].flags);
|
||||
ok(res == E_INVALIDARG, "got HRESULT 0x%x (expected E_INVALIDARG)\n", res);
|
||||
ok(len == TEST_APPLY_MAX_LENGTH, "got len %d (expected %d)\n", len, TEST_APPLY_MAX_LENGTH);
|
||||
ok(!lstrcmpA(newurl, untouchedA), "got '%s' (expected '%s')\n", newurl, untouchedA);
|
||||
|
||||
len = TEST_APPLY_MAX_LENGTH;
|
||||
res = UrlApplySchemeA(TEST_APPLY[0].url, NULL, &len, TEST_APPLY[0].flags);
|
||||
ok(res == E_INVALIDARG, "got HRESULT 0x%x (expected E_INVALIDARG)\n", res);
|
||||
ok(len == TEST_APPLY_MAX_LENGTH, "got len %d (expected %d)\n", len, TEST_APPLY_MAX_LENGTH);
|
||||
|
||||
lstrcpyA(newurl, untouchedA);
|
||||
res = UrlApplySchemeA(TEST_APPLY[0].url, newurl, NULL, TEST_APPLY[0].flags);
|
||||
ok(res == E_INVALIDARG, "got HRESULT 0x%x (expected E_INVALIDARG)\n", res);
|
||||
ok(!lstrcmpA(newurl, untouchedA), "got '%s' (expected '%s')\n", newurl, untouchedA);
|
||||
|
||||
}
|
||||
|
||||
/* ########################### */
|
||||
|
||||
static void hash_url(const char* szUrl)
|
||||
{
|
||||
LPCSTR szTestUrl = szUrl;
|
||||
@ -840,6 +942,7 @@ START_TEST(url)
|
||||
hShlwapi = GetModuleHandleA("shlwapi.dll");
|
||||
pUrlCanonicalizeW = (void *) GetProcAddress(hShlwapi, "UrlCanonicalizeW");
|
||||
|
||||
test_UrlApplyScheme();
|
||||
test_UrlHash();
|
||||
test_UrlGetPart();
|
||||
test_UrlCanonicalizeA();
|
||||
|
Loading…
x
Reference in New Issue
Block a user