Zhiyi Zhang : uxtheme/tests: Add GetThemeTransitionDuration() tests.
Alexandre Julliard
julliard at winehq.org
Tue Nov 2 17:27:44 CDT 2021
Module: wine
Branch: master
Commit: 59007aaeef4ae39ed04b358aafeef2004ecd3522
URL: https://source.winehq.org/git/wine.git/?a=commit;h=59007aaeef4ae39ed04b358aafeef2004ecd3522
Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date: Tue Nov 2 14:27:59 2021 +0800
uxtheme/tests: Add GetThemeTransitionDuration() tests.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/uxtheme/tests/system.c | 154 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 154 insertions(+)
diff --git a/dlls/uxtheme/tests/system.c b/dlls/uxtheme/tests/system.c
index 541d46deeaa..57901e6affb 100644
--- a/dlls/uxtheme/tests/system.c
+++ b/dlls/uxtheme/tests/system.c
@@ -43,6 +43,7 @@ static HDC (WINAPI *pGetBufferedPaintDC)(HPAINTBUFFER);
static HDC (WINAPI *pGetBufferedPaintTargetDC)(HPAINTBUFFER);
static HRESULT (WINAPI *pGetBufferedPaintTargetRect)(HPAINTBUFFER, RECT *);
static HRESULT (WINAPI *pGetThemeIntList)(HTHEME, int, int, int, INTLIST *);
+static HRESULT (WINAPI *pGetThemeTransitionDuration)(HTHEME, int, int, int, int, DWORD *);
static LONG (WINAPI *pDisplayConfigGetDeviceInfo)(DISPLAYCONFIG_DEVICE_INFO_HEADER *);
static LONG (WINAPI *pDisplayConfigSetDeviceInfo)(DISPLAYCONFIG_DEVICE_INFO_HEADER *);
@@ -81,6 +82,7 @@ static void init_funcs(void)
GET_PROC(uxtheme, GetBufferedPaintTargetDC)
GET_PROC(uxtheme, GetBufferedPaintTargetRect)
GET_PROC(uxtheme, GetThemeIntList)
+ GET_PROC(uxtheme, GetThemeTransitionDuration)
GET_PROC(uxtheme, OpenThemeDataEx)
GET_PROC(uxtheme, OpenThemeDataForDpi)
@@ -1299,6 +1301,157 @@ static void test_GetThemeIntList(void)
DestroyWindow(hwnd);
}
+static void test_GetThemeTransitionDuration(void)
+{
+ int from_state, to_state, expected;
+ INTLIST intlist;
+ DWORD duration;
+ HTHEME theme;
+ HRESULT hr;
+ HWND hwnd;
+
+ if (!pGetThemeTransitionDuration || !pGetThemeIntList)
+ {
+ win_skip("GetThemeTransitionDuration or GetThemeIntList is unavailable.\n");
+ return;
+ }
+
+ hwnd = CreateWindowA("static", "", WS_POPUP, 0, 0, 100, 100, 0, 0, 0, NULL);
+ theme = OpenThemeData(hwnd, L"Button");
+ if (!theme)
+ {
+ skip("Theming is not active.\n");
+ DestroyWindow(hwnd);
+ return;
+ }
+
+ /* Invalid parameter tests */
+ duration = 0xdeadbeef;
+ hr = pGetThemeTransitionDuration(NULL, BP_PUSHBUTTON, PBS_NORMAL, PBS_DEFAULTED_ANIMATING,
+ TMT_TRANSITIONDURATIONS, &duration);
+ todo_wine
+ ok(hr == E_HANDLE, "GetThemeTransitionDuration failed, hr %#x.\n", hr);
+ ok(duration == 0xdeadbeef, "Expected duration %#x, got %#x.\n", 0xdeadbeef, duration);
+
+ duration = 0xdeadbeef;
+ hr = pGetThemeTransitionDuration((HTHEME)0xdeadbeef, BP_PUSHBUTTON, PBS_NORMAL,
+ PBS_DEFAULTED_ANIMATING, TMT_TRANSITIONDURATIONS, &duration);
+ todo_wine
+ ok(hr == E_HANDLE, "GetThemeTransitionDuration failed, hr %#x.\n", hr);
+ ok(duration == 0xdeadbeef, "Expected duration %#x, got %#x.\n", 0xdeadbeef, duration);
+
+ duration = 0xdeadbeef;
+ hr = pGetThemeTransitionDuration(theme, 0xdeadbeef, PBS_NORMAL, PBS_DEFAULTED_ANIMATING,
+ TMT_TRANSITIONDURATIONS, &duration);
+ todo_wine
+ ok(hr == E_PROP_ID_UNSUPPORTED, "GetThemeTransitionDuration failed, hr %#x.\n", hr);
+ todo_wine
+ ok(duration == 0, "Expected duration %#x, got %#x.\n", 0, duration);
+
+ duration = 0xdeadbeef;
+ hr = pGetThemeTransitionDuration(theme, BP_PUSHBUTTON, PBS_NORMAL - 1, PBS_DEFAULTED_ANIMATING,
+ TMT_TRANSITIONDURATIONS, &duration);
+ todo_wine
+ ok(hr == E_INVALIDARG, "GetThemeTransitionDuration failed, hr %#x.\n", hr);
+ ok(duration == 0xdeadbeef, "Expected duration %#x, got %#x.\n", 0xdeadbeef, duration);
+
+ duration = 0xdeadbeef;
+ hr = pGetThemeTransitionDuration(theme, BP_PUSHBUTTON, PBS_DEFAULTED_ANIMATING + 1,
+ PBS_DEFAULTED_ANIMATING, TMT_TRANSITIONDURATIONS, &duration);
+ todo_wine
+ ok(hr == E_INVALIDARG, "GetThemeTransitionDuration failed, hr %#x.\n", hr);
+ todo_wine
+ ok(duration == 0, "Expected duration %#x, got %#x.\n", 0, duration);
+
+ duration = 0xdeadbeef;
+ hr = pGetThemeTransitionDuration(theme, BP_PUSHBUTTON, PBS_NORMAL, PBS_NORMAL - 1,
+ TMT_TRANSITIONDURATIONS, &duration);
+ todo_wine
+ ok(hr == E_INVALIDARG, "GetThemeTransitionDuration failed, hr %#x.\n", hr);
+ ok(duration == 0xdeadbeef, "Expected duration %#x, got %#x.\n", 0xdeadbeef, duration);
+
+ duration = 0xdeadbeef;
+ hr = pGetThemeTransitionDuration(theme, BP_PUSHBUTTON, PBS_NORMAL, PBS_DEFAULTED_ANIMATING + 1,
+ TMT_TRANSITIONDURATIONS, &duration);
+ todo_wine
+ ok(hr == E_INVALIDARG, "GetThemeTransitionDuration failed, hr %#x.\n", hr);
+ todo_wine
+ ok(duration == 0, "Expected duration %#x, got %#x.\n", 0, duration);
+
+ duration = 0xdeadbeef;
+ hr = pGetThemeTransitionDuration(theme, BP_PUSHBUTTON, PBS_NORMAL, PBS_DEFAULTED_ANIMATING,
+ TMT_BACKGROUND, &duration);
+ todo_wine
+ ok(hr == E_PROP_ID_UNSUPPORTED, "GetThemeTransitionDuration failed, hr %#x.\n", hr);
+ todo_wine
+ ok(duration == 0, "Expected duration %#x, got %#x.\n", 0, duration);
+
+ duration = 0xdeadbeef;
+ hr = pGetThemeTransitionDuration(theme, BP_PUSHBUTTON, PBS_NORMAL, PBS_DEFAULTED_ANIMATING,
+ 0xdeadbeef, &duration);
+ todo_wine
+ ok(hr == E_PROP_ID_UNSUPPORTED, "GetThemeTransitionDuration failed, hr %#x.\n", hr);
+ todo_wine
+ ok(duration == 0, "Expected duration %#x, got %#x.\n", 0, duration);
+
+ hr = pGetThemeTransitionDuration(theme, BP_PUSHBUTTON, PBS_NORMAL, PBS_DEFAULTED_ANIMATING,
+ TMT_TRANSITIONDURATIONS, NULL);
+ todo_wine
+ ok(hr == E_INVALIDARG, "GetThemeTransitionDuration failed, hr %#x.\n", hr);
+
+ /* Parts that don't have TMT_TRANSITIONDURATIONS */
+ hr = GetThemeIntList(theme, BP_GROUPBOX, GBS_NORMAL, TMT_TRANSITIONDURATIONS, &intlist);
+ ok(hr == E_PROP_ID_UNSUPPORTED, "GetThemeIntList failed, hr %#x.\n", hr);
+
+ duration = 0xdeadbeef;
+ hr = pGetThemeTransitionDuration(theme, BP_GROUPBOX, GBS_NORMAL, GBS_DISABLED,
+ TMT_TRANSITIONDURATIONS, &duration);
+ todo_wine
+ ok(hr == E_PROP_ID_UNSUPPORTED, "GetThemeTransitionDuration failed, hr %#x.\n", hr);
+ todo_wine
+ ok(duration == 0, "Expected duration %#x, got %#x.\n", 0, duration);
+
+ /* Test parsing TMT_TRANSITIONDURATIONS property. TMT_TRANSITIONDURATIONS is a vista+ property */
+ if (LOBYTE(LOWORD(GetVersion())) < 6)
+ goto done;
+
+ hr = pGetThemeIntList(theme, BP_PUSHBUTTON, PBS_NORMAL, TMT_TRANSITIONDURATIONS, &intlist);
+ ok(hr == S_OK, "GetThemeIntList failed, hr %#x.\n", hr);
+ /* The first value is the theme part state count. The following are the values from every state
+ * to every state. So the total value count should be 1 + state ^ 2 */
+ expected = PBS_DEFAULTED_ANIMATING - PBS_NORMAL + 1;
+ ok(intlist.iValues[0] == expected, "Expected the first value %d, got %d.\n", expected,
+ intlist.iValues[0]);
+ expected = 1 + intlist.iValues[0] * intlist.iValues[0];
+ ok(intlist.iValueCount == expected, "Expected value count %d, got %d.\n", expected,
+ intlist.iValueCount);
+ if (hr == S_OK)
+ {
+ for (from_state = PBS_NORMAL; from_state <= PBS_DEFAULTED_ANIMATING; ++from_state)
+ {
+ for (to_state = PBS_NORMAL; to_state <= PBS_DEFAULTED_ANIMATING; ++to_state)
+ {
+ winetest_push_context("from state %d to %d", from_state, to_state);
+
+ duration = 0xdeadbeef;
+ hr = pGetThemeTransitionDuration(theme, BP_PUSHBUTTON, from_state, to_state,
+ TMT_TRANSITIONDURATIONS, &duration);
+ todo_wine
+ ok(hr == S_OK, "GetThemeTransitionDuration failed, hr %#x.\n", hr);
+ expected = intlist.iValues[1 + intlist.iValues[0] * (from_state - 1) + (to_state - 1)];
+ todo_wine
+ ok(duration == expected, "Expected duration %d, got %d.\n", expected, duration);
+
+ winetest_pop_context();
+ }
+ }
+ }
+
+done:
+ CloseThemeData(theme);
+ DestroyWindow(hwnd);
+}
+
START_TEST(system)
{
init_funcs();
@@ -1319,6 +1472,7 @@ START_TEST(system)
test_CloseThemeData();
test_buffered_paint();
test_GetThemeIntList();
+ test_GetThemeTransitionDuration();
/* Test EnableTheming() in the end because it may disable theming */
test_EnableTheming();
More information about the wine-cvs
mailing list