Connor McAdams : uiautomationcore/tests: Expand UiaHostProviderFromHwnd tests.

Alexandre Julliard julliard at winehq.org
Fri Nov 19 15:45:32 CST 2021


Module: wine
Branch: master
Commit: 2e7b6da243eb2ad9d9412b3865bf9ca18a5168d2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=2e7b6da243eb2ad9d9412b3865bf9ca18a5168d2

Author: Connor McAdams <cmcadams at codeweavers.com>
Date:   Tue Nov 16 14:32:32 2021 -0500

uiautomationcore/tests: Expand UiaHostProviderFromHwnd tests.

Signed-off-by: Connor McAdams <cmcadams at codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/uiautomationcore/tests/Makefile.in    |  2 +-
 dlls/uiautomationcore/tests/uiautomation.c | 53 +++++++++++++++++++++++++++++-
 2 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/dlls/uiautomationcore/tests/Makefile.in b/dlls/uiautomationcore/tests/Makefile.in
index 1d08e19093f..fbd53507fbe 100644
--- a/dlls/uiautomationcore/tests/Makefile.in
+++ b/dlls/uiautomationcore/tests/Makefile.in
@@ -1,5 +1,5 @@
 TESTDLL = uiautomationcore.dll
-IMPORTS = uiautomationcore user32 ole32
+IMPORTS = uiautomationcore user32 ole32 oleaut32
 
 C_SRCS = \
 	uiautomation.c
diff --git a/dlls/uiautomationcore/tests/uiautomation.c b/dlls/uiautomationcore/tests/uiautomation.c
index 76d2e06e07e..e5fa12535be 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;
     WNDCLASSA cls;
     HRESULT hr;
     HWND hwnd;
+    VARIANT v;
+    int i;
 
     cls.style = 0;
     cls.lpfnWndProc = test_wnd_proc;
@@ -61,6 +64,9 @@ static void test_UiaHostProviderFromHwnd(void)
     ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
     ok(p == NULL, "Unexpected instance.\n");
 
+    hr = UiaHostProviderFromHwnd(hwnd, NULL);
+    ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+
     p = NULL;
     hr = UiaHostProviderFromHwnd(hwnd, &p);
     ok(hr == S_OK, "Failed to get host provider, hr %#x.\n", hr);
@@ -75,9 +81,54 @@ static void test_UiaHostProviderFromHwnd(void)
     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) == HandleToUlong(hwnd), "V_I4(&v) = %#x, expected %#x\n", V_I4(&v), HandleToUlong(hwnd));
+
+    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));
+    VariantClear(&v);
 
+    /* No patterns are implemented on the HWND Host provider. */
+    for (i = UIA_InvokePatternId; i < (UIA_CustomNavigationPatternId + 1); i++)
+    {
+        IUnknown *unk;
+
+        unk = (void *)0xdeadbeef;
+        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_ServerSideProvider) ||
+            broken(prov_opt == ProviderOptions_ClientSideProvider), /* Windows < 10 1507 */
+            "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) == HandleToUlong(hwnd), "V_I4(&v) = %#x, expected %#x\n", V_I4(&v), HandleToUlong(hwnd));
+
+    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));
+    VariantClear(&v);
+
+    hr = IRawElementProviderSimple_get_ProviderOptions(p, &prov_opt);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok((prov_opt == ProviderOptions_ServerSideProvider) ||
+            broken(prov_opt == ProviderOptions_ClientSideProvider), /* Windows < 10 1507 */
+            "Unexpected provider options %#x\n", prov_opt);
+
+    IRawElementProviderSimple_Release(p);
+
     UnregisterClassA("HostProviderFromHwnd class", NULL);
 }
 




More information about the wine-cvs mailing list