{"ftp\x1f\1end/", 0, 0, S_OK, "ftp%1F%01end/"}
};
+typedef struct _TEST_URL_ESCAPEW {
+ const WCHAR url[INTERNET_MAX_URL_LENGTH];
+ DWORD flags;
+ HRESULT expectret;
+ const WCHAR expecturl[INTERNET_MAX_URL_LENGTH];
+ const WCHAR win7url[INTERNET_MAX_URL_LENGTH]; /* <= Win7 */
+ const WCHAR vistaurl[INTERNET_MAX_URL_LENGTH]; /* <= Vista/2k8 */
+} TEST_URL_ESCAPEW;
+
+static const TEST_URL_ESCAPEW TEST_ESCAPEW[] = {
+ {{' ','<','>','"',0}, URL_ESCAPE_AS_UTF8, S_OK, {'%','2','0','%','3','C','%','3','E','%','2','2',0}},
+ {{'{','}','|','\\',0}, URL_ESCAPE_AS_UTF8, S_OK, {'%','7','B','%','7','D','%','7','C','%','5','C',0}},
+ {{'^',']','[','`',0}, URL_ESCAPE_AS_UTF8, S_OK, {'%','5','E','%','5','D','%','5','B','%','6','0',0}},
+ {{'&','/','?','#',0}, URL_ESCAPE_AS_UTF8, S_OK, {'%','2','6','/','?','#',0}},
+ {{'M','a','s','s',0}, URL_ESCAPE_AS_UTF8, S_OK, {'M','a','s','s',0}},
+
+ /* broken < Win8/10 */
+
+ {{'M','a',0xdf,0}, URL_ESCAPE_AS_UTF8, S_OK, {'M','a','%','C','3','%','9','F',0},
+ {'M','a','%','D','F',0}},
+ /* 0x2070E */
+ {{0xd841,0xdf0e,0}, URL_ESCAPE_AS_UTF8, S_OK, {'%','F','0','%','A','0','%','9','C','%','8','E',0},
+ {'%','E','F','%','B','F','%','B','D','%','E','F','%','B','F','%','B','D',0},
+ {0xd841,0xdf0e,0}},
+ /* 0x27A3E */
+ {{0xd85e,0xde3e,0}, URL_ESCAPE_AS_UTF8, S_OK, {'%','F','0','%','A','7','%','A','8','%','B','E',0},
+ {'%','E','F','%','B','F','%','B','D','%','E','F','%','B','F','%','B','D',0},
+ {0xd85e,0xde3e,0}},
+
+ {{0xd85e,0}, URL_ESCAPE_AS_UTF8, S_OK, {'%','E','F','%','B','F','%','B','D',0},
+ {0xd85e,0}},
+ {{0xd85e,0x41}, URL_ESCAPE_AS_UTF8, S_OK, {'%','E','F','%','B','F','%','B','D','A',0},
+ {0xd85e,'A',0}},
+ {{0xdc00,0}, URL_ESCAPE_AS_UTF8, S_OK, {'%','E','F','%','B','F','%','B','D',0},
+ {0xdc00,0}},
+ {{0xffff,0}, URL_ESCAPE_AS_UTF8, S_OK, {'%','E','F','%','B','F','%','B','F',0},
+ {0xffff,0}},
+};
+
/* ################ */
typedef struct _TEST_URL_COMBINE {
ok(size == 34, "got %d, expected %d\n", size, 34);
ok(empty_string[0] == 127, "String has changed, empty_string[0] = %d\n", empty_string[0]);
+ size = 1;
+ empty_string[0] = 127;
+ ret = pUrlEscapeA("/woningplan/woonkamer basis.swf", empty_string, &size, URL_ESCAPE_AS_UTF8);
+ ok(ret == E_NOTIMPL || broken(ret == E_POINTER), /* < Win7/Win2k8 */
+ "got %x, expected %x\n", ret, E_NOTIMPL);
+ ok(size == 1 || broken(size == 34), /* < Win7/Win2k8 */
+ "got %d, expected %d\n", size, 1);
+ ok(empty_string[0] == 127, "String has changed, empty_string[0] = %d\n", empty_string[0]);
+
for(i=0; i<sizeof(TEST_ESCAPE)/sizeof(TEST_ESCAPE[0]); i++) {
CHAR ret_url[INTERNET_MAX_URL_LENGTH];
FreeWideString(urlW);
FreeWideString(expected_urlW);
}
+
+ for(i=0; i<sizeof(TEST_ESCAPEW)/sizeof(TEST_ESCAPEW[0]); i++) {
+ WCHAR ret_url[INTERNET_MAX_URL_LENGTH];
+
+ size = INTERNET_MAX_URL_LENGTH;
+ ret = pUrlEscapeW(TEST_ESCAPEW[i].url, ret_url, &size, TEST_ESCAPEW[i].flags);
+ ok(ret == TEST_ESCAPEW[i].expectret, "UrlEscapeW returned 0x%08x instead of 0x%08x for \"%s\"\n",
+ ret, TEST_ESCAPEW[i].expectret, wine_dbgstr_w(TEST_ESCAPEW[i].url));
+ ok(!lstrcmpW(ret_url, TEST_ESCAPEW[i].expecturl) ||
+ broken(!lstrcmpW(ret_url, TEST_ESCAPEW[i].vistaurl)) ||
+ broken(!lstrcmpW(ret_url, TEST_ESCAPEW[i].win7url)),
+ "Expected \"%s\" or \"%s\" or \"%s\", but got \"%s\" for \"%s\"\n",
+ wine_dbgstr_w(TEST_ESCAPEW[i].expecturl), wine_dbgstr_w(TEST_ESCAPEW[i].vistaurl),
+ wine_dbgstr_w(TEST_ESCAPEW[i].win7url), wine_dbgstr_w(ret_url), wine_dbgstr_w(TEST_ESCAPEW[i].url));
+ }
}
/* ########################### */