mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-29 04:13:32 +00:00
[WINESYNC]
- Sync comdlg32, crypt32, gdiplus, inetcomm, jscript, msctf, mshtml, msxml3, rsaenh, schannel, shlwapi, urlmon, usp10, wininet winetests. svn path=/trunk/; revision=46982
This commit is contained in:
@@ -56,42 +56,103 @@
|
||||
* Test helper macros
|
||||
*/
|
||||
|
||||
#ifdef _WIN64
|
||||
#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
|
||||
|
||||
# define TEST_TYPE_SIZE(type, size)
|
||||
#ifdef TYPE_ALIGNMENT
|
||||
# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
|
||||
#else
|
||||
# define TEST_TYPE_ALIGN(type, align)
|
||||
#endif
|
||||
|
||||
#ifdef _TYPE_ALIGNMENT
|
||||
# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
|
||||
# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
|
||||
#else
|
||||
# define TEST_TARGET_ALIGN(type, align)
|
||||
# define TEST_FIELD_ALIGN(type, field, align)
|
||||
# define TEST_FIELD_OFFSET(type, field, offset)
|
||||
|
||||
#else
|
||||
|
||||
# define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
|
||||
|
||||
# ifdef TYPE_ALIGNMENT
|
||||
# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
|
||||
# else
|
||||
# define TEST_TYPE_ALIGN(type, align)
|
||||
# endif
|
||||
|
||||
# ifdef _TYPE_ALIGNMENT
|
||||
# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
|
||||
# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
|
||||
# else
|
||||
# define TEST_TARGET_ALIGN(type, align)
|
||||
# define TEST_FIELD_ALIGN(type, field, align)
|
||||
# endif
|
||||
|
||||
# define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
|
||||
|
||||
#endif
|
||||
|
||||
#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
|
||||
|
||||
#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
|
||||
#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
|
||||
#define TEST_TYPE_SIGNED(type) C_ASSERT((type) -1 < 0);
|
||||
#define TEST_TYPE_UNSIGNED(type) C_ASSERT((type) -1 > 0);
|
||||
|
||||
|
||||
#ifdef _WIN64
|
||||
|
||||
static void test_pack_ASSOCF(void)
|
||||
{
|
||||
/* ASSOCF */
|
||||
TEST_TYPE_SIZE (ASSOCF, 4)
|
||||
TEST_TYPE_ALIGN (ASSOCF, 4)
|
||||
TEST_TYPE_UNSIGNED(ASSOCF)
|
||||
}
|
||||
|
||||
static void test_pack_DLLGETVERSIONPROC(void)
|
||||
{
|
||||
/* DLLGETVERSIONPROC */
|
||||
TEST_TYPE_SIZE (DLLGETVERSIONPROC, 8)
|
||||
TEST_TYPE_ALIGN (DLLGETVERSIONPROC, 8)
|
||||
}
|
||||
|
||||
static void test_pack_DLLVERSIONINFO(void)
|
||||
{
|
||||
/* DLLVERSIONINFO (pack 8) */
|
||||
TEST_TYPE_SIZE (DLLVERSIONINFO, 20)
|
||||
TEST_TYPE_ALIGN (DLLVERSIONINFO, 4)
|
||||
TEST_FIELD_SIZE (DLLVERSIONINFO, cbSize, 4)
|
||||
TEST_FIELD_ALIGN (DLLVERSIONINFO, cbSize, 4)
|
||||
TEST_FIELD_OFFSET(DLLVERSIONINFO, cbSize, 0)
|
||||
TEST_FIELD_SIZE (DLLVERSIONINFO, dwMajorVersion, 4)
|
||||
TEST_FIELD_ALIGN (DLLVERSIONINFO, dwMajorVersion, 4)
|
||||
TEST_FIELD_OFFSET(DLLVERSIONINFO, dwMajorVersion, 4)
|
||||
TEST_FIELD_SIZE (DLLVERSIONINFO, dwMinorVersion, 4)
|
||||
TEST_FIELD_ALIGN (DLLVERSIONINFO, dwMinorVersion, 4)
|
||||
TEST_FIELD_OFFSET(DLLVERSIONINFO, dwMinorVersion, 8)
|
||||
TEST_FIELD_SIZE (DLLVERSIONINFO, dwBuildNumber, 4)
|
||||
TEST_FIELD_ALIGN (DLLVERSIONINFO, dwBuildNumber, 4)
|
||||
TEST_FIELD_OFFSET(DLLVERSIONINFO, dwBuildNumber, 12)
|
||||
TEST_FIELD_SIZE (DLLVERSIONINFO, dwPlatformID, 4)
|
||||
TEST_FIELD_ALIGN (DLLVERSIONINFO, dwPlatformID, 4)
|
||||
TEST_FIELD_OFFSET(DLLVERSIONINFO, dwPlatformID, 16)
|
||||
}
|
||||
|
||||
static void test_pack_DLLVERSIONINFO2(void)
|
||||
{
|
||||
/* DLLVERSIONINFO2 (pack 8) */
|
||||
TEST_TYPE_SIZE (DLLVERSIONINFO2, 32)
|
||||
TEST_TYPE_ALIGN (DLLVERSIONINFO2, 8)
|
||||
TEST_FIELD_SIZE (DLLVERSIONINFO2, info1, 20)
|
||||
TEST_FIELD_ALIGN (DLLVERSIONINFO2, info1, 4)
|
||||
TEST_FIELD_OFFSET(DLLVERSIONINFO2, info1, 0)
|
||||
TEST_FIELD_SIZE (DLLVERSIONINFO2, dwFlags, 4)
|
||||
TEST_FIELD_ALIGN (DLLVERSIONINFO2, dwFlags, 4)
|
||||
TEST_FIELD_OFFSET(DLLVERSIONINFO2, dwFlags, 20)
|
||||
TEST_FIELD_SIZE (DLLVERSIONINFO2, ullVersion, 8)
|
||||
TEST_FIELD_ALIGN (DLLVERSIONINFO2, ullVersion, 8)
|
||||
TEST_FIELD_OFFSET(DLLVERSIONINFO2, ullVersion, 24)
|
||||
}
|
||||
|
||||
static void test_pack_HUSKEY(void)
|
||||
{
|
||||
/* HUSKEY */
|
||||
TEST_TYPE_SIZE (HUSKEY, 8)
|
||||
TEST_TYPE_ALIGN (HUSKEY, 8)
|
||||
}
|
||||
|
||||
static void test_pack_PHUSKEY(void)
|
||||
{
|
||||
/* PHUSKEY */
|
||||
TEST_TYPE_SIZE (PHUSKEY, 8)
|
||||
TEST_TYPE_ALIGN (PHUSKEY, 8)
|
||||
TEST_TARGET_SIZE (PHUSKEY, 8)
|
||||
TEST_TARGET_ALIGN(PHUSKEY, 8)
|
||||
}
|
||||
|
||||
#else /* _WIN64 */
|
||||
|
||||
static void test_pack_ASSOCF(void)
|
||||
{
|
||||
/* ASSOCF */
|
||||
@@ -161,6 +222,8 @@ static void test_pack_PHUSKEY(void)
|
||||
TEST_TARGET_ALIGN(PHUSKEY, 4)
|
||||
}
|
||||
|
||||
#endif /* _WIN64 */
|
||||
|
||||
static void test_pack(void)
|
||||
{
|
||||
test_pack_ASSOCF();
|
||||
@@ -173,9 +236,5 @@ static void test_pack(void)
|
||||
|
||||
START_TEST(generated)
|
||||
{
|
||||
#ifdef _WIN64
|
||||
ok(0, "The type size / alignment tests don't support Win64 yet\n");
|
||||
#else
|
||||
test_pack();
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -208,12 +208,16 @@ static void test_SHCreateStreamOnFileA(DWORD mode, DWORD stgm)
|
||||
/* invalid arguments */
|
||||
|
||||
stream = NULL;
|
||||
/* NT: ERROR_PATH_NOT_FOUND, 9x: ERROR_BAD_PATHNAME */
|
||||
ret = (*pSHCreateStreamOnFileA)(NULL, mode | stgm, &stream);
|
||||
ok(ret == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) ||
|
||||
ret == HRESULT_FROM_WIN32(ERROR_BAD_PATHNAME),
|
||||
"SHCreateStreamOnFileA: expected HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)"
|
||||
"or HRESULT_FROM_WIN32(ERROR_BAD_PATHNAME), got 0x%08x\n", ret);
|
||||
if (ret == E_INVALIDARG) /* Win98 SE */ {
|
||||
win_skip("Not supported\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ok(ret == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) /* NT */ ||
|
||||
ret == HRESULT_FROM_WIN32(ERROR_BAD_PATHNAME) /* 9x */,
|
||||
"SHCreateStreamOnFileA: expected HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) "
|
||||
"or HRESULT_FROM_WIN32(ERROR_BAD_PATHNAME), got 0x%08x\n", ret);
|
||||
ok(stream == NULL, "SHCreateStreamOnFileA: expected a NULL IStream object, got %p\n", stream);
|
||||
|
||||
#if 0 /* This test crashes on WinXP SP2 */
|
||||
@@ -342,6 +346,11 @@ static void test_SHCreateStreamOnFileW(DWORD mode, DWORD stgm)
|
||||
|
||||
stream = NULL;
|
||||
ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_FAILIFTHERE | stgm, &stream);
|
||||
if (ret == E_INVALIDARG) /* Win98 SE */ {
|
||||
win_skip("Not supported\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ok(ret == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "SHCreateStreamOnFileW: expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), got 0x%08x\n", ret);
|
||||
ok(stream == NULL, "SHCreateStreamOnFileW: expected a NULL IStream object, got %p\n", stream);
|
||||
|
||||
@@ -423,6 +432,11 @@ static void test_SHCreateStreamOnFileEx(DWORD mode, DWORD stgm)
|
||||
|
||||
stream = NULL;
|
||||
ret = (*pSHCreateStreamOnFileEx)(test_file, mode, 0, FALSE, template, &stream);
|
||||
if (ret == HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED)) {
|
||||
win_skip("File probably locked by Anti-Virus/Spam software, trying again\n");
|
||||
Sleep(1000);
|
||||
ret = (*pSHCreateStreamOnFileEx)(test_file, mode, 0, FALSE, template, &stream);
|
||||
}
|
||||
ok( ret == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) ||
|
||||
ret == HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER),
|
||||
"SHCreateStreamOnFileEx: expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) or "
|
||||
@@ -482,6 +496,11 @@ static void test_SHCreateStreamOnFileEx(DWORD mode, DWORD stgm)
|
||||
|
||||
stream = NULL;
|
||||
ret = (*pSHCreateStreamOnFileEx)(test_file, mode | STGM_CREATE | stgm, 0, FALSE, NULL, &stream);
|
||||
if (ret == HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED)) {
|
||||
win_skip("File probably locked by Anti-Virus/Spam software, trying again\n");
|
||||
Sleep(1000);
|
||||
ret = (*pSHCreateStreamOnFileEx)(test_file, mode | STGM_CREATE | stgm, 0, FALSE, NULL, &stream);
|
||||
}
|
||||
ok(ret == S_OK, "SHCreateStreamOnFileEx: expected S_OK, got 0x%08x\n", ret);
|
||||
ok(stream != NULL, "SHCreateStreamOnFileEx: expected a valid IStream object, got NULL\n");
|
||||
|
||||
@@ -498,6 +517,11 @@ static void test_SHCreateStreamOnFileEx(DWORD mode, DWORD stgm)
|
||||
|
||||
stream = NULL;
|
||||
ret = (*pSHCreateStreamOnFileEx)(test_file, mode | STGM_CREATE | stgm, 0, TRUE, NULL, &stream);
|
||||
if (ret == HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED)) {
|
||||
win_skip("File probably locked by Anti-Virus/Spam software, trying again\n");
|
||||
Sleep(1000);
|
||||
ret = (*pSHCreateStreamOnFileEx)(test_file, mode | STGM_CREATE | stgm, 0, TRUE, NULL, &stream);
|
||||
}
|
||||
ok(ret == S_OK, "SHCreateStreamOnFileEx: expected S_OK, got 0x%08x\n", ret);
|
||||
ok(stream != NULL, "SHCreateStreamOnFileEx: expected a valid IStream object, got NULL\n");
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -28,12 +28,12 @@
|
||||
#include "shlwapi.h"
|
||||
#include "wininet.h"
|
||||
|
||||
static HMODULE hShlwapi;
|
||||
static HRESULT (WINAPI *pPathIsValidCharA)(char,DWORD);
|
||||
static HRESULT (WINAPI *pPathIsValidCharW)(WCHAR,DWORD);
|
||||
static LPWSTR (WINAPI *pPathCombineW)(LPWSTR, LPCWSTR, LPCWSTR);
|
||||
static HRESULT (WINAPI *pPathCreateFromUrlA)(LPCSTR, LPSTR, LPDWORD, DWORD);
|
||||
static HRESULT (WINAPI *pPathCreateFromUrlW)(LPCWSTR, LPWSTR, LPDWORD, DWORD);
|
||||
static BOOL (WINAPI *pPathAppendA)(LPSTR, LPCSTR);
|
||||
|
||||
/* ################ */
|
||||
|
||||
@@ -300,6 +300,15 @@ static void test_PathIsValidCharA(void)
|
||||
BOOL ret;
|
||||
unsigned int c;
|
||||
|
||||
/* For whatever reason, PathIsValidCharA and PathAppendA share the same
|
||||
* ordinal number in some native versions. Check this to prevent a crash.
|
||||
*/
|
||||
if (!pPathIsValidCharA || pPathIsValidCharA == (void*)pPathAppendA)
|
||||
{
|
||||
win_skip("PathIsValidCharA isn't available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
for (c = 0; c < 0x7f; c++)
|
||||
{
|
||||
ret = pPathIsValidCharA( c, ~0U );
|
||||
@@ -318,6 +327,12 @@ static void test_PathIsValidCharW(void)
|
||||
BOOL ret;
|
||||
unsigned int c;
|
||||
|
||||
if (!pPathIsValidCharW)
|
||||
{
|
||||
win_skip("PathIsValidCharW isn't available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
for (c = 0; c < 0x7f; c++)
|
||||
{
|
||||
ret = pPathIsValidCharW( c, ~0U );
|
||||
@@ -392,7 +407,13 @@ static void test_PathCombineW(void)
|
||||
WCHAR wbuf[MAX_PATH+1], wstr1[MAX_PATH] = {'C',':','\\',0}, wstr2[MAX_PATH];
|
||||
static const WCHAR expout[] = {'C',':','\\','A','A',0};
|
||||
int i;
|
||||
|
||||
|
||||
if (!pPathCombineW)
|
||||
{
|
||||
win_skip("PathCombineW isn't available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
wszString2 = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
|
||||
|
||||
/* NULL test */
|
||||
@@ -1312,43 +1333,60 @@ static void test_PathUnquoteSpaces(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void test_PathGetDriveNumber(void)
|
||||
{
|
||||
static const CHAR test1A[] = "a:\\test.file";
|
||||
static const CHAR test2A[] = "file:////b:\\test.file";
|
||||
static const CHAR test3A[] = "file:///c:\\test.file";
|
||||
static const CHAR test4A[] = "file:\\\\c:\\test.file";
|
||||
int ret;
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = PathGetDriveNumberA(NULL);
|
||||
ok(ret == -1, "got %d\n", ret);
|
||||
ok(GetLastError() == 0xdeadbeef, "got %d\n", GetLastError());
|
||||
|
||||
ret = PathGetDriveNumberA(test1A);
|
||||
ok(ret == 0, "got %d\n", ret);
|
||||
ret = PathGetDriveNumberA(test2A);
|
||||
ok(ret == -1, "got %d\n", ret);
|
||||
ret = PathGetDriveNumberA(test3A);
|
||||
ok(ret == -1, "got %d\n", ret);
|
||||
ret = PathGetDriveNumberA(test4A);
|
||||
ok(ret == -1, "got %d\n", ret);
|
||||
}
|
||||
|
||||
/* ################ */
|
||||
|
||||
START_TEST(path)
|
||||
{
|
||||
hShlwapi = GetModuleHandleA("shlwapi.dll");
|
||||
pPathCreateFromUrlA = (void*)GetProcAddress(hShlwapi, "PathCreateFromUrlA");
|
||||
pPathCreateFromUrlW = (void*)GetProcAddress(hShlwapi, "PathCreateFromUrlW");
|
||||
HMODULE hShlwapi = GetModuleHandleA("shlwapi.dll");
|
||||
|
||||
test_PathSearchAndQualify();
|
||||
test_PathCreateFromUrl();
|
||||
test_PathIsUrl();
|
||||
pPathCreateFromUrlA = (void*)GetProcAddress(hShlwapi, "PathCreateFromUrlA");
|
||||
pPathCreateFromUrlW = (void*)GetProcAddress(hShlwapi, "PathCreateFromUrlW");
|
||||
pPathCombineW = (void*)GetProcAddress(hShlwapi, "PathCombineW");
|
||||
pPathIsValidCharA = (void*)GetProcAddress(hShlwapi, (LPSTR)455);
|
||||
pPathIsValidCharW = (void*)GetProcAddress(hShlwapi, (LPSTR)456);
|
||||
pPathAppendA = (void*)GetProcAddress(hShlwapi, "PathAppendA");
|
||||
|
||||
test_PathAddBackslash();
|
||||
test_PathMakePretty();
|
||||
test_PathMatchSpec();
|
||||
test_PathSearchAndQualify();
|
||||
test_PathCreateFromUrl();
|
||||
test_PathIsUrl();
|
||||
|
||||
test_PathAddBackslash();
|
||||
test_PathMakePretty();
|
||||
test_PathMatchSpec();
|
||||
|
||||
/* For whatever reason, PathIsValidCharA and PathAppendA share the same
|
||||
* ordinal number in some native versions. Check this to prevent a crash.
|
||||
*/
|
||||
pPathIsValidCharA = (void*)GetProcAddress(hShlwapi, (LPSTR)455);
|
||||
if (pPathIsValidCharA && pPathIsValidCharA != (void*)GetProcAddress(hShlwapi, "PathAppendA"))
|
||||
{
|
||||
test_PathIsValidCharA();
|
||||
test_PathIsValidCharW();
|
||||
|
||||
pPathIsValidCharW = (void*)GetProcAddress(hShlwapi, (LPSTR)456);
|
||||
if (pPathIsValidCharW) test_PathIsValidCharW();
|
||||
}
|
||||
|
||||
pPathCombineW = (void*)GetProcAddress(hShlwapi, "PathCombineW");
|
||||
if (pPathCombineW)
|
||||
test_PathCombineW();
|
||||
|
||||
test_PathCombineA();
|
||||
test_PathAppendA();
|
||||
test_PathCanonicalizeA();
|
||||
test_PathFindExtensionA();
|
||||
test_PathBuildRootA();
|
||||
test_PathCommonPrefixA();
|
||||
test_PathUnquoteSpaces();
|
||||
test_PathCombineA();
|
||||
test_PathAppendA();
|
||||
test_PathCanonicalizeA();
|
||||
test_PathFindExtensionA();
|
||||
test_PathBuildRootA();
|
||||
test_PathCommonPrefixA();
|
||||
test_PathUnquoteSpaces();
|
||||
test_PathGetDriveNumber();
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<group>
|
||||
<module name="shlwapi_winetest" type="win32cui" installbase="bin" installname="shlwapi_winetest.exe" allowwarnings="true">
|
||||
<include base="shlwapi_winetest">.</include>
|
||||
<define name="__ROS_LONG64__" />
|
||||
<define name="__ROS_LONG64__" />
|
||||
<file>assoc.c</file>
|
||||
<file>clist.c</file>
|
||||
<file>clsid.c</file>
|
||||
@@ -21,6 +21,7 @@
|
||||
<library>advapi32</library>
|
||||
<library>ole32</library>
|
||||
<library>oleaut32</library>
|
||||
<library>user32</library>
|
||||
<library>ntdll</library>
|
||||
</module>
|
||||
</group>
|
||||
|
||||
@@ -863,6 +863,33 @@ static void test_StrXXX_overflows(void)
|
||||
else
|
||||
win_skip("StrCatBuffA() is not available\n");
|
||||
|
||||
if (0)
|
||||
{
|
||||
/* crashes on XP */
|
||||
StrCpyNW(wbuf, (LPCWSTR)0x1, 10);
|
||||
StrCpyNW((LPWSTR)0x1, wstr1, 10);
|
||||
}
|
||||
|
||||
memset(wbuf, 0xbf, sizeof(wbuf));
|
||||
expect_eq(StrCpyNW(wbuf, (LPCWSTR)0x1, 1), wbuf, PWCHAR, "%p");
|
||||
expect_eq(wbuf[0], 0, WCHAR, "%x");
|
||||
expect_eq(wbuf[1], (WCHAR)0xbfbf, WCHAR, "%x");
|
||||
|
||||
memset(wbuf, 0xbf, sizeof(wbuf));
|
||||
expect_eq(StrCpyNW(wbuf, 0, 10), wbuf, PWCHAR, "%p");
|
||||
expect_eq(wbuf[0], 0, WCHAR, "%x");
|
||||
expect_eq(wbuf[1], (WCHAR)0xbfbf, WCHAR, "%x");
|
||||
|
||||
memset(wbuf, 0xbf, sizeof(wbuf));
|
||||
expect_eq(StrCpyNW(wbuf, 0, 0), wbuf, PWCHAR, "%p");
|
||||
expect_eq(wbuf[0], (WCHAR)0xbfbf, WCHAR, "%x");
|
||||
expect_eq(wbuf[1], (WCHAR)0xbfbf, WCHAR, "%x");
|
||||
|
||||
memset(wbuf, 0xbf, sizeof(wbuf));
|
||||
expect_eq(StrCpyNW(wbuf, wstr1, 0), wbuf, PWCHAR, "%p");
|
||||
expect_eq(wbuf[0], (WCHAR)0xbfbf, WCHAR, "%x");
|
||||
expect_eq(wbuf[1], (WCHAR)0xbfbf, WCHAR, "%x");
|
||||
|
||||
memset(wbuf, 0xbf, sizeof(wbuf));
|
||||
expect_eq(StrCpyNW(wbuf, wstr1, 10), wbuf, PWCHAR, "%p");
|
||||
expect_eq(wbuf[9], 0, WCHAR, "%x");
|
||||
|
||||
@@ -160,6 +160,7 @@ static const TEST_URL_CANONICALIZE TEST_CANONICALIZE[] = {
|
||||
{"A", 0, S_OK, "A", FALSE},
|
||||
{"/uri-res/N2R?urn:sha1:B3K", URL_DONT_ESCAPE_EXTRA_INFO | URL_WININET_COMPATIBILITY /*0x82000000*/, S_OK, "/uri-res/N2R?urn:sha1:B3K", FALSE} /*LimeWire online installer calls this*/,
|
||||
{"http:www.winehq.org/dir/../index.html", 0, S_OK, "http:www.winehq.org/index.html"},
|
||||
{"http://localhost/test.html", URL_FILE_USE_PATHURL, S_OK, "http://localhost/test.html"}
|
||||
};
|
||||
|
||||
/* ################ */
|
||||
@@ -278,6 +279,11 @@ static const TEST_URL_COMBINE TEST_COMBINE[] = {
|
||||
{"http://www.winehq.org/tests/../tests/", "/tests10/..", URL_DONT_SIMPLIFY, S_OK, "http://www.winehq.org/tests10/.."},
|
||||
{"http://www.winehq.org/tests/../", "tests11", URL_DONT_SIMPLIFY, S_OK, "http://www.winehq.org/tests/../tests11"},
|
||||
{"file:///C:\\dir\\file.txt", "test.txt", 0, S_OK, "file:///C:/dir/test.txt"},
|
||||
{"file:///C:\\dir\\file.txt#hash\\hash", "test.txt", 0, S_OK, "file:///C:/dir/file.txt#hash/test.txt"},
|
||||
{"file:///C:\\dir\\file.html#hash\\hash", "test.html", 0, S_OK, "file:///C:/dir/test.html"},
|
||||
{"file:///C:\\dir\\file.htm#hash\\hash", "test.htm", 0, S_OK, "file:///C:/dir/test.htm"},
|
||||
{"file:///C:\\dir\\file.hTmL#hash\\hash", "test.hTmL", 0, S_OK, "file:///C:/dir/test.hTmL"},
|
||||
{"file:///C:\\dir.html\\file.txt#hash\\hash", "test.txt", 0, S_OK, "file:///C:/dir.html/file.txt#hash/test.txt"},
|
||||
{"C:\\winehq\\winehq.txt", "C:\\Test\\test.txt", 0, S_OK, "file:///C:/Test/test.txt"},
|
||||
{"http://www.winehq.org/test/", "test%20file.txt", 0, S_OK, "http://www.winehq.org/test/test%20file.txt"},
|
||||
{"http://www.winehq.org/test/", "test%20file.txt", URL_FILE_USE_PATHURL, S_OK, "http://www.winehq.org/test/test%20file.txt"},
|
||||
@@ -537,6 +543,13 @@ static void test_url_part(const char* szUrl, DWORD dwPart, DWORD dwFlags, const
|
||||
HRESULT res;
|
||||
DWORD dwSize;
|
||||
|
||||
dwSize = 1;
|
||||
res = pUrlGetPartA(szUrl, szPart, &dwSize, dwPart, dwFlags);
|
||||
ok(res == E_POINTER, "UrlGetPart for \"%s\" gave: 0x%08x\n", szUrl, res);
|
||||
ok(dwSize == strlen(szExpected)+1 ||
|
||||
(*szExpected == '?' && dwSize == strlen(szExpected)),
|
||||
"UrlGetPart for \"%s\" gave size: %u\n", szUrl, dwSize);
|
||||
|
||||
dwSize = INTERNET_MAX_URL_LENGTH;
|
||||
res = pUrlGetPartA(szUrl, szPart, &dwSize, dwPart, dwFlags);
|
||||
ok(res == S_OK,
|
||||
@@ -570,6 +583,7 @@ static void test_UrlGetPart(void)
|
||||
{
|
||||
const char* file_url = "file://h o s t/c:/windows/file";
|
||||
const char* http_url = "http://user:pass [email protected] hq.org";
|
||||
const char* res_url = "res://some.dll/find.dlg";
|
||||
const char* about_url = "about:blank";
|
||||
|
||||
CHAR szPart[INTERNET_MAX_URL_LENGTH];
|
||||
@@ -581,20 +595,38 @@ static void test_UrlGetPart(void)
|
||||
return;
|
||||
}
|
||||
|
||||
res = pUrlGetPartA(NULL, NULL, NULL, URL_PART_SCHEME, 0);
|
||||
ok(res == E_INVALIDARG, "null params gave: 0x%08x\n", res);
|
||||
|
||||
res = pUrlGetPartA(NULL, szPart, &dwSize, URL_PART_SCHEME, 0);
|
||||
ok(res == E_INVALIDARG, "null URL gave: 0x%08x\n", res);
|
||||
|
||||
res = pUrlGetPartA(res_url, NULL, &dwSize, URL_PART_SCHEME, 0);
|
||||
ok(res == E_INVALIDARG, "null szPart gave: 0x%08x\n", res);
|
||||
|
||||
res = pUrlGetPartA(res_url, szPart, NULL, URL_PART_SCHEME, 0);
|
||||
ok(res == E_INVALIDARG, "null URL gave: 0x%08x\n", res);
|
||||
|
||||
dwSize = 0;
|
||||
szPart[0]='x'; szPart[1]=0;
|
||||
res = pUrlGetPartA("hi", szPart, &dwSize, URL_PART_SCHEME, 0);
|
||||
ok(res == E_INVALIDARG, "UrlGetPartA(*pcchOut = 0) returned %08X\n", res);
|
||||
ok(szPart[0] == 'x' && szPart[1] == 0, "UrlGetPartA(*pcchOut = 0) modified szPart: \"%s\"\n", szPart);
|
||||
ok(dwSize == 0, "dwSize = %d\n", dwSize);
|
||||
|
||||
dwSize = sizeof szPart;
|
||||
szPart[0]='x'; szPart[1]=0;
|
||||
res = pUrlGetPartA("hi", szPart, &dwSize, URL_PART_SCHEME, 0);
|
||||
todo_wine {
|
||||
ok (res==S_FALSE, "UrlGetPartA(\"hi\") returned %08X\n", res);
|
||||
ok(szPart[0]==0, "UrlGetPartA(\"hi\") return \"%s\" instead of \"\"\n", szPart);
|
||||
}
|
||||
ok(dwSize == 0, "dwSize = %d\n", dwSize);
|
||||
|
||||
dwSize = sizeof szPart;
|
||||
szPart[0]='x'; szPart[1]=0;
|
||||
res = pUrlGetPartA("hi", szPart, &dwSize, URL_PART_QUERY, 0);
|
||||
todo_wine {
|
||||
ok (res==S_FALSE, "UrlGetPartA(\"hi\") returned %08X\n", res);
|
||||
ok(szPart[0]==0, "UrlGetPartA(\"hi\") return \"%s\" instead of \"\"\n", szPart);
|
||||
}
|
||||
ok(dwSize == 0, "dwSize = %d\n", dwSize);
|
||||
|
||||
test_url_part(TEST_URL_3, URL_PART_HOSTNAME, 0, "localhost");
|
||||
test_url_part(TEST_URL_3, URL_PART_PORT, 0, "21");
|
||||
@@ -614,9 +646,20 @@ static void test_UrlGetPart(void)
|
||||
res = pUrlGetPartA(about_url, szPart, &dwSize, URL_PART_HOSTNAME, 0);
|
||||
ok(res==E_FAIL, "returned %08x\n", res);
|
||||
|
||||
test_url_part(res_url, URL_PART_SCHEME, 0, "res");
|
||||
test_url_part("http://www.winehq.org", URL_PART_HOSTNAME, URL_PARTFLAG_KEEPSCHEME, "http:www.winehq.org");
|
||||
|
||||
dwSize = sizeof szPart;
|
||||
szPart[0]='x'; szPart[1]=0;
|
||||
res = pUrlGetPartA(res_url, szPart, &dwSize, URL_PART_QUERY, 0);
|
||||
ok(res==S_FALSE, "UrlGetPartA returned %08X\n", res);
|
||||
ok(szPart[0]==0, "UrlGetPartA gave \"%s\" instead of \"\"\n", szPart);
|
||||
ok(dwSize == 0, "dwSize = %d\n", dwSize);
|
||||
|
||||
dwSize = sizeof(szPart);
|
||||
res = pUrlGetPartA("file://c:\\index.htm", szPart, &dwSize, URL_PART_HOSTNAME, 0);
|
||||
ok(res==S_FALSE, "returned %08x\n", res);
|
||||
ok(dwSize == 0, "dwSize = %d\n", dwSize);
|
||||
|
||||
dwSize = sizeof(szPart);
|
||||
szPart[0] = 'x'; szPart[1] = '\0';
|
||||
@@ -624,6 +667,11 @@ static void test_UrlGetPart(void)
|
||||
ok(res==S_FALSE, "returned %08x\n", res);
|
||||
ok(szPart[0] == '\0', "szPart[0] = %c\n", szPart[0]);
|
||||
ok(dwSize == 0, "dwSize = %d\n", dwSize);
|
||||
|
||||
dwSize = sizeof(szPart);
|
||||
szPart[0] = 'x'; szPart[1] = '\0';
|
||||
res = pUrlGetPartA("index.htm", szPart, &dwSize, URL_PART_HOSTNAME, 0);
|
||||
ok(res==E_FAIL, "returned %08x\n", res);
|
||||
}
|
||||
|
||||
/* ########################### */
|
||||
@@ -1000,6 +1048,15 @@ static void test_UrlCreateFromPath(void)
|
||||
|
||||
/* ########################### */
|
||||
|
||||
static void test_UrlIs_null(DWORD flag)
|
||||
{
|
||||
BOOL ret;
|
||||
ret = pUrlIsA(NULL, flag);
|
||||
ok(ret == FALSE, "pUrlIsA(NULL, %d) failed\n", flag);
|
||||
ret = pUrlIsW(NULL, flag);
|
||||
ok(ret == FALSE, "pUrlIsW(NULL, %d) failed\n", flag);
|
||||
}
|
||||
|
||||
static void test_UrlIs(void)
|
||||
{
|
||||
BOOL ret;
|
||||
@@ -1011,6 +1068,14 @@ static void test_UrlIs(void)
|
||||
return;
|
||||
}
|
||||
|
||||
test_UrlIs_null(URLIS_APPLIABLE);
|
||||
test_UrlIs_null(URLIS_DIRECTORY);
|
||||
test_UrlIs_null(URLIS_FILEURL);
|
||||
test_UrlIs_null(URLIS_HASQUERY);
|
||||
test_UrlIs_null(URLIS_NOHISTORY);
|
||||
test_UrlIs_null(URLIS_OPAQUE);
|
||||
test_UrlIs_null(URLIS_URL);
|
||||
|
||||
for(i = 0; i < sizeof(TEST_PATH_IS_URL) / sizeof(TEST_PATH_IS_URL[0]); i++) {
|
||||
MultiByteToWideChar(CP_ACP, 0, TEST_PATH_IS_URL[i].path, -1, wurl, 80);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user