Author: akhaldi Date: Sat May 19 15:14:49 2012 New Revision: 56640
URL: http://svn.reactos.org/svn/reactos?rev=56640&view=rev Log: [UXTHEME_WINETEST] * Sync to Wine 1.5.4.
Modified: trunk/rostests/winetests/uxtheme/system.c
Modified: trunk/rostests/winetests/uxtheme/system.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/uxtheme/system.c... ============================================================================== --- trunk/rostests/winetests/uxtheme/system.c [iso-8859-1] (original) +++ trunk/rostests/winetests/uxtheme/system.c [iso-8859-1] Sat May 19 15:14:49 2012 @@ -33,17 +33,12 @@ static BOOL (WINAPI * pIsThemeActive)(VOID); static BOOL (WINAPI * pIsThemePartDefined)(HTHEME, int, int); static HTHEME (WINAPI * pOpenThemeData)(HWND, LPCWSTR); +static HTHEME (WINAPI * pOpenThemeDataEx)(HWND, LPCWSTR, DWORD); static HRESULT (WINAPI * pSetWindowTheme)(HWND, LPCWSTR, LPCWSTR);
static HMODULE hUxtheme = 0;
-#define UXTHEME_GET_PROC(func) \ - p ## func = (void*)GetProcAddress(hUxtheme, #func); \ - if(!p ## func) { \ - trace("GetProcAddress(%s) failed\n", #func); \ - FreeLibrary(hUxtheme); \ - return FALSE; \ - } +#define UXTHEME_GET_PROC(func) p ## func = (void*)GetProcAddress(hUxtheme, #func);
static BOOL InitFunctionPtrs(void) { @@ -61,6 +56,7 @@ UXTHEME_GET_PROC(IsThemeActive) UXTHEME_GET_PROC(IsThemePartDefined) UXTHEME_GET_PROC(OpenThemeData) + UXTHEME_GET_PROC(OpenThemeDataEx) UXTHEME_GET_PROC(SetWindowTheme) } /* The following functions should be available, if not return FALSE. The Vista functions will @@ -71,7 +67,10 @@ !pGetWindowTheme || !pIsAppThemed || !pIsThemeActive || !pIsThemePartDefined || !pOpenThemeData || !pSetWindowTheme) + { + FreeLibrary(hUxtheme); return FALSE; + }
return TRUE; } @@ -193,8 +192,7 @@ SetLastError(0xdeadbeef); hTheme = pOpenThemeData(NULL, NULL); ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); - todo_wine - ok( GetLastError() == E_POINTER, + ok( GetLastError() == E_POINTER, "Expected GLE() to be E_POINTER, got 0x%08x\n", GetLastError());
@@ -233,8 +231,7 @@ SetLastError(0xdeadbeef); hTheme = pOpenThemeData(hWnd, NULL); ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); - todo_wine - ok( GetLastError() == E_POINTER, + ok( GetLastError() == E_POINTER, "Expected GLE() to be E_POINTER, got 0x%08x\n", GetLastError());
@@ -336,6 +333,151 @@ hWnd, GetLastError()); }
+static void test_OpenThemeDataEx(void) +{ + HTHEME hTheme; + HWND hWnd; + BOOL bThemeActive; + BOOL bDestroyed; + + WCHAR szInvalidClassList[] = {'D','E','A','D','B','E','E','F', 0 }; + WCHAR szButtonClassList[] = {'B','u','t','t','o','n', 0 }; + WCHAR szButtonClassList2[] = {'b','U','t','T','o','N', 0 }; + WCHAR szClassList[] = {'B','u','t','t','o','n',';','L','i','s','t','B','o','x', 0 }; + + if (!pOpenThemeDataEx) + { + win_skip("OpenThemeDataEx not available\n"); + return; + } + + bThemeActive = pIsThemeActive(); + + /* All NULL */ + SetLastError(0xdeadbeef); + hTheme = pOpenThemeDataEx(NULL, NULL, 0); + ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); + ok( GetLastError() == E_POINTER, + "Expected GLE() to be E_POINTER, got 0x%08x\n", + GetLastError()); + + /* A NULL hWnd and an invalid classlist without flags */ + SetLastError(0xdeadbeef); + hTheme = pOpenThemeDataEx(NULL, szInvalidClassList, 0); + ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); + todo_wine + ok( GetLastError() == E_PROP_ID_UNSUPPORTED, + "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n", + GetLastError()); + + SetLastError(0xdeadbeef); + hTheme = pOpenThemeDataEx(NULL, szClassList, 0); + if (bThemeActive) + { + ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n"); + todo_wine + ok( GetLastError() == ERROR_SUCCESS, + "Expected ERROR_SUCCESS, got 0x%08x\n", + GetLastError()); + } + else + { + ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); + todo_wine + ok( GetLastError() == E_PROP_ID_UNSUPPORTED, + "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n", + GetLastError()); + } + + /* Only do the bare minimum to get a valid hdc */ + hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL); + if (!hWnd) return; + + SetLastError(0xdeadbeef); + hTheme = pOpenThemeDataEx(hWnd, NULL, 0); + ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); + ok( GetLastError() == E_POINTER, + "Expected GLE() to be E_POINTER, got 0x%08x\n", + GetLastError()); + + SetLastError(0xdeadbeef); + hTheme = pOpenThemeDataEx(hWnd, szInvalidClassList, 0); + ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); + todo_wine + ok( GetLastError() == E_PROP_ID_UNSUPPORTED, + "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n", + GetLastError()); + + if (!bThemeActive) + { + SetLastError(0xdeadbeef); + hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, 0); + ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); + todo_wine + ok( GetLastError() == E_PROP_ID_UNSUPPORTED, + "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n", + GetLastError()); + skip("No active theme, skipping rest of OpenThemeDataEx tests\n"); + return; + } + + /* Only do the next checks if we have an active theme */ + + SetLastError(0xdeadbeef); + hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, 0); + ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n"); + todo_wine + ok( GetLastError() == ERROR_SUCCESS, + "Expected ERROR_SUCCESS, got 0x%08x\n", + GetLastError()); + + SetLastError(0xdeadbeef); + hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, OTD_FORCE_RECT_SIZING); + ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n"); + todo_wine + ok( GetLastError() == ERROR_SUCCESS, + "Expected ERROR_SUCCESS, got 0x%08x\n", + GetLastError()); + + SetLastError(0xdeadbeef); + hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, OTD_NONCLIENT); + ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n"); + todo_wine + ok( GetLastError() == ERROR_SUCCESS, + "Expected ERROR_SUCCESS, got 0x%08x\n", + GetLastError()); + + SetLastError(0xdeadbeef); + hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, 0x3); + ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n"); + todo_wine + ok( GetLastError() == ERROR_SUCCESS, + "Expected ERROR_SUCCESS, got 0x%08x\n", + GetLastError()); + + /* Test with bUtToN instead of Button */ + SetLastError(0xdeadbeef); + hTheme = pOpenThemeDataEx(hWnd, szButtonClassList2, 0); + ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n"); + todo_wine + ok( GetLastError() == ERROR_SUCCESS, + "Expected ERROR_SUCCESS, got 0x%08x\n", + GetLastError()); + + SetLastError(0xdeadbeef); + hTheme = pOpenThemeDataEx(hWnd, szClassList, 0); + ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n"); + todo_wine + ok( GetLastError() == ERROR_SUCCESS, + "Expected ERROR_SUCCESS, got 0x%08x\n", + GetLastError()); + + bDestroyed = DestroyWindow(hWnd); + if (!bDestroyed) + trace("Window %p couldn't be destroyed : 0x%08x\n", + hWnd, GetLastError()); +} + static void test_GetCurrentThemeName(void) { BOOL bThemeActive; @@ -361,23 +503,20 @@ SetLastError(0xdeadbeef); hRes = pGetCurrentThemeName(currentTheme, 0, NULL, 0, NULL, 0); if (bThemeActive) - ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes); - else - ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - /* When the number of characters given is too small (not 0, see above), GetCurrentThemeName returns 0x8007007a. - * The only definition I found was in strsafe.h: - * - * #define STRSAFE_E_INSUFFICIENT_BUFFER ((HRESULT)0x8007007AL) // 0x7A = 122L = ERROR_INSUFFICIENT_BUFFER - */ + ok( hRes == S_OK || broken(hRes == E_FAIL /* WinXP SP1 */), "Expected S_OK, got 0x%08x\n", hRes); + else + ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); + ok( GetLastError() == 0xdeadbeef, + "Expected 0xdeadbeef, got 0x%08x\n", + GetLastError()); + SetLastError(0xdeadbeef); hRes = pGetCurrentThemeName(currentTheme, 2, NULL, 0, NULL, 0); if (bThemeActive) todo_wine - ok(hRes == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), "Expected HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), got 0x%08x\n", hRes); + ok(hRes == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) || + broken(hRes == E_FAIL /* WinXP SP1 */), + "Expected HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), got 0x%08x\n", hRes); else ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); ok( GetLastError() == 0xdeadbeef, @@ -391,7 +530,9 @@ currentSize, sizeof(currentSize) / sizeof(WCHAR)); if (bThemeActive) todo_wine - ok(hRes == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), "Expected HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), got 0x%08x\n", hRes); + ok(hRes == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) || + broken(hRes == E_FAIL /* WinXP SP1 */), + "Expected HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), got 0x%08x\n", hRes); else ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); ok( GetLastError() == 0xdeadbeef, @@ -498,6 +639,10 @@ trace("Starting test_OpenThemeData()\n"); test_OpenThemeData();
+ /* OpenThemeDataEx */ + trace("Starting test_OpenThemeDataEx()\n"); + test_OpenThemeDataEx(); + /* GetCurrentThemeName */ trace("Starting test_GetCurrentThemeName()\n"); test_GetCurrentThemeName();