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
|
/* Unit test suite for Path functions
|
||||||
*
|
*
|
||||||
* Copyright 2002 Matthew Mastracci
|
* Copyright 2002 Matthew Mastracci
|
||||||
* Copyright 2007 Detlef Riekenberg
|
* Copyright 2007,2008 Detlef Riekenberg
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* 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 {
|
typedef struct _TEST_URL_CANONICALIZE {
|
||||||
const char *url;
|
const char *url;
|
||||||
DWORD flags;
|
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)
|
static void hash_url(const char* szUrl)
|
||||||
{
|
{
|
||||||
LPCSTR szTestUrl = szUrl;
|
LPCSTR szTestUrl = szUrl;
|
||||||
@ -840,6 +942,7 @@ START_TEST(url)
|
|||||||
hShlwapi = GetModuleHandleA("shlwapi.dll");
|
hShlwapi = GetModuleHandleA("shlwapi.dll");
|
||||||
pUrlCanonicalizeW = (void *) GetProcAddress(hShlwapi, "UrlCanonicalizeW");
|
pUrlCanonicalizeW = (void *) GetProcAddress(hShlwapi, "UrlCanonicalizeW");
|
||||||
|
|
||||||
|
test_UrlApplyScheme();
|
||||||
test_UrlHash();
|
test_UrlHash();
|
||||||
test_UrlGetPart();
|
test_UrlGetPart();
|
||||||
test_UrlCanonicalizeA();
|
test_UrlCanonicalizeA();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user