https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6cdd1357d68552346e4d3c...
commit 6cdd1357d68552346e4d3cb0210b377abcaa8dd6 Author: Amine Khaldi amine.khaldi@reactos.org AuthorDate: Sun Mar 4 13:26:14 2018 +0100 Commit: Amine Khaldi amine.khaldi@reactos.org CommitDate: Sun Mar 4 13:26:14 2018 +0100
[SHLWAPI_WINETEST] Sync with Wine Staging 3.3. CORE-14434 --- modules/rostests/winetests/shlwapi/CMakeLists.txt | 2 +- modules/rostests/winetests/shlwapi/assoc.c | 290 +++++++++++++++++++++- modules/rostests/winetests/shlwapi/clist.c | 29 ++- modules/rostests/winetests/shlwapi/clsid.c | 15 +- modules/rostests/winetests/shlwapi/generated.c | 17 +- modules/rostests/winetests/shlwapi/istream.c | 11 +- modules/rostests/winetests/shlwapi/ordinal.c | 223 +++-------------- modules/rostests/winetests/shlwapi/path.c | 10 +- modules/rostests/winetests/shlwapi/precomp.h | 1 + modules/rostests/winetests/shlwapi/shreg.c | 11 +- modules/rostests/winetests/shlwapi/string.c | 13 +- modules/rostests/winetests/shlwapi/thread.c | 14 +- modules/rostests/winetests/shlwapi/url.c | 57 ++++- 13 files changed, 462 insertions(+), 231 deletions(-)
diff --git a/modules/rostests/winetests/shlwapi/CMakeLists.txt b/modules/rostests/winetests/shlwapi/CMakeLists.txt index f46f22d70e..276e202d6f 100644 --- a/modules/rostests/winetests/shlwapi/CMakeLists.txt +++ b/modules/rostests/winetests/shlwapi/CMakeLists.txt @@ -20,7 +20,7 @@ list(APPEND SOURCE add_executable(shlwapi_winetest ${SOURCE} testlist.c) target_link_libraries(shlwapi_winetest uuid) set_module_type(shlwapi_winetest win32cui) -add_importlibs(shlwapi_winetest shlwapi ole32 oleaut32 user32 advapi32 msvcrt kernel32) +add_importlibs(shlwapi_winetest shlwapi shell32 mlang oleaut32 ole32 user32 advapi32 msvcrt kernel32)
if(MSVC) add_importlibs(shlwapi_winetest ntdll) diff --git a/modules/rostests/winetests/shlwapi/assoc.c b/modules/rostests/winetests/shlwapi/assoc.c index 90e44fb84b..080e352a59 100644 --- a/modules/rostests/winetests/shlwapi/assoc.c +++ b/modules/rostests/winetests/shlwapi/assoc.c @@ -17,14 +17,19 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#include <stdarg.h>
-#define expect(expected, got) ok ( expected == got, "Expected %d, got %d\n", expected, got) -#define expect_hr(expected, got) ok ( expected == got, "Expected %08x, got %08x\n", expected, got) +#include "wine/test.h" +#include "shlwapi.h" +#include "shlguid.h" + +#define expect(expected, got) ok( (expected) == (got), "Expected %d, got %d\n", (expected), (got)) +#define expect_hr(expected, got) ok( (expected) == (got), "Expected %08x, got %08x\n", (expected), (got))
static HRESULT (WINAPI *pAssocQueryStringA)(ASSOCF,ASSOCSTR,LPCSTR,LPCSTR,LPSTR,LPDWORD) = NULL; static HRESULT (WINAPI *pAssocQueryStringW)(ASSOCF,ASSOCSTR,LPCWSTR,LPCWSTR,LPWSTR,LPDWORD) = NULL; static HRESULT (WINAPI *pAssocCreate)(CLSID, REFIID, void **) = NULL; +static HRESULT (WINAPI *pAssocGetPerceivedType)(LPCWSTR, PERCEIVED *, INT *, LPWSTR *) = NULL;
/* Every version of Windows with IE should have this association? */ static const WCHAR dotHtml[] = { '.','h','t','m','l',0 }; @@ -302,6 +307,283 @@ static void test_assoc_create(void) } }
+/* Based on http://www.geoffchappell.com/studies/windows/shell/shlwapi/api/assocapi/getp... */ +struct assoc_test_struct +{ + PCSTR extension; + PERCEIVED perceived; + INT flags; + PCSTR type; + DWORD minversion; + HRESULT hr; +}; + +#define HARDCODED_NATIVE_WMSDK (PERCEIVEDFLAG_HARDCODED | PERCEIVEDFLAG_NATIVESUPPORT | PERCEIVEDFLAG_WMSDK) +#define HARDCODED_NATIVE_GDIPLUS (PERCEIVEDFLAG_HARDCODED | PERCEIVEDFLAG_NATIVESUPPORT | PERCEIVEDFLAG_GDIPLUS) +#define HARDCODED_NATIVE_ZIPFLDR (PERCEIVEDFLAG_HARDCODED | PERCEIVEDFLAG_NATIVESUPPORT | PERCEIVEDFLAG_ZIPFOLDER) +#define SOFTCODED_NATIVESUPPORT (PERCEIVEDFLAG_SOFTCODED | PERCEIVEDFLAG_NATIVESUPPORT) + +static const struct assoc_test_struct assoc_perceived_types[] = +{ + /* builtins */ + { ".aif", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".aifc", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".aiff", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".asf", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".asx", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".au", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".avi", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".bas", PERCEIVED_TYPE_APPLICATION, PERCEIVEDFLAG_HARDCODED, "application" }, + { ".bat", PERCEIVED_TYPE_APPLICATION, PERCEIVEDFLAG_HARDCODED, "application" }, + { ".bmp", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".cmd", PERCEIVED_TYPE_APPLICATION, PERCEIVEDFLAG_HARDCODED, "application" }, + { ".com", PERCEIVED_TYPE_APPLICATION, PERCEIVEDFLAG_HARDCODED, "application" }, + { ".cpl", PERCEIVED_TYPE_SYSTEM, PERCEIVEDFLAG_HARDCODED, "system", 0x600 }, + { ".dib", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".dvr-ms", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".emf", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".exe", PERCEIVED_TYPE_APPLICATION, PERCEIVEDFLAG_HARDCODED, "application" }, + { ".gif", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".hta", PERCEIVED_TYPE_APPLICATION, PERCEIVEDFLAG_HARDCODED, "application" }, + /* htm & html are PERCEIVED_TYPE_TEXT, PERCEIVEDFLAG_NATIVESUPPORT | PERCEIVEDFLAG_SOFTCODED in w2k3 */ + { ".htm", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_HARDCODED, "document", 0x600 }, + { ".html", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_HARDCODED, "document", 0x600 }, + { ".ico", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".IVF", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".jfif", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".jpe", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".jpeg", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".jpg", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".lnk", PERCEIVED_TYPE_UNSPECIFIED, PERCEIVEDFLAG_HARDCODED, NULL, 0x600, E_FAIL }, + { ".m1v", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".m3u", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".mht", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_HARDCODED, "document", 0x600 }, + { ".mid", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".midi", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".msi", PERCEIVED_TYPE_APPLICATION, PERCEIVEDFLAG_HARDCODED, "application" }, + /* below win8 this is defined to be video */ + { ".mp2", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio", 0x602 }, + { ".mp2v", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".mp3", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".mpa", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".mpe", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".mpeg", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".mpg", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".mpv2", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".pif", PERCEIVED_TYPE_APPLICATION, PERCEIVEDFLAG_HARDCODED, "application" }, + { ".png", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".reg", PERCEIVED_TYPE_APPLICATION, PERCEIVEDFLAG_HARDCODED, "application" }, + { ".rle", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".rmi", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".scr", PERCEIVED_TYPE_APPLICATION, PERCEIVEDFLAG_HARDCODED, "application" }, + { ".search-ms", PERCEIVED_TYPE_UNSPECIFIED, PERCEIVEDFLAG_HARDCODED, NULL, 0x600, E_FAIL }, + { ".snd", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".tif", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".tiff", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".vb", PERCEIVED_TYPE_APPLICATION, PERCEIVEDFLAG_HARDCODED, "application" }, + { ".wav", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".wax", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".wm", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".wma", PERCEIVED_TYPE_AUDIO, HARDCODED_NATIVE_WMSDK, "audio" }, + { ".wmf", PERCEIVED_TYPE_IMAGE, HARDCODED_NATIVE_GDIPLUS, "image" }, + { ".wmv", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".wmx", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".wvx", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }, + { ".zip", PERCEIVED_TYPE_COMPRESSED, HARDCODED_NATIVE_ZIPFLDR, "compressed" }, + /* found in the registry under HKEY_CLASSES_ROOT on a new Win7 VM */ + { ".386", PERCEIVED_TYPE_SYSTEM, PERCEIVEDFLAG_SOFTCODED, "system" }, + { ".3g2", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".3gp", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".3gp2", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".3gpp", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".AAC", PERCEIVED_TYPE_AUDIO, PERCEIVEDFLAG_SOFTCODED, "audio", 0x601 }, + { ".ADT", PERCEIVED_TYPE_AUDIO, PERCEIVEDFLAG_SOFTCODED, "audio", 0x601 }, + { ".ADTS", PERCEIVED_TYPE_AUDIO, PERCEIVEDFLAG_SOFTCODED, "audio", 0x601 }, + { ".asm", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".asmx", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".aspx", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".c", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".cab", PERCEIVED_TYPE_COMPRESSED, PERCEIVEDFLAG_SOFTCODED, "compressed", 0x600 }, + { ".chk", PERCEIVED_TYPE_SYSTEM, PERCEIVEDFLAG_SOFTCODED, "system" }, + { ".cpp", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".css", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".cxx", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".def", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".diz", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".docx", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_SOFTCODED, "document", 0x601 }, + { ".drv", PERCEIVED_TYPE_SYSTEM, PERCEIVEDFLAG_SOFTCODED, "system", 0x600 }, + { ".gz", PERCEIVED_TYPE_COMPRESSED, PERCEIVEDFLAG_SOFTCODED, "compressed" }, + { ".h", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".hpp", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".hxx", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".inc", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".ini", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text", 0x600 }, + { ".java", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".local", PERCEIVED_TYPE_SYSTEM, PERCEIVEDFLAG_SOFTCODED, "system" }, + { ".M2T", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".M2TS", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".M2V", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".m4a", PERCEIVED_TYPE_AUDIO, PERCEIVEDFLAG_SOFTCODED, "audio", 0x601 }, + { ".m4b", PERCEIVED_TYPE_AUDIO, PERCEIVEDFLAG_SOFTCODED, "audio", 0x601 }, + { ".m4p", PERCEIVED_TYPE_AUDIO, PERCEIVEDFLAG_SOFTCODED, "audio", 0x601 }, + { ".m4v", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".manifest", PERCEIVED_TYPE_SYSTEM, PERCEIVEDFLAG_SOFTCODED, "system" }, + { ".MOD", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".mov", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".mp4", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".mp4v", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".MTS", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".nvr", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".ocx", PERCEIVED_TYPE_SYSTEM, PERCEIVEDFLAG_SOFTCODED, "system" }, + { ".odt", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_SOFTCODED, "document", 0x601 }, + { ".php3", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".pl", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".plg", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".ps1xml", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "Text" }, + { ".rtf", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_SOFTCODED, "document", 0x600 }, + { ".sed", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".shtml", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".sql", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".sys", PERCEIVED_TYPE_SYSTEM, PERCEIVEDFLAG_SOFTCODED, "system", 0x600 }, + { ".tar", PERCEIVED_TYPE_COMPRESSED, PERCEIVEDFLAG_SOFTCODED, "compressed" }, + { ".text", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".tgz", PERCEIVED_TYPE_COMPRESSED, PERCEIVEDFLAG_SOFTCODED, "compressed" }, + { ".TS", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".tsv", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".TTS", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".txt", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".vob", PERCEIVED_TYPE_VIDEO, PERCEIVEDFLAG_SOFTCODED, "video", 0x601 }, + { ".vxd", PERCEIVED_TYPE_SYSTEM, PERCEIVEDFLAG_SOFTCODED, "system" }, + { ".wdp", PERCEIVED_TYPE_IMAGE, PERCEIVEDFLAG_SOFTCODED, "image" }, + { ".wmz", PERCEIVED_TYPE_COMPRESSED, PERCEIVEDFLAG_SOFTCODED, "compressed" }, + { ".wpl", PERCEIVED_TYPE_AUDIO, PERCEIVEDFLAG_SOFTCODED, "audio", 0x601 }, + { ".wsz", PERCEIVED_TYPE_COMPRESSED, PERCEIVEDFLAG_SOFTCODED, "compressed" }, + { ".x", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text" }, + { ".xml", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text", 0x601 }, + { ".xsl", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text", 0x601 }, + { ".z", PERCEIVED_TYPE_COMPRESSED, PERCEIVEDFLAG_SOFTCODED, "compressed" }, + /* found in the registry under HKEY_CLASSES_ROOT\PerceivedType */ + { ".doc", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_SOFTCODED, "document", 0x600 }, + { ".dot", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_SOFTCODED, "document", 0x600 }, + { ".mhtml", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_SOFTCODED, "document", 0x600 }, + { ".pot", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_SOFTCODED, "document", 0x600 }, + { ".ppt", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_SOFTCODED, "document", 0x600 }, + { ".rtf", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_SOFTCODED, "document", 0x600 }, + { ".wri", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_SOFTCODED, "document", 0x600 }, + { ".xls", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_SOFTCODED, "document", 0x600 }, + { ".xlt", PERCEIVED_TYPE_DOCUMENT, PERCEIVEDFLAG_SOFTCODED, "document", 0x600 }, + +}; + +static void test_assoc_one(const struct assoc_test_struct* test) +{ + LPWSTR extension, type_expected, type_returned; + PERCEIVED perceived; + HRESULT hr; + INT flags; + + /* if SHStrDupA receives a nullptr as input, it will null the output */ + SHStrDupA(test->extension, &extension); + SHStrDupA(test->type, &type_expected); + + perceived = 0xdeadbeef; + flags = 0xdeadbeef; + + hr = pAssocGetPerceivedType(extension, &perceived, &flags, NULL); + expect_hr(type_expected ? S_OK : test->hr, hr); + ok(perceived == test->perceived, "%s: got perceived 0x%x, expected 0x%x\n", + test->extension, perceived, test->perceived); + ok(flags == test->flags, "%s: got flags 0x%x, expected 0x%x\n", + test->extension, flags, test->flags); + + type_returned = (void *)0xdeadbeef; + perceived = 0xdeadbeef; + flags = 0xdeadbeef; + + hr = pAssocGetPerceivedType(extension, &perceived, &flags, &type_returned); + expect_hr(type_expected ? S_OK : test->hr, hr); + ok(perceived == test->perceived, "%s: got perceived 0x%x, expected 0x%x\n", + test->extension, perceived, test->perceived); + ok(flags == test->flags, "%s: got flags 0x%x, expected 0x%x\n", + test->extension, flags, test->flags); + + if (!type_expected) + { + ok(type_returned == (void *)0xdeadbeef || broken(type_returned == NULL) /* Win 8 */, + "%s: got type %p, expected 0xdeadbeef\n", test->extension, type_returned); + } + else if (type_returned == (void *)0xdeadbeef) + { + ok(type_returned != (void *)0xdeadbeef, "%s: got type %p, expected '%s'\n", + test->extension, type_returned, test->type); + } + else + { + ok(StrCmpIW(type_expected, type_returned) == 0, "%s: got type %s, expected '%s'\n", + test->extension, wine_dbgstr_w(type_returned), test->type); + } + + CoTaskMemFree(type_returned); + CoTaskMemFree(extension); + CoTaskMemFree(type_expected); +} + +static void test_assoc_perceived(void) +{ + static const struct assoc_test_struct should_not_exist = + { ".should_not_exist", PERCEIVED_TYPE_UNSPECIFIED, PERCEIVEDFLAG_UNDEFINED, NULL, 0, 0x80070002 }; + static const struct assoc_test_struct htm[] = + { + { ".htm", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text", 0x600 }, + { ".html", PERCEIVED_TYPE_TEXT, SOFTCODED_NATIVESUPPORT, "text", 0x600 }, + }; + static const struct assoc_test_struct mp2 = + { ".mp2", PERCEIVED_TYPE_VIDEO, HARDCODED_NATIVE_WMSDK, "video" }; + + OSVERSIONINFOEXW osvi; + DWORD version; + size_t i; + + if (!pAssocGetPerceivedType) + { + win_skip("AssocGetPerceivedType() is missing\n"); + return; + } + + memset(&osvi, 0, sizeof(osvi)); + osvi.dwOSVersionInfoSize = sizeof(osvi); + GetVersionExW((LPOSVERSIONINFOW)&osvi); + version = (osvi.dwMajorVersion << 8) | osvi.dwMinorVersion; + + /* invalid entry results in HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) */ + test_assoc_one(&should_not_exist); + + for (i = 0; i < sizeof(assoc_perceived_types) / sizeof(assoc_perceived_types[0]); ++i) + { + if (assoc_perceived_types[i].minversion && assoc_perceived_types[i].minversion > version) + continue; + if (!(assoc_perceived_types[i].flags & PERCEIVEDFLAG_HARDCODED)) + todo_wine test_assoc_one(&assoc_perceived_types[i]); + else + test_assoc_one(&assoc_perceived_types[i]); + } + + /* below Vista */ + if (version < 0x600) + { + todo_wine + test_assoc_one(&htm[0]); + todo_wine + test_assoc_one(&htm[1]); + } + + /* below Win8 */ + if (version < 0x602) + { + test_assoc_one(&mp2); + } +} + START_TEST(assoc) { HMODULE hshlwapi; @@ -309,9 +591,11 @@ START_TEST(assoc) pAssocQueryStringA = (void*)GetProcAddress(hshlwapi, "AssocQueryStringA"); pAssocQueryStringW = (void*)GetProcAddress(hshlwapi, "AssocQueryStringW"); pAssocCreate = (void*)GetProcAddress(hshlwapi, "AssocCreate"); + pAssocGetPerceivedType = (void*)GetProcAddress(hshlwapi, "AssocGetPerceivedType");
test_getstring_bad(); test_getstring_basic(); test_getstring_no_extra(); test_assoc_create(); + test_assoc_perceived(); } diff --git a/modules/rostests/winetests/shlwapi/clist.c b/modules/rostests/winetests/shlwapi/clist.c index 8aee3956b4..309b3335ec 100755 --- a/modules/rostests/winetests/shlwapi/clist.c +++ b/modules/rostests/winetests/shlwapi/clist.c @@ -17,7 +17,13 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#define COBJMACROS +#include <stdarg.h> + +#include "wine/test.h" +#include "windef.h" +#include "winbase.h" +#include "objbase.h"
typedef struct tagSHLWAPI_CLIST { @@ -212,7 +218,7 @@ static IStreamVtbl iclvt = static HMODULE SHLWAPI_hshlwapi = 0;
static VOID (WINAPI *pSHLWAPI_19)(LPSHLWAPI_CLIST); -static HRESULT (WINAPI *pSHLWAPI_20)(LPSHLWAPI_CLIST*,LPCSHLWAPI_CLIST); +static BOOL (WINAPI *pSHLWAPI_20)(LPSHLWAPI_CLIST*,LPCSHLWAPI_CLIST); static BOOL (WINAPI *pSHLWAPI_21)(LPSHLWAPI_CLIST*,ULONG); static LPSHLWAPI_CLIST (WINAPI *pSHLWAPI_22)(LPSHLWAPI_CLIST,ULONG); static HRESULT (WINAPI *pSHLWAPI_17)(IStream*, SHLWAPI_CLIST*); @@ -286,6 +292,7 @@ static void test_CList(void) struct dummystream streamobj; LPSHLWAPI_CLIST list = NULL; LPCSHLWAPI_CLIST item = SHLWAPI_CLIST_items; + BOOL bRet; HRESULT hRet; LPSHLWAPI_CLIST inserted; BYTE buff[64]; @@ -306,10 +313,10 @@ static void test_CList(void) buff[sizeof(SHLWAPI_CLIST)+i] = i*2;
/* Add it */ - hRet = pSHLWAPI_20(&list, inserted); - ok(hRet > S_OK, "failed list add\n"); + bRet = pSHLWAPI_20(&list, inserted); + ok(bRet == TRUE, "failed list add\n");
- if (hRet > S_OK) + if (bRet == TRUE) { ok(list && list->ulSize, "item not added\n");
@@ -384,11 +391,8 @@ static void test_CList(void) inserted = (LPSHLWAPI_CLIST)buff; inserted->ulSize = sizeof(SHLWAPI_CLIST) -1; inserted->ulId = 33; - - /* The call succeeds but the item is not inserted, except on some early - * versions which return failure. Wine behaves like later versions. - */ - pSHLWAPI_20(&list, inserted); + bRet = pSHLWAPI_20(&list, inserted); + ok(bRet == FALSE, "Expected failure\n");
inserted = pSHLWAPI_22(list, 33); ok(inserted == NULL, "inserted bad element size\n"); @@ -396,9 +400,8 @@ static void test_CList(void) inserted = (LPSHLWAPI_CLIST)buff; inserted->ulSize = 44; inserted->ulId = ~0U; - - /* See comment above, some early versions fail this call */ - pSHLWAPI_20(&list, inserted); + bRet = pSHLWAPI_20(&list, inserted); + ok(bRet == FALSE, "Expected failure\n");
item = SHLWAPI_CLIST_items;
diff --git a/modules/rostests/winetests/shlwapi/clsid.c b/modules/rostests/winetests/shlwapi/clsid.c index c86407cab1..e664f63cf7 100755 --- a/modules/rostests/winetests/shlwapi/clsid.c +++ b/modules/rostests/winetests/shlwapi/clsid.c @@ -17,10 +17,17 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" - -#include <olectl.h> -#include <initguid.h> +#include <stdio.h> + +#include "wine/test.h" +#include "winbase.h" +#include "winerror.h" +#include "winnls.h" +#include "winuser.h" +#include "initguid.h" +#include "shlguid.h" +#include "shobjidl.h" +#include "olectl.h"
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
diff --git a/modules/rostests/winetests/shlwapi/generated.c b/modules/rostests/winetests/shlwapi/generated.c index 59fdd9fb26..e509e5c49b 100755 --- a/modules/rostests/winetests/shlwapi/generated.c +++ b/modules/rostests/winetests/shlwapi/generated.c @@ -5,7 +5,22 @@ * Unit tests for data structure packing */
-#include "precomp.h" +#ifndef __REACTOS__ +#define WINVER 0x0501 +#define _WIN32_IE 0x0501 +#define _WIN32_WINNT 0x0501 +#endif + +#define WINE_NOWINSOCK + +#include <stdarg.h> +#include "windef.h" +#include "winbase.h" +#include "wtypes.h" +#include "winreg.h" +#include "shlwapi.h" + +#include "wine/test.h"
/*********************************************************************** * Compatibility macros diff --git a/modules/rostests/winetests/shlwapi/istream.c b/modules/rostests/winetests/shlwapi/istream.c index ce7c7c57db..926f2f8157 100644 --- a/modules/rostests/winetests/shlwapi/istream.c +++ b/modules/rostests/winetests/shlwapi/istream.c @@ -17,7 +17,16 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#define COBJMACROS + +#include <stdarg.h> +#include <stdio.h> + +#include "wine/test.h" +#include "windef.h" +#include "winbase.h" +#include "objbase.h" +#include "shlwapi.h"
static void test_IStream_invalid_operations(IStream * stream, DWORD mode) { diff --git a/modules/rostests/winetests/shlwapi/ordinal.c b/modules/rostests/winetests/shlwapi/ordinal.c index 5cb9ce05fe..8d42608130 100755 --- a/modules/rostests/winetests/shlwapi/ordinal.c +++ b/modules/rostests/winetests/shlwapi/ordinal.c @@ -17,12 +17,25 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#include <stdio.h> + +#define COBJMACROS +#define CONST_VTABLE +#include "wine/test.h" +#include "winbase.h" +#include "winerror.h" +#include "winuser.h" +#include "ole2.h" +#include "oaidl.h" +#include "ocidl.h" +#include "mlang.h" +#include "shlwapi.h" +#include "docobj.h" +#include "shobjidl.h" +#include "shlobj.h"
/* Function ptrs for ordinal calls */ static HMODULE hShlwapi; -static BOOL is_win2k_and_lower; -static BOOL is_win9x;
static int (WINAPI *pSHSearchMapInt)(const int*,const int*,int,int); static HRESULT (WINAPI *pGetAcceptLanguagesA)(LPSTR,LPDWORD); @@ -74,12 +87,6 @@ typedef struct SHELL_USER_PERMISSION {
static SECURITY_DESCRIPTOR* (WINAPI *pGetShellSecurityDescriptor)(const SHELL_USER_PERMISSION**,int);
-static HMODULE hmlang; -static HRESULT (WINAPI *pLcidToRfc1766A)(LCID, LPSTR, INT); - -static HMODULE hshell32; -static HRESULT (WINAPI *pSHGetDesktopFolder)(IShellFolder**); - static const CHAR ie_international[] = { 'S','o','f','t','w','a','r','e','\', 'M','i','c','r','o','s','o','f','t','\', @@ -192,11 +199,6 @@ static void test_GetAcceptLanguagesA(void) LPCSTR entry; INT i = 0;
- if (!pGetAcceptLanguagesA) { - win_skip("GetAcceptLanguagesA is not available\n"); - return; - } - lcid = GetUserDefaultLCID();
/* Get the original Value */ @@ -242,10 +244,8 @@ static void test_GetAcceptLanguagesA(void) if (lstrcmpA(buffer, language)) { /* some windows versions use "lang" or "lang-country" as default */ language[0] = 0; - if (pLcidToRfc1766A) { - hr = pLcidToRfc1766A(lcid, language, sizeof(language)); - ok(hr == S_OK, "LcidToRfc1766A returned 0x%x and %s\n", hr, language); - } + hr = LcidToRfc1766A(lcid, language, sizeof(language)); + ok(hr == S_OK, "LcidToRfc1766A returned 0x%x and %s\n", hr, language); }
ok(!lstrcmpA(buffer, language), @@ -556,7 +556,6 @@ static void test_alloc_shared_remote(DWORD procid, HANDLE hmem) SetLastError(0xdeadbeef); hmem2 = pSHMapHandle(NULL, procid, GetCurrentProcessId(), 0, 0); ok(hmem2 == NULL, "expected NULL, got new handle\n"); -todo_wine ok(GetLastError() == 0xdeadbeef, "last error should not have changed, got %u\n", GetLastError());
hmem2 = pSHMapHandle(hmem, procid, GetCurrentProcessId(), 0, 0); @@ -699,40 +698,20 @@ static void test_GetShellSecurityDescriptor(void) &supCurrentUserFull, &supEveryoneDenied, }; SECURITY_DESCRIPTOR* psd; - void *pChrCmpIW = GetProcAddress(hShlwapi, "ChrCmpIW");
- if(!pGetShellSecurityDescriptor) + if(!pGetShellSecurityDescriptor) /* vista and later */ { win_skip("GetShellSecurityDescriptor not available\n"); return; }
- if(pChrCmpIW && pChrCmpIW == pGetShellSecurityDescriptor) /* win2k */ - { - win_skip("Skipping for GetShellSecurityDescriptor, same ordinal used for ChrCmpIW\n"); - return; - } - psd = pGetShellSecurityDescriptor(NULL, 2); - ok(psd==NULL || - broken(psd==INVALID_HANDLE_VALUE), /* IE5 */ - "GetShellSecurityDescriptor should fail\n"); + ok(psd==NULL, "GetShellSecurityDescriptor should fail\n"); psd = pGetShellSecurityDescriptor(rgsup, 0); ok(psd==NULL, "GetShellSecurityDescriptor should fail, got %p\n", psd);
SetLastError(0xdeadbeef); psd = pGetShellSecurityDescriptor(rgsup, 2); - if (psd == NULL && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - /* The previous calls to GetShellSecurityDescriptor don't set the last error */ - win_skip("GetShellSecurityDescriptor is not implemented\n"); - return; - } - if (psd == INVALID_HANDLE_VALUE) - { - win_skip("GetShellSecurityDescriptor is broken on IE5\n"); - return; - } ok(psd!=NULL, "GetShellSecurityDescriptor failed\n"); if (psd!=NULL) { @@ -807,9 +786,6 @@ static void test_SHPackDispParams(void) VARIANT vars[10]; HRESULT hres;
- if(!pSHPackDispParams) - win_skip("SHPackSidpParams not available\n"); - memset(¶ms, 0xc0, sizeof(params)); memset(vars, 0xc0, sizeof(vars)); hres = pSHPackDispParams(¶ms, vars, 1, VT_I4, 0xdeadbeef); @@ -1480,12 +1456,6 @@ static void test_IConnectionPoint(void) DISPPARAMS params; VARIANT vars[10];
- if (!pIConnectionPoint_SimpleInvoke || !pConnectToConnectionPoint) - { - win_skip("IConnectionPoint Apis not present\n"); - return; - } - container = HeapAlloc(GetProcessHeap(),0,sizeof(Contain)); container->IConnectionPointContainer_iface.lpVtbl = &contain_vtbl; container->refCount = 1; @@ -1504,18 +1474,13 @@ static void test_IConnectionPoint(void) rc = pIConnectionPoint_SimpleInvoke(point,0xa0,NULL); ok(rc == S_OK, "pConnectToConnectionPoint failed with %x\n",rc);
- if (pSHPackDispParams) - { - memset(¶ms, 0xc0, sizeof(params)); - memset(vars, 0xc0, sizeof(vars)); - rc = pSHPackDispParams(¶ms, vars, 2, VT_I4, 0xdeadbeef, VT_BSTR, 0xdeadcafe); - ok(rc == S_OK, "SHPackDispParams failed: %08x\n", rc); + memset(¶ms, 0xc0, sizeof(params)); + memset(vars, 0xc0, sizeof(vars)); + rc = pSHPackDispParams(¶ms, vars, 2, VT_I4, 0xdeadbeef, VT_BSTR, 0xdeadcafe); + ok(rc == S_OK, "SHPackDispParams failed: %08x\n", rc);
- rc = pIConnectionPoint_SimpleInvoke(point,0xa1,¶ms); - ok(rc == S_OK, "pConnectToConnectionPoint failed with %x\n",rc); - } - else - win_skip("pSHPackDispParams not present\n"); + rc = pIConnectionPoint_SimpleInvoke(point,0xa1,¶ms); + ok(rc == S_OK, "pConnectToConnectionPoint failed with %x\n",rc);
rc = pConnectToConnectionPoint(NULL, &IID_NULL, FALSE, (IUnknown*)container, &cookie, NULL); ok(rc == S_OK, "pConnectToConnectionPoint failed with %x\n",rc); @@ -1619,12 +1584,6 @@ static void test_SHPropertyBag_ReadLONG(void) LONG out; static const WCHAR szName1[] = {'n','a','m','e','1',0};
- if (!pSHPropertyBag_ReadLONG) - { - win_skip("SHPropertyBag_ReadLONG not present\n"); - return; - } - pb = HeapAlloc(GetProcessHeap(),0,sizeof(PropBag)); pb->refCount = 1; pb->IPropertyBag_iface.lpVtbl = &prop_vtbl; @@ -1650,12 +1609,6 @@ static void test_SHSetWindowBits(void) DWORD style, styleold; WNDCLASSA clsA;
- if(!pSHSetWindowBits) - { - win_skip("SHSetWindowBits is not available\n"); - return; - } - clsA.style = 0; clsA.lpfnWndProc = DefWindowProcA; clsA.cbClsExtra = 0; @@ -1676,8 +1629,7 @@ static void test_SHSetWindowBits(void) SetLastError(0xdeadbeef); style = pSHSetWindowBits(NULL, GWL_STYLE, 0, 0); ok(style == 0, "expected 0 retval, got %d\n", style); - ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE || - broken(GetLastError() == 0xdeadbeef), /* Win9x/WinMe */ + ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "expected ERROR_INVALID_WINDOW_HANDLE, got %d\n", GetLastError());
/* zero mask, zero flags */ @@ -1727,12 +1679,6 @@ static void test_SHFormatDateTimeA(void) DWORD flags; INT ret;
- if(!pSHFormatDateTimeA) - { - win_skip("pSHFormatDateTimeA isn't available\n"); - return; - } - if (0) { /* crashes on native */ @@ -1777,8 +1723,7 @@ if (0) SetLastError(0xdeadbeef); ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff)); ok(ret == lstrlenA(buff)+1, "got %d\n", ret); - ok(GetLastError() == 0xdeadbeef || - broken(GetLastError() == ERROR_INVALID_FLAGS), /* Win9x/WinMe */ + ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %d\n", GetLastError());
/* now check returned strings */ @@ -1889,12 +1834,6 @@ static void test_SHFormatDateTimeW(void) #define UNICODE_LTR_MARK 0x200e #define UNICODE_RTL_MARK 0x200f
- if(!pSHFormatDateTimeW) - { - win_skip("pSHFormatDateTimeW isn't available\n"); - return; - } - if (0) { /* crashes on native */ @@ -1940,8 +1879,7 @@ if (0) ret = pSHFormatDateTimeW(&filetime, &flags, buff, sizeof(buff)/sizeof(WCHAR)); ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff), "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret); - ok(GetLastError() == 0xdeadbeef || - broken(GetLastError() == ERROR_INVALID_FLAGS), /* Win9x/WinMe/NT4 */ + ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %d\n", GetLastError());
/* now check returned strings */ @@ -1951,11 +1889,6 @@ if (0) "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret); SetLastError(0xdeadbeef); ret = GetTimeFormatW(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &st, NULL, buff2, sizeof(buff2)/sizeof(WCHAR)); - if (ret == 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - win_skip("Needed W-functions are not implemented\n"); - return; - } ok(ret == lstrlenW(buff2)+1, "expected %d, got %d\n", lstrlenW(buff2)+1, ret); ok(lstrcmpW(buff, buff2) == 0, "expected equal strings\n");
@@ -2103,24 +2036,11 @@ static void test_SHGetObjectCompatFlags(void) };
static const char compat_path[] = "Software\Microsoft\Windows\CurrentVersion\ShellCompatibility\Objects"; - void *pColorAdjustLuma = GetProcAddress(hShlwapi, "ColorAdjustLuma"); CHAR keyA[39]; /* {CLSID} */ HKEY root; DWORD ret; int i;
- if (!pSHGetObjectCompatFlags) - { - win_skip("SHGetObjectCompatFlags isn't available\n"); - return; - } - - if (pColorAdjustLuma && pColorAdjustLuma == pSHGetObjectCompatFlags) /* win2k */ - { - win_skip("Skipping SHGetObjectCompatFlags, same ordinal used for ColorAdjustLuma\n"); - return; - } - /* null args */ ret = pSHGetObjectCompatFlags(NULL, NULL); ok(ret == 0, "got %d\n", ret); @@ -2377,14 +2297,6 @@ static void test_IUnknown_QueryServiceExec(void) call_trace_t trace_expected; HRESULT hr;
- /* on <=W2K platforms same ordinal used for another export with different - prototype, so skipping using this indirect condition */ - if (is_win2k_and_lower) - { - win_skip("IUnknown_QueryServiceExec is not available\n"); - return; - } - provider = IServiceProviderImpl_Construct();
/* null source pointer */ @@ -2494,14 +2406,6 @@ static void test_IUnknown_ProfferService(void) HRESULT hr; DWORD cookie;
- /* on <=W2K platforms same ordinal used for another export with different - prototype, so skipping using this indirect condition */ - if (is_win2k_and_lower) - { - win_skip("IUnknown_ProfferService is not available\n"); - return; - } - provider = IServiceProviderImpl_Construct(); proff = IProfferServiceImpl_Construct();
@@ -2565,12 +2469,6 @@ static void test_SHCreateWorkerWindowA(void) LONG_PTR ret; BOOL res;
- if (is_win2k_and_lower) - { - win_skip("SHCreateWorkerWindowA not available\n"); - return; - } - hwnd = pSHCreateWorkerWindowA(0, NULL, 0, 0, 0, 0); ok(hwnd != 0, "expected window\n");
@@ -2739,7 +2637,7 @@ static void test_SHIShellFolder_EnumObjects(void) HRESULT hres; IShellFolder *folder;
- if(!pSHIShellFolder_EnumObjects || is_win2k_and_lower){ + if(!pSHIShellFolder_EnumObjects){ /* win7 and later */ win_skip("SHIShellFolder_EnumObjects not available\n"); return; } @@ -2756,7 +2654,7 @@ static void test_SHIShellFolder_EnumObjects(void) ok(enm == (IEnumIDList*)0xcafebabe, "Didn't get expected enumerator location, instead: %p\n", enm);
/* SHIShellFolder_EnumObjects isn't strict about the IShellFolder object */ - hres = pSHGetDesktopFolder(&folder); + hres = SHGetDesktopFolder(&folder); ok(hres == S_OK, "SHGetDesktopFolder failed: 0x%08x\n", hres);
enm = NULL; @@ -2825,11 +2723,6 @@ static void test_SHGetIniString(void) static const WCHAR testpathW[] = {'C',':','\','t','e','s','t','.','i','n','i',0}; WCHAR pathW[MAX_PATH];
- if(!pSHGetIniStringW || is_win2k_and_lower){ - win_skip("SHGetIniStringW is not available\n"); - return; - } - lstrcpyW(pathW, testpathW);
if (!write_inifile(pathW)) @@ -2880,11 +2773,6 @@ static void test_SHSetIniString(void) static const WCHAR NewKeyW[] = {'N','e','w','K','e','y',0}; static const WCHAR AValueW[] = {'A','V','a','l','u','e',0};
- if(!pSHSetIniStringW || is_win2k_and_lower){ - win_skip("SHSetIniStringW is not available\n"); - return; - } - if (!write_inifile(TestIniW)) return;
@@ -2929,30 +2817,10 @@ static void test_SHGetShellKey(void) static const WCHAR ShellFoldersW[] = { 'S','h','e','l','l',' ','F','o','l','d','e','r','s',0 }; static const WCHAR WineTestW[] = { 'W','i','n','e','T','e','s','t',0 };
- void *pPathBuildRootW = GetProcAddress(hShlwapi, "PathBuildRootW"); DWORD *alloc_data, data, size; HKEY hkey; HRESULT hres;
- if (!pSHGetShellKey) - { - win_skip("SHGetShellKey(ordinal 491) isn't available\n"); - return; - } - - /* some win2k */ - if (pPathBuildRootW && pPathBuildRootW == pSHGetShellKey) - { - win_skip("SHGetShellKey(ordinal 491) used for PathBuildRootW\n"); - return; - } - - if (is_win9x || is_win2k_and_lower) - { - win_skip("Ordinal 491 used for another call, skipping SHGetShellKey tests\n"); - return; - } - /* Vista+ limits SHKEY enumeration values */ SetLastError(0xdeadbeef); hkey = pSHGetShellKey(SHKEY_Key_Explorer, ShellFoldersW, FALSE); @@ -2991,12 +2859,6 @@ static void test_SHGetShellKey(void) ok(hkey != NULL, "Can't create key\n"); RegCloseKey(hkey);
- if (!pSKGetValueW || !pSKSetValueW || !pSKDeleteValueW || !pSKAllocValueW) - { - win_skip("SKGetValueW, SKSetValueW, SKDeleteValueW or SKAllocValueW not available\n"); - return; - } - size = sizeof(data); hres = pSKGetValueW(SHKEY_Root_HKLM, WineTestW, NULL, NULL, &data, &size); ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "hres = %x\n", hres); @@ -3084,12 +2946,6 @@ static void test_SHSetParentHwnd(void) HWND hwnd, hwnd2, ret; DWORD style;
- if (!pSHSetParentHwnd) - { - win_skip("SHSetParentHwnd not available\n"); - return; - } - hwnd = CreateWindowA("Button", "", WS_VISIBLE, 0, 0, 10, 10, NULL, NULL, NULL, NULL); ok(hwnd != NULL, "got %p\n", hwnd);
@@ -3264,14 +3120,6 @@ START_TEST(ordinal) int argc;
hShlwapi = GetModuleHandleA("shlwapi.dll"); - is_win2k_and_lower = GetProcAddress(hShlwapi, "StrChrNW") == 0; - is_win9x = GetProcAddress(hShlwapi, (LPSTR)99) == 0; /* StrCpyNXA */ - - /* SHCreateStreamOnFileEx was introduced in shlwapi v6.0 */ - if(!GetProcAddress(hShlwapi, "SHCreateStreamOnFileEx")){ - win_skip("Too old shlwapi version\n"); - return; - }
init_pointers();
@@ -3286,12 +3134,6 @@ START_TEST(ordinal) return; }
- hmlang = LoadLibraryA("mlang.dll"); - pLcidToRfc1766A = (void *)GetProcAddress(hmlang, "LcidToRfc1766A"); - - hshell32 = LoadLibraryA("shell32.dll"); - pSHGetDesktopFolder = (void *)GetProcAddress(hshell32, "SHGetDesktopFolder"); - test_GetAcceptLanguagesA(); test_SHSearchMapInt(); test_alloc_shared(argc, argv); @@ -3314,7 +3156,4 @@ START_TEST(ordinal) test_SHSetParentHwnd(); test_IUnknown_GetClassID(); test_DllGetVersion(); - - FreeLibrary(hshell32); - FreeLibrary(hmlang); } diff --git a/modules/rostests/winetests/shlwapi/path.c b/modules/rostests/winetests/shlwapi/path.c index 78f9090069..91c66b7ef3 100755 --- a/modules/rostests/winetests/shlwapi/path.c +++ b/modules/rostests/winetests/shlwapi/path.c @@ -17,7 +17,15 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#include <stdarg.h> +#include <stdio.h> + +#include "wine/test.h" +#include "windef.h" +#include "winbase.h" +#include "winreg.h" +#include "shlwapi.h" +#include "wininet.h"
static BOOL (WINAPI *pPathIsValidCharA)(char,DWORD); static BOOL (WINAPI *pPathIsValidCharW)(WCHAR,DWORD); diff --git a/modules/rostests/winetests/shlwapi/precomp.h b/modules/rostests/winetests/shlwapi/precomp.h index 0d6f5ba1ca..38f5fca82e 100644 --- a/modules/rostests/winetests/shlwapi/precomp.h +++ b/modules/rostests/winetests/shlwapi/precomp.h @@ -1,3 +1,4 @@ + #ifndef _SHLWAPI_WINETEST_PRECOMP_H_ #define _SHLWAPI_WINETEST_PRECOMP_H_
diff --git a/modules/rostests/winetests/shlwapi/shreg.c b/modules/rostests/winetests/shlwapi/shreg.c index 50c62b64d9..ca7fbad289 100755 --- a/modules/rostests/winetests/shlwapi/shreg.c +++ b/modules/rostests/winetests/shlwapi/shreg.c @@ -17,7 +17,16 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#include <stdarg.h> +#include <stdio.h> + +#include "wine/test.h" +#include "windef.h" +#include "winbase.h" +#include "winerror.h" +#include "winreg.h" +#include "winuser.h" +#include "shlwapi.h"
/* Keys used for testing */ #define REG_TEST_KEY "Software\Wine\Test" diff --git a/modules/rostests/winetests/shlwapi/string.c b/modules/rostests/winetests/shlwapi/string.c index d12d82055b..7f069a4849 100755 --- a/modules/rostests/winetests/shlwapi/string.c +++ b/modules/rostests/winetests/shlwapi/string.c @@ -17,7 +17,18 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#include <stdio.h> + +#include "wine/test.h" +#include "winbase.h" +#include "winerror.h" +#include "winnls.h" +#define NO_SHLWAPI_REG +#define NO_SHLWAPI_PATH +#define NO_SHLWAPI_GDI +#define NO_SHLWAPI_STREAM +#include "shlwapi.h" +#include "shtypes.h"
#define expect_eq(expr, val, type, fmt) do { \ type ret = expr; \ diff --git a/modules/rostests/winetests/shlwapi/thread.c b/modules/rostests/winetests/shlwapi/thread.c index 17ff7a73ed..34eb98ca60 100644 --- a/modules/rostests/winetests/shlwapi/thread.c +++ b/modules/rostests/winetests/shlwapi/thread.c @@ -17,7 +17,19 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#include <stdio.h> +#include <stdarg.h> + +#define COBJMACROS +#define CONST_VTABLE + +#include "windef.h" +#include "winbase.h" +#include "winerror.h" +#include "ole2.h" +#include "shlwapi.h" + +#include "wine/test.h"
static HRESULT (WINAPI *pSHCreateThreadRef)(LONG*, IUnknown**); static HRESULT (WINAPI *pSHGetThreadRef)(IUnknown**); diff --git a/modules/rostests/winetests/shlwapi/url.c b/modules/rostests/winetests/shlwapi/url.c index 44d70ff410..7b275a9f20 100644 --- a/modules/rostests/winetests/shlwapi/url.c +++ b/modules/rostests/winetests/shlwapi/url.c @@ -18,9 +18,16 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#include <stdarg.h> +#include <stdio.h>
-#include <intshcut.h> +#include "wine/test.h" +#include "windef.h" +#include "winbase.h" +#include "winreg.h" +#include "shlwapi.h" +#include "wininet.h" +#include "intshcut.h"
/* ################ */ static HMODULE hShlwapi; @@ -197,7 +204,15 @@ static const TEST_URL_CANONICALIZE TEST_CANONICALIZE[] = { {"///A/../B", URL_WININET_COMPATIBILITY, S_OK, "///B", FALSE}, {"A", 0, S_OK, "A", FALSE}, {"../A", 0, S_OK, "../A", FALSE}, + {".\A", 0, S_OK, ".\A", FALSE}, + {"A\.\B", 0, S_OK, "A\.\B", FALSE}, {"A/../B", 0, S_OK, "B", TRUE}, + {"A/../B/./../C", 0, S_OK, "C", TRUE}, + {"A/../B/./../C", URL_DONT_SIMPLIFY, S_OK, "A/../B/./../C", FALSE}, + {".", 0, S_OK, "/", TRUE}, + {"./A", 0, S_OK, "A", TRUE}, + {"A/./B", 0, S_OK, "A/B", TRUE}, + {"/:test\", 0, S_OK, "/:test\", TRUE}, {"/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%22%7D, @@ -351,6 +366,7 @@ typedef struct _TEST_URL_COMBINE { DWORD flags; HRESULT expectret; const char *expecturl; + BOOL todo; } TEST_URL_COMBINE;
static const TEST_URL_COMBINE TEST_COMBINE[] = { @@ -372,6 +388,15 @@ static const TEST_URL_COMBINE TEST_COMBINE[] = { {"http://www.winehq.org/test14#aaa/bbb#ccc", "#", 0, S_OK, "http://www.winehq.org/test14#%22%7D, {"http://www.winehq.org/tests/?query=x/y/z", "tests15", 0, S_OK, "http://www.winehq.org/tests/tests15%22%7D, {"http://www.winehq.org/tests/?query=x/y/z#example", "tests16", 0, S_OK, "http://www.winehq.org/tests/tests16%22%7D, + {"http://www.winehq.org/tests17", ".", 0, S_OK, "http://www.winehq.org/%22%7D, + {"http://www.winehq.org/tests18/test", ".", 0, S_OK, "http://www.winehq.org/tests18/%22%7D, + {"http://www.winehq.org/tests19/test", "./", 0, S_OK, "http://www.winehq.org/tests19/", FALSE}, + {"http://www.winehq.org/tests20/test", "/", 0, S_OK, "http://www.winehq.org/", FALSE}, + {"http://www.winehq.org/tests/test", "./test21", 0, S_OK, "http://www.winehq.org/tests/test21", FALSE}, + {"http://www.winehq.org/tests/test", "./test22/../test", 0, S_OK, "http://www.winehq.org/tests/test", FALSE}, + {"http://www.winehq.org/tests/", "http://www.winehq.org:80/tests23", 0, S_OK, "http://www.winehq.org/tests23", TRUE}, + {"http://www.winehq.org/tests/", "tests24/./test/../test", 0, S_OK, "http://www.winehq.org/tests/tests24/test", FALSE}, + {"http://www.winehq.org/tests/./tests25", "./", 0, S_OK, "http://www.winehq.org/tests/", FALSE}, {"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"}, @@ -1190,7 +1215,7 @@ static void test_UrlCanonicalizeW(void)
/* ########################### */
-static void test_url_combine(const char *szUrl1, const char *szUrl2, DWORD dwFlags, HRESULT dwExpectReturn, const char *szExpectUrl) +static void test_url_combine(const char *szUrl1, const char *szUrl2, DWORD dwFlags, HRESULT dwExpectReturn, const char *szExpectUrl, BOOL todo) { HRESULT hr; CHAR szReturnUrl[INTERNET_MAX_URL_LENGTH]; @@ -1215,34 +1240,42 @@ static void test_url_combine(const char *szUrl1, const char *szUrl2, DWORD dwFla dwSize = 0; hr = pUrlCombineA(szUrl1, szUrl2, NULL, &dwSize, dwFlags); ok(hr == E_POINTER, "Checking length of string, return was 0x%08x, expected 0x%08x\n", hr, E_POINTER); - ok(dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1); + ok(todo || dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1);
dwSize--; hr = pUrlCombineA(szUrl1, szUrl2, szReturnUrl, &dwSize, dwFlags); ok(hr == E_POINTER, "UrlCombineA returned 0x%08x, expected 0x%08x\n", hr, E_POINTER); - ok(dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1); + ok(todo || dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1);
hr = pUrlCombineA(szUrl1, szUrl2, szReturnUrl, &dwSize, dwFlags); ok(hr == dwExpectReturn, "UrlCombineA returned 0x%08x, expected 0x%08x\n", hr, dwExpectReturn); - ok(dwSize == dwExpectLen, "Got length %d, expected %d\n", dwSize, dwExpectLen); - if(SUCCEEDED(hr)) { - ok(strcmp(szReturnUrl,szExpectUrl)==0, "Expected %s, but got %s\n", szExpectUrl, szReturnUrl); + + if (todo) + { + todo_wine ok(dwSize == dwExpectLen && (FAILED(hr) || strcmp(szReturnUrl, szExpectUrl)==0), + "Expected %s (len=%d), but got %s (len=%d)\n", szExpectUrl, dwExpectLen, SUCCEEDED(hr) ? szReturnUrl : "(null)", dwSize); + } + else + { + ok(dwSize == dwExpectLen, "Got length %d, expected %d\n", dwSize, dwExpectLen); + if (SUCCEEDED(hr)) + ok(strcmp(szReturnUrl, szExpectUrl)==0, "Expected %s, but got %s\n", szExpectUrl, szReturnUrl); }
if (pUrlCombineW) { dwSize = 0; hr = pUrlCombineW(wszUrl1, wszUrl2, NULL, &dwSize, dwFlags); ok(hr == E_POINTER, "Checking length of string, return was 0x%08x, expected 0x%08x\n", hr, E_POINTER); - ok(dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1); + ok(todo || dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1);
dwSize--; hr = pUrlCombineW(wszUrl1, wszUrl2, wszReturnUrl, &dwSize, dwFlags); ok(hr == E_POINTER, "UrlCombineW returned 0x%08x, expected 0x%08x\n", hr, E_POINTER); - ok(dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1); + ok(todo || dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1);
hr = pUrlCombineW(wszUrl1, wszUrl2, wszReturnUrl, &dwSize, dwFlags); ok(hr == dwExpectReturn, "UrlCombineW returned 0x%08x, expected 0x%08x\n", hr, dwExpectReturn); - ok(dwSize == dwExpectLen, "Got length %d, expected %d\n", dwSize, dwExpectLen); + ok(todo || dwSize == dwExpectLen, "Got length %d, expected %d\n", dwSize, dwExpectLen); if(SUCCEEDED(hr)) { wszConvertedUrl = GetWideString(szReturnUrl); ok(lstrcmpW(wszReturnUrl, wszConvertedUrl)==0, "Strings didn't match between ascii and unicode UrlCombine!\n"); @@ -1262,7 +1295,7 @@ static void test_UrlCombine(void) unsigned int i; for(i=0; i<sizeof(TEST_COMBINE)/sizeof(TEST_COMBINE[0]); i++) { test_url_combine(TEST_COMBINE[i].url1, TEST_COMBINE[i].url2, TEST_COMBINE[i].flags, - TEST_COMBINE[i].expectret, TEST_COMBINE[i].expecturl); + TEST_COMBINE[i].expectret, TEST_COMBINE[i].expecturl, TEST_COMBINE[i].todo); } }