[PATCH 2/2] uiautomationcore: Expand UiaHostProviderFromHwnd wine tests.
Connor McAdams
cmcadams at codeweavers.com
Mon Sep 20 17:59:45 CDT 2021
Signed-off-by: Connor McAdams <cmcadams at codeweavers.com>
---
dlls/uiautomationcore/tests/Makefile.in | 2 +-
dlls/uiautomationcore/tests/uiautomation.c | 53 +++++++++++++++++++---
2 files changed, 47 insertions(+), 8 deletions(-)
diff --git a/dlls/uiautomationcore/tests/Makefile.in b/dlls/uiautomationcore/tests/Makefile.in
index c39b062b6fd..d780b9feaf2 100644
--- a/dlls/uiautomationcore/tests/Makefile.in
+++ b/dlls/uiautomationcore/tests/Makefile.in
@@ -1,5 +1,5 @@
TESTDLL = uiautomationcore.dll
-IMPORTS = uiautomationcore user32
+IMPORTS = uiautomationcore user32 oleaut32
C_SRCS = \
uiautomation.c
diff --git a/dlls/uiautomationcore/tests/uiautomation.c b/dlls/uiautomationcore/tests/uiautomation.c
index cbcba1af294..6769eed46c3 100644
--- a/dlls/uiautomationcore/tests/uiautomation.c
+++ b/dlls/uiautomationcore/tests/uiautomation.c
@@ -34,9 +34,12 @@ static LRESULT WINAPI test_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPAR
static void test_UiaHostProviderFromHwnd(void)
{
IRawElementProviderSimple *p, *p2;
+ enum ProviderOptions prov_opt;
+ unsigned int i;
WNDCLASSA cls;
HRESULT hr;
HWND hwnd;
+ VARIANT v;
cls.style = 0;
cls.lpfnWndProc = test_wnd_proc;
@@ -58,17 +61,13 @@ static void test_UiaHostProviderFromHwnd(void)
p = (void *)0xdeadbeef;
hr = UiaHostProviderFromHwnd(NULL, &p);
-todo_wine {
ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
ok(p == NULL, "Unexpected instance.\n");
-}
p = NULL;
+
hr = UiaHostProviderFromHwnd(hwnd, &p);
-todo_wine
ok(hr == S_OK, "Failed to get host provider, hr %#x.\n", hr);
-if (hr == S_OK)
-{
p2 = NULL;
hr = UiaHostProviderFromHwnd(hwnd, &p2);
ok(hr == S_OK, "Failed to get host provider, hr %#x.\n", hr);
@@ -79,10 +78,50 @@ if (hr == S_OK)
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
ok(p2 == NULL, "Unexpected instance.\n");
- IRawElementProviderSimple_Release(p);
-}
+ hr = IRawElementProviderSimple_GetPropertyValue(p, UIA_NativeWindowHandlePropertyId, &v);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(V_VT(&v) == VT_I4, "V_VT(&v) = %d\n", V_VT(&v));
+ ok(V_I4(&v) == (INT)hwnd, "V_I4(&v) = %#x\n", V_I4(&v));
+ hr = IRawElementProviderSimple_GetPropertyValue(p, UIA_ProviderDescriptionPropertyId, &v);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(&v) = %d\n", V_VT(&v));
+ SysFreeString(V_BSTR(&v));
+
+ /* No patterns are implemented on the HWND provider. */
+ for (i = 10000; i < 10034; i++)
+ {
+ IUnknown *unk;
+
+ unk = NULL;
+ hr = IRawElementProviderSimple_GetPatternProvider(p, i, &unk);
+ ok(hr == S_OK, "Unexpected hr %#x, %d.\n", hr, i);
+ ok(!unk, "Pattern %d returned %p\n", i, unk);
+ }
+
+ hr = IRawElementProviderSimple_get_ProviderOptions(p, &prov_opt);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(prov_opt == ProviderOptions_ClientSideProvider, "Unexpected provider options %#x\n", prov_opt);
+
+ /* Test behavior post Window destruction. */
DestroyWindow(hwnd);
+
+ hr = IRawElementProviderSimple_GetPropertyValue(p, UIA_NativeWindowHandlePropertyId, &v);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(V_VT(&v) == VT_I4, "V_VT(&v) = %d\n", V_VT(&v));
+ ok(V_I4(&v) == (INT)hwnd, "V_I4(&v) = %#x\n", V_I4(&v));
+
+ hr = IRawElementProviderSimple_GetPropertyValue(p, UIA_ProviderDescriptionPropertyId, &v);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(&v) = %d\n", V_VT(&v));
+ SysFreeString(V_BSTR(&v));
+
+ hr = IRawElementProviderSimple_get_ProviderOptions(p, &prov_opt);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(prov_opt == ProviderOptions_ClientSideProvider, "prov_opt %#x\n", prov_opt);
+
+ IRawElementProviderSimple_Release(p);
+
UnregisterClassA("HostProviderFromHwnd class", NULL);
}
--
2.25.1
More information about the wine-devel
mailing list