Commit 9c091d3e authored by Connor McAdams's avatar Connor McAdams Committed by Alexandre Julliard

uiautomationcore/tests: Add method expect definitions for all Accessible test interfaces.

parent a4c1dec8
......@@ -92,38 +92,6 @@ DEFINE_EXPECT(uia_event_callback);
DEFINE_EXPECT(uia_com_event_callback);
DEFINE_EXPECT(winproc_GETOBJECT_UiaRoot);
DEFINE_EXPECT(child_winproc_GETOBJECT_UiaRoot);
DEFINE_EXPECT(Accessible_accNavigate);
DEFINE_EXPECT(Accessible_get_accParent);
DEFINE_EXPECT(Accessible_get_accChildCount);
DEFINE_EXPECT(Accessible_get_accName);
DEFINE_EXPECT(Accessible_get_accRole);
DEFINE_EXPECT(Accessible_get_accState);
DEFINE_EXPECT(Accessible_accLocation);
DEFINE_EXPECT(Accessible_get_accChild);
DEFINE_EXPECT(Accessible_get_uniqueID);
DEFINE_EXPECT(Accessible2_get_accParent);
DEFINE_EXPECT(Accessible2_get_accChildCount);
DEFINE_EXPECT(Accessible2_get_accName);
DEFINE_EXPECT(Accessible2_get_accRole);
DEFINE_EXPECT(Accessible2_get_accState);
DEFINE_EXPECT(Accessible2_accLocation);
DEFINE_EXPECT(Accessible_QI_IAccIdentity);
DEFINE_EXPECT(Accessible2_QI_IAccIdentity);
DEFINE_EXPECT(Accessible2_get_uniqueID);
DEFINE_EXPECT(Accessible_child_accNavigate);
DEFINE_EXPECT(Accessible_child_get_accParent);
DEFINE_EXPECT(Accessible_child_get_accChildCount);
DEFINE_EXPECT(Accessible_child_get_accName);
DEFINE_EXPECT(Accessible_child_get_accRole);
DEFINE_EXPECT(Accessible_child_get_accState);
DEFINE_EXPECT(Accessible_child_accLocation);
DEFINE_EXPECT(Accessible_child2_accNavigate);
DEFINE_EXPECT(Accessible_child2_get_accParent);
DEFINE_EXPECT(Accessible_child2_get_accChildCount);
DEFINE_EXPECT(Accessible_child2_get_accName);
DEFINE_EXPECT(Accessible_child2_get_accRole);
DEFINE_EXPECT(Accessible_child2_get_accState);
DEFINE_EXPECT(Accessible_child2_accLocation);
static BOOL check_variant_i4(VARIANT *v, int val)
{
......@@ -161,6 +129,51 @@ static BOOL iface_cmp(IUnknown *iface1, IUnknown *iface2)
return cmp;
}
#define DEFINE_ACC_METHOD_EXPECT(method) \
int expect_ ## method , called_ ## method
#define DEFINE_ACC_METHOD_EXPECTS \
DEFINE_ACC_METHOD_EXPECT(QI_IAccIdentity); \
DEFINE_ACC_METHOD_EXPECT(get_accParent); \
DEFINE_ACC_METHOD_EXPECT(get_accChildCount); \
DEFINE_ACC_METHOD_EXPECT(get_accChild); \
DEFINE_ACC_METHOD_EXPECT(get_accName); \
DEFINE_ACC_METHOD_EXPECT(get_accValue); \
DEFINE_ACC_METHOD_EXPECT(get_accDescription); \
DEFINE_ACC_METHOD_EXPECT(get_accRole); \
DEFINE_ACC_METHOD_EXPECT(get_accState); \
DEFINE_ACC_METHOD_EXPECT(get_accHelp); \
DEFINE_ACC_METHOD_EXPECT(get_accHelpTopic); \
DEFINE_ACC_METHOD_EXPECT(get_accKeyboardShortcut); \
DEFINE_ACC_METHOD_EXPECT(get_accFocus); \
DEFINE_ACC_METHOD_EXPECT(get_accSelection); \
DEFINE_ACC_METHOD_EXPECT(get_accDefaultAction); \
DEFINE_ACC_METHOD_EXPECT(accSelect); \
DEFINE_ACC_METHOD_EXPECT(accLocation); \
DEFINE_ACC_METHOD_EXPECT(accNavigate); \
DEFINE_ACC_METHOD_EXPECT(accHitTest); \
DEFINE_ACC_METHOD_EXPECT(accDoDefaultAction); \
DEFINE_ACC_METHOD_EXPECT(put_accName); \
DEFINE_ACC_METHOD_EXPECT(put_accValue); \
DEFINE_ACC_METHOD_EXPECT(get_nRelations); \
DEFINE_ACC_METHOD_EXPECT(get_relation); \
DEFINE_ACC_METHOD_EXPECT(get_relations); \
DEFINE_ACC_METHOD_EXPECT(role); \
DEFINE_ACC_METHOD_EXPECT(scrollTo); \
DEFINE_ACC_METHOD_EXPECT(scrollToPoint); \
DEFINE_ACC_METHOD_EXPECT(get_groupPosition); \
DEFINE_ACC_METHOD_EXPECT(get_states); \
DEFINE_ACC_METHOD_EXPECT(get_extendedRole); \
DEFINE_ACC_METHOD_EXPECT(get_localizedExtendedRole); \
DEFINE_ACC_METHOD_EXPECT(get_nExtendedStates); \
DEFINE_ACC_METHOD_EXPECT(get_extendedStates); \
DEFINE_ACC_METHOD_EXPECT(get_localizedExtendedStates); \
DEFINE_ACC_METHOD_EXPECT(get_uniqueID); \
DEFINE_ACC_METHOD_EXPECT(get_windowHandle); \
DEFINE_ACC_METHOD_EXPECT(get_indexInParent); \
DEFINE_ACC_METHOD_EXPECT(get_locale); \
DEFINE_ACC_METHOD_EXPECT(get_attributes) \
static struct Accessible
{
IAccessible IAccessible_iface;
......@@ -169,6 +182,8 @@ static struct Accessible
IServiceProvider IServiceProvider_iface;
LONG ref;
const char *interface_name;
IAccessible *parent;
HWND acc_hwnd;
HWND ow_hwnd;
......@@ -179,8 +194,39 @@ static struct Accessible
LONG left, top, width, height;
BOOL enable_ia2;
LONG unique_id;
DEFINE_ACC_METHOD_EXPECTS;
} Accessible, Accessible2, Accessible_child, Accessible_child2;
#define SET_ACC_METHOD_EXPECT(acc, method) \
do { (acc)->called_ ## method = 0; (acc)->expect_ ## method = 1; } while(0)
#define SET_ACC_METHOD_EXPECT_MULTI(acc, method, num) \
do { (acc)->called_ ## method = 0; (acc)->expect_ ## method = num; } while(0)
#define CHECK_ACC_METHOD_EXPECT2(acc, method) \
do { \
ok((acc)->expect_ ##method, "unexpected call %s_" #method "\n", (acc)->interface_name); \
(acc)->called_ ## method++; \
}while(0)
#define CHECK_ACC_METHOD_EXPECT(acc, method) \
do { \
CHECK_ACC_METHOD_EXPECT2(acc, method); \
(acc)->expect_ ## method--; \
}while(0)
#define CHECK_ACC_METHOD_CALLED(acc, method) \
do { \
ok((acc)->called_ ## method, "expected %s_" #method "\n", (acc)->interface_name); \
(acc)->expect_ ## method = (acc)->called_ ## method = 0; \
}while(0)
#define CHECK_ACC_METHOD_CALLED_MULTI(acc, method, num) \
do { \
ok((acc)->called_ ## method == num, "expected %s_" #method " %d times (got %d)\n", (acc)->interface_name, num, (acc)->called_ ## method); \
(acc)->expect_ ## method = (acc)->called_ ## method = 0; \
}while(0)
static inline struct Accessible* impl_from_Accessible(IAccessible *iface)
{
return CONTAINING_RECORD(iface, struct Accessible, IAccessible_iface);
......@@ -193,12 +239,7 @@ static HRESULT WINAPI Accessible_QueryInterface(IAccessible *iface, REFIID riid,
*obj = NULL;
if (IsEqualIID(riid, &IID_IAccIdentity))
{
if (This == &Accessible2)
CHECK_EXPECT(Accessible2_QI_IAccIdentity);
else if (This == &Accessible)
CHECK_EXPECT(Accessible_QI_IAccIdentity);
ok(This == &Accessible2 || This == &Accessible, "unexpected call\n");
CHECK_ACC_METHOD_EXPECT(This, QI_IAccIdentity);
return E_NOINTERFACE;
}
......@@ -262,15 +303,7 @@ static HRESULT WINAPI Accessible_get_accParent(IAccessible *iface, IDispatch **o
{
struct Accessible *This = impl_from_Accessible(iface);
if (This == &Accessible_child)
CHECK_EXPECT(Accessible_child_get_accParent);
else if (This == &Accessible_child2)
CHECK_EXPECT(Accessible_child2_get_accParent);
else if (This == &Accessible2)
CHECK_EXPECT(Accessible2_get_accParent);
else
CHECK_EXPECT(Accessible_get_accParent);
CHECK_ACC_METHOD_EXPECT(This, get_accParent);
if (This->parent)
return IAccessible_QueryInterface(This->parent, &IID_IDispatch, (void **)out_parent);
......@@ -282,15 +315,7 @@ static HRESULT WINAPI Accessible_get_accChildCount(IAccessible *iface, LONG *out
{
struct Accessible *This = impl_from_Accessible(iface);
if (This == &Accessible_child)
CHECK_EXPECT(Accessible_child_get_accChildCount);
else if (This == &Accessible_child2)
CHECK_EXPECT(Accessible_child2_get_accChildCount);
else if (This == &Accessible2)
CHECK_EXPECT(Accessible2_get_accChildCount);
else
CHECK_EXPECT(Accessible_get_accChildCount);
CHECK_ACC_METHOD_EXPECT(This, get_accChildCount);
if (This->child_count)
{
*out_count = This->child_count;
......@@ -305,8 +330,7 @@ static HRESULT WINAPI Accessible_get_accChild(IAccessible *iface, VARIANT child_
{
struct Accessible *This = impl_from_Accessible(iface);
CHECK_EXPECT(Accessible_get_accChild);
ok(This == &Accessible, "unexpected call\n");
CHECK_ACC_METHOD_EXPECT(This, get_accChild);
*out_child = NULL;
if (V_VT(&child_id) != VT_I4)
......@@ -343,16 +367,9 @@ static HRESULT WINAPI Accessible_get_accName(IAccessible *iface, VARIANT child_i
{
struct Accessible *This = impl_from_Accessible(iface);
*out_name = NULL;
if (This == &Accessible_child)
CHECK_EXPECT(Accessible_child_get_accName);
else if (This == &Accessible_child2)
CHECK_EXPECT(Accessible_child2_get_accName);
else if (This == &Accessible2)
CHECK_EXPECT(Accessible2_get_accName);
else
CHECK_EXPECT(Accessible_get_accName);
CHECK_ACC_METHOD_EXPECT(This, get_accName);
*out_name = NULL;
if (This->name)
{
*out_name = SysAllocString(This->name);
......@@ -365,14 +382,16 @@ static HRESULT WINAPI Accessible_get_accName(IAccessible *iface, VARIANT child_i
static HRESULT WINAPI Accessible_get_accValue(IAccessible *iface, VARIANT child_id,
BSTR *out_value)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, get_accValue);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible_get_accDescription(IAccessible *iface, VARIANT child_id,
BSTR *out_description)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, get_accDescription);
return E_NOTIMPL;
}
......@@ -381,14 +400,7 @@ static HRESULT WINAPI Accessible_get_accRole(IAccessible *iface, VARIANT child_i
{
struct Accessible *This = impl_from_Accessible(iface);
if (This == &Accessible_child)
CHECK_EXPECT(Accessible_child_get_accRole);
else if (This == &Accessible_child2)
CHECK_EXPECT(Accessible_child2_get_accRole);
else if (This == &Accessible2)
CHECK_EXPECT(Accessible2_get_accRole);
else
CHECK_EXPECT(Accessible_get_accRole);
CHECK_ACC_METHOD_EXPECT(This, get_accRole);
if (This->role)
{
......@@ -405,14 +417,7 @@ static HRESULT WINAPI Accessible_get_accState(IAccessible *iface, VARIANT child_
{
struct Accessible *This = impl_from_Accessible(iface);
if (This == &Accessible_child)
CHECK_EXPECT(Accessible_child_get_accState);
else if (This == &Accessible_child2)
CHECK_EXPECT(Accessible_child2_get_accState);
else if (This == &Accessible2)
CHECK_EXPECT(Accessible2_get_accState);
else
CHECK_EXPECT(Accessible_get_accState);
CHECK_ACC_METHOD_EXPECT(This, get_accState);
if (V_VT(&child_id) != VT_I4)
return E_INVALIDARG;
......@@ -451,47 +456,54 @@ static HRESULT WINAPI Accessible_get_accState(IAccessible *iface, VARIANT child_
static HRESULT WINAPI Accessible_get_accHelp(IAccessible *iface, VARIANT child_id,
BSTR *out_help)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, get_accHelp);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible_get_accHelpTopic(IAccessible *iface,
BSTR *out_help_file, VARIANT child_id, LONG *out_topic_id)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, get_accHelpTopic);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible_get_accKeyboardShortcut(IAccessible *iface, VARIANT child_id,
BSTR *out_kbd_shortcut)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, get_accKeyboardShortcut);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible_get_accFocus(IAccessible *iface, VARIANT *pchild_id)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, get_accFocus);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible_get_accSelection(IAccessible *iface, VARIANT *out_selection)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, get_accSelection);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible_get_accDefaultAction(IAccessible *iface, VARIANT child_id,
BSTR *out_default_action)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, get_accDefaultAction);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible_accSelect(IAccessible *iface, LONG select_flags,
VARIANT child_id)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, accSelect);
return E_NOTIMPL;
}
......@@ -500,14 +512,7 @@ static HRESULT WINAPI Accessible_accLocation(IAccessible *iface, LONG *out_left,
{
struct Accessible *This = impl_from_Accessible(iface);
if (This == &Accessible_child)
CHECK_EXPECT(Accessible_child_accLocation);
else if (This == &Accessible_child2)
CHECK_EXPECT(Accessible_child2_accLocation);
else if (This == &Accessible2)
CHECK_EXPECT(Accessible2_accLocation);
else
CHECK_EXPECT(Accessible_accLocation);
CHECK_ACC_METHOD_EXPECT(This, accLocation);
if (This->width && This->height)
{
......@@ -526,12 +531,8 @@ static HRESULT WINAPI Accessible_accNavigate(IAccessible *iface, LONG nav_direct
{
struct Accessible *This = impl_from_Accessible(iface);
if (This == &Accessible_child)
CHECK_EXPECT(Accessible_child_accNavigate);
else if (This == &Accessible_child2)
CHECK_EXPECT(Accessible_child2_accNavigate);
else
CHECK_EXPECT(Accessible_accNavigate);
CHECK_ACC_METHOD_EXPECT(This, accNavigate);
VariantInit(out_var);
/*
......@@ -551,27 +552,31 @@ static HRESULT WINAPI Accessible_accNavigate(IAccessible *iface, LONG nav_direct
static HRESULT WINAPI Accessible_accHitTest(IAccessible *iface, LONG left, LONG top,
VARIANT *out_child_id)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, accHitTest);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible_accDoDefaultAction(IAccessible *iface, VARIANT child_id)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, accDoDefaultAction);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible_put_accName(IAccessible *iface, VARIANT child_id,
BSTR name)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, put_accName);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible_put_accValue(IAccessible *iface, VARIANT child_id,
BSTR value)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible(iface);
CHECK_ACC_METHOD_EXPECT(This, put_accValue);
return E_NOTIMPL;
}
......@@ -808,86 +813,99 @@ static HRESULT WINAPI Accessible2_put_accValue(IAccessible2 *iface, VARIANT chil
static HRESULT WINAPI Accessible2_get_nRelations(IAccessible2 *iface, LONG *out_nRelations)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_nRelations);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_get_relation(IAccessible2 *iface, LONG relation_idx,
IAccessibleRelation **out_relation)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_relation);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_get_relations(IAccessible2 *iface, LONG count,
IAccessibleRelation **out_relations, LONG *out_relation_count)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_relations);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_role(IAccessible2 *iface, LONG *out_role)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, role);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_scrollTo(IAccessible2 *iface, enum IA2ScrollType scroll_type)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, scrollTo);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_scrollToPoint(IAccessible2 *iface,
enum IA2CoordinateType coordinate_type, LONG x, LONG y)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, scrollToPoint);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_get_groupPosition(IAccessible2 *iface, LONG *out_group_level,
LONG *out_similar_items_in_group, LONG *out_position_in_group)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_groupPosition);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_get_states(IAccessible2 *iface, AccessibleStates *out_states)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_states);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_get_extendedRole(IAccessible2 *iface, BSTR *out_extended_role)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_extendedRole);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_get_localizedExtendedRole(IAccessible2 *iface,
BSTR *out_localized_extended_role)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_localizedExtendedRole);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_get_nExtendedStates(IAccessible2 *iface, LONG *out_nExtendedStates)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_nExtendedStates);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_get_extendedStates(IAccessible2 *iface, LONG count,
BSTR **out_extended_states, LONG *out_extended_states_count)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_extendedStates);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_get_localizedExtendedStates(IAccessible2 *iface, LONG count,
BSTR **out_localized_extended_states, LONG *out_localized_extended_states_count)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_localizedExtendedStates);
return E_NOTIMPL;
}
......@@ -895,10 +913,7 @@ static HRESULT WINAPI Accessible2_get_uniqueID(IAccessible2 *iface, LONG *out_un
{
struct Accessible *This = impl_from_Accessible2(iface);
if (This == &Accessible2)
CHECK_EXPECT(Accessible2_get_uniqueID);
else
CHECK_EXPECT(Accessible_get_uniqueID);
CHECK_ACC_METHOD_EXPECT(This, get_uniqueID);
*out_unique_id = 0;
if (This->unique_id)
......@@ -912,25 +927,29 @@ static HRESULT WINAPI Accessible2_get_uniqueID(IAccessible2 *iface, LONG *out_un
static HRESULT WINAPI Accessible2_get_windowHandle(IAccessible2 *iface, HWND *out_hwnd)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_windowHandle);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_get_indexInParent(IAccessible2 *iface, LONG *out_idx_in_parent)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_indexInParent);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_get_locale(IAccessible2 *iface, IA2Locale *out_locale)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_locale);
return E_NOTIMPL;
}
static HRESULT WINAPI Accessible2_get_attributes(IAccessible2 *iface, BSTR *out_attributes)
{
ok(0, "unexpected call\n");
struct Accessible *This = impl_from_Accessible2(iface);
CHECK_ACC_METHOD_EXPECT(This, get_attributes);
return E_NOTIMPL;
}
......@@ -1076,6 +1095,7 @@ static struct Accessible Accessible =
{ &OleWindowVtbl },
{ &ServiceProviderVtbl },
1,
"Accessible",
NULL,
0, 0,
0, 0, 0, NULL,
......@@ -1090,6 +1110,7 @@ static struct Accessible Accessible2 =
{ &OleWindowVtbl },
{ &ServiceProviderVtbl },
1,
"Accessible2",
NULL,
0, 0,
0, 0, 0, NULL,
......@@ -1104,6 +1125,7 @@ static struct Accessible Accessible_child =
{ &OleWindowVtbl },
{ &ServiceProviderVtbl },
1,
"Accessible_child",
&Accessible.IAccessible_iface,
0, 0,
0, 0, 0, NULL,
......@@ -1118,6 +1140,7 @@ static struct Accessible Accessible_child2 =
{ &OleWindowVtbl },
{ &ServiceProviderVtbl },
1,
"Accessible_child2",
&Accessible.IAccessible_iface,
0, 0,
0, 0, 0, NULL,
......@@ -3095,10 +3118,10 @@ static void test_uia_prov_from_acc_ia2(void)
acc_client = &Accessible2.IAccessible_iface;
SET_EXPECT(winproc_GETOBJECT_CLIENT);
/* The four below are only called on Win10v1909. */
SET_EXPECT(Accessible_get_accRole);
SET_EXPECT(Accessible2_get_accRole);
SET_EXPECT(Accessible2_QI_IAccIdentity);
SET_EXPECT(Accessible2_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible2, QI_IAccIdentity);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accParent);
elprov2 = (void *)0xdeadbeef;
hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &elprov2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
......@@ -3111,20 +3134,20 @@ static void test_uia_prov_from_acc_ia2(void)
* two IAccessible interfaces match. Skip the comparison tests for this
* Windows version.
*/
if (called_Accessible_get_accRole)
if (Accessible.called_get_accRole)
{
IRawElementProviderSimple_Release(elprov);
CHECK_CALLED(Accessible_get_accRole);
CHECK_CALLED(Accessible2_get_accRole);
CHECK_CALLED(Accessible2_QI_IAccIdentity);
CHECK_CALLED(Accessible2_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible2, QI_IAccIdentity);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accParent);
win_skip("Win10v1909 doesn't support IAccessible2 interface comparison, skipping tests.\n");
return;
}
called_Accessible_get_accRole = expect_Accessible_get_accRole = 0;
called_Accessible2_get_accRole = expect_Accessible2_get_accRole = 0;
called_Accessible2_QI_IAccIdentity = expect_Accessible2_QI_IAccIdentity = 0;
called_Accessible2_get_accParent = expect_Accessible2_get_accParent = 0;
Accessible.called_get_accRole = Accessible.expect_get_accRole = 0;
Accessible2.called_get_accRole = Accessible2.expect_get_accRole = 0;
Accessible2.called_QI_IAccIdentity = Accessible2.expect_QI_IAccIdentity = 0;
Accessible2.called_get_accParent = Accessible2.expect_get_accParent = 0;
Accessible.role = Accessible2.role = 0;
elprov2 = (void *)0xdeadbeef;
......@@ -3148,32 +3171,32 @@ static void test_uia_prov_from_acc_ia2(void)
acc_client = &Accessible2.IAccessible_iface;
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_get_accRole);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_get_accChildCount);
SET_EXPECT(Accessible_accLocation);
SET_EXPECT(Accessible_get_accName);
SET_EXPECT(Accessible_get_uniqueID);
SET_EXPECT(Accessible2_get_accChildCount);
SET_EXPECT(Accessible2_get_accName);
SET_EXPECT(Accessible2_QI_IAccIdentity);
SET_EXPECT(Accessible2_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accName);
SET_ACC_METHOD_EXPECT(&Accessible, get_uniqueID);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accName);
SET_ACC_METHOD_EXPECT(&Accessible2, QI_IAccIdentity);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accParent);
elprov2 = (void *)0xdeadbeef;
hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &elprov2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elprov2, "elprov == NULL, elprov %p\n", elprov2);
ok(Accessible2.ref == 1, "Unexpected refcnt %ld\n", Accessible2.ref);
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
CHECK_CALLED(Accessible_get_accRole);
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_get_accChildCount);
CHECK_CALLED(Accessible_accLocation);
CHECK_CALLED(Accessible_get_accName);
CHECK_CALLED(Accessible_get_uniqueID);
CHECK_CALLED(Accessible2_get_accChildCount);
CHECK_CALLED(Accessible2_get_accName);
todo_wine CHECK_CALLED(Accessible2_QI_IAccIdentity);
todo_wine CHECK_CALLED(Accessible2_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accName);
CHECK_ACC_METHOD_CALLED(&Accessible, get_uniqueID);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accName);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, QI_IAccIdentity);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, get_accParent);
IRawElementProviderSimple_Release(elprov2);
elprov2 = (void *)0xdeadbeef;
......@@ -3195,16 +3218,16 @@ static void test_uia_prov_from_acc_ia2(void)
acc_client = &Accessible2.IAccessible_iface;
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_get_uniqueID);
SET_EXPECT(Accessible2_get_uniqueID);
SET_ACC_METHOD_EXPECT(&Accessible, get_uniqueID);
SET_ACC_METHOD_EXPECT(&Accessible2, get_uniqueID);
elprov2 = (void *)0xdeadbeef;
hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &elprov2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elprov2, "elprov == NULL, elprov %p\n", elprov2);
ok(Accessible2.ref == 1, "Unexpected refcnt %ld\n", Accessible2.ref);
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
CHECK_CALLED(Accessible_get_uniqueID);
CHECK_CALLED(Accessible2_get_uniqueID);
CHECK_ACC_METHOD_CALLED(&Accessible, get_uniqueID);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_uniqueID);
IRawElementProviderSimple_Release(elprov2);
elprov2 = (void *)0xdeadbeef;
......@@ -3226,16 +3249,16 @@ static void test_uia_prov_from_acc_ia2(void)
acc_client = &Accessible2.IAccessible_iface;
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_get_uniqueID);
SET_EXPECT(Accessible2_get_uniqueID);
SET_ACC_METHOD_EXPECT(&Accessible, get_uniqueID);
SET_ACC_METHOD_EXPECT(&Accessible2, get_uniqueID);
elprov2 = (void *)0xdeadbeef;
hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &elprov2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!elprov2, "elprov != NULL, elprov %p\n", elprov2);
ok(Accessible2.ref == 1, "Unexpected refcnt %ld\n", Accessible2.ref);
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
CHECK_CALLED(Accessible_get_uniqueID);
CHECK_CALLED(Accessible2_get_uniqueID);
CHECK_ACC_METHOD_CALLED(&Accessible, get_uniqueID);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_uniqueID);
elprov2 = (void *)0xdeadbeef;
acc_client = NULL;
......@@ -3313,36 +3336,36 @@ static void test_uia_prov_from_acc_navigation(void)
L"acc_name", 0, 0, 50, 50);
acc_client = &Accessible2.IAccessible_iface;
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_get_accRole);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_get_accChildCount);
SET_EXPECT(Accessible_accLocation);
SET_EXPECT(Accessible_get_accName);
SET_EXPECT(Accessible2_get_accRole);
SET_EXPECT(Accessible2_get_accState);
SET_EXPECT(Accessible2_get_accChildCount);
SET_EXPECT(Accessible2_accLocation);
SET_EXPECT(Accessible2_get_accName);
SET_EXPECT(Accessible2_QI_IAccIdentity);
SET_EXPECT(Accessible2_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accName);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible2, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accName);
SET_ACC_METHOD_EXPECT(&Accessible2, QI_IAccIdentity);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accParent);
elfrag2 = (void *)0xdeadbeef;
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_Parent, &elfrag2);
ok(Accessible.ref == 2, "Unexpected refcnt %ld\n", Accessible.ref);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!elfrag2, "elfrag2 != NULL\n");
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
CHECK_CALLED(Accessible_get_accRole);
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_get_accChildCount);
CHECK_CALLED(Accessible_accLocation);
CHECK_CALLED(Accessible_get_accName);
CHECK_CALLED(Accessible2_get_accRole);
CHECK_CALLED(Accessible2_get_accState);
CHECK_CALLED(Accessible2_get_accChildCount);
CHECK_CALLED(Accessible2_accLocation);
CHECK_CALLED(Accessible2_get_accName);
todo_wine CHECK_CALLED(Accessible2_QI_IAccIdentity);
todo_wine CHECK_CALLED(Accessible2_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accName);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible2, accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accName);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, QI_IAccIdentity);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, get_accParent);
acc_client = NULL;
/* No check against root IAccessible, since it was done previously. */
......@@ -3377,34 +3400,34 @@ static void test_uia_prov_from_acc_navigation(void)
*/
set_accessible_props(&Accessible_child, 0, STATE_SYSTEM_FOCUSABLE, 0, NULL, 0, 0, 0, 0);
set_accessible_props(&Accessible_child2, 0, STATE_SYSTEM_FOCUSABLE, 0, NULL, 0, 0, 0, 0);
SET_EXPECT_MULTI(Accessible_get_accChildCount, 3);
SET_EXPECT_MULTI(Accessible_get_accChild, 2);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_child_get_accState);
SET_EXPECT(Accessible_child_accNavigate);
SET_EXPECT(Accessible_child_get_accParent);
SET_ACC_METHOD_EXPECT_MULTI(&Accessible, get_accChildCount, 3);
SET_ACC_METHOD_EXPECT_MULTI(&Accessible, get_accChild, 2);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible_child, accNavigate);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accParent);
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_FirstChild, &elfrag2);
ok(Accessible_child.ref == 2, "Unexpected refcnt %ld\n", Accessible_child.ref);
ok(Accessible.ref == 3, "Unexpected refcnt %ld\n", Accessible.ref);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elfrag2, "elfrag2 == NULL\n");
CHECK_CALLED_MULTI(Accessible_get_accChildCount, 3);
CHECK_CALLED_MULTI(Accessible_get_accChild, 2);
CHECK_CALLED(Accessible_child_get_accState);
CHECK_CALLED(Accessible_child_accNavigate);
CHECK_CALLED(Accessible_child_get_accParent);
CHECK_ACC_METHOD_CALLED_MULTI(&Accessible, get_accChildCount, 3);
CHECK_ACC_METHOD_CALLED_MULTI(&Accessible, get_accChild, 2);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible_child, accNavigate);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accParent);
check_fragment_acc(elfrag2, &Accessible_child.IAccessible_iface, CHILDID_SELF);
SET_EXPECT(Accessible_get_accChildCount);
SET_EXPECT(Accessible_get_accChild);
SET_EXPECT(Accessible_get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChild);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
hr = IRawElementProviderFragment_Navigate(elfrag2, NavigateDirection_NextSibling, &elfrag3);
ok(Accessible.ref == 5, "Unexpected refcnt %ld\n", Accessible.ref);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elfrag3, "elfrag2 == NULL\n");
CHECK_CALLED(Accessible_get_accChildCount);
CHECK_CALLED(Accessible_get_accChild);
CHECK_CALLED(Accessible_get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChild);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
check_fragment_acc(elfrag3, &Accessible.IAccessible_iface, 3);
IRawElementProviderFragment_Release(elfrag3);
......@@ -3415,51 +3438,51 @@ static void test_uia_prov_from_acc_navigation(void)
/* Retrieve childid 3 as first child now that Accessible_child is invisible. */
set_accessible_props(&Accessible_child, 0, STATE_SYSTEM_INVISIBLE, 0, NULL, 0, 0, 0, 0);
SET_EXPECT_MULTI(Accessible_get_accChildCount, 4);
SET_EXPECT_MULTI(Accessible_get_accChild, 3);
SET_EXPECT_MULTI(Accessible_get_accState, 2);
SET_EXPECT(Accessible_child_get_accState);
SET_ACC_METHOD_EXPECT_MULTI(&Accessible, get_accChildCount, 4);
SET_ACC_METHOD_EXPECT_MULTI(&Accessible, get_accChild, 3);
SET_ACC_METHOD_EXPECT_MULTI(&Accessible, get_accState, 2);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accState);
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_FirstChild, &elfrag2);
ok(Accessible.ref == 4, "Unexpected refcnt %ld\n", Accessible.ref);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elfrag2, "elfrag2 == NULL\n");
CHECK_CALLED_MULTI(Accessible_get_accChildCount, 4);
CHECK_CALLED_MULTI(Accessible_get_accChild, 3);
CHECK_CALLED_MULTI(Accessible_get_accState, 2);
CHECK_CALLED(Accessible_child_get_accState);
CHECK_ACC_METHOD_CALLED_MULTI(&Accessible, get_accChildCount, 4);
CHECK_ACC_METHOD_CALLED_MULTI(&Accessible, get_accChild, 3);
CHECK_ACC_METHOD_CALLED_MULTI(&Accessible, get_accState, 2);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accState);
check_fragment_acc(elfrag2, &Accessible.IAccessible_iface, 3);
IRawElementProviderFragment_Release(elfrag2);
ok(Accessible.ref == 2, "Unexpected refcnt %ld\n", Accessible.ref);
/* Retrieve childid 4 (Accessible_child2) as last child. */
set_accessible_props(&Accessible_child2, 0, STATE_SYSTEM_FOCUSABLE, 0, NULL, 0, 0, 0, 0);
SET_EXPECT_MULTI(Accessible_get_accChildCount, 2);
SET_EXPECT(Accessible_get_accChild);
SET_EXPECT(Accessible_child2_get_accState);
SET_EXPECT(Accessible_child2_accNavigate);
SET_EXPECT(Accessible_child2_get_accParent);
SET_ACC_METHOD_EXPECT_MULTI(&Accessible, get_accChildCount, 2);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChild);
SET_ACC_METHOD_EXPECT(&Accessible_child2, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible_child2, accNavigate);
SET_ACC_METHOD_EXPECT(&Accessible_child2, get_accParent);
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_LastChild, &elfrag2);
ok(Accessible_child2.ref == 2, "Unexpected refcnt %ld\n", Accessible_child2.ref);
ok(Accessible.ref == 3, "Unexpected refcnt %ld\n", Accessible.ref);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elfrag2, "elfrag2 == NULL\n");
CHECK_CALLED_MULTI(Accessible_get_accChildCount, 2);
CHECK_CALLED(Accessible_get_accChild);
CHECK_CALLED(Accessible_child2_get_accState);
CHECK_CALLED(Accessible_child2_accNavigate);
CHECK_CALLED(Accessible_child2_get_accParent);
CHECK_ACC_METHOD_CALLED_MULTI(&Accessible, get_accChildCount, 2);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChild);
CHECK_ACC_METHOD_CALLED(&Accessible_child2, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible_child2, accNavigate);
CHECK_ACC_METHOD_CALLED(&Accessible_child2, get_accParent);
check_fragment_acc(elfrag2, &Accessible_child2.IAccessible_iface, CHILDID_SELF);
SET_EXPECT(Accessible_get_accChildCount);
SET_EXPECT(Accessible_get_accChild);
SET_EXPECT(Accessible_get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChild);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
hr = IRawElementProviderFragment_Navigate(elfrag2, NavigateDirection_PreviousSibling, &elfrag3);
ok(Accessible.ref == 5, "Unexpected refcnt %ld\n", Accessible.ref);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elfrag3, "elfrag2 == NULL\n");
CHECK_CALLED(Accessible_get_accChildCount);
CHECK_CALLED(Accessible_get_accChild);
CHECK_CALLED(Accessible_get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChild);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
check_fragment_acc(elfrag3, &Accessible.IAccessible_iface, 3);
IRawElementProviderFragment_Release(elfrag3);
......@@ -3470,18 +3493,18 @@ static void test_uia_prov_from_acc_navigation(void)
/* Retrieve childid 3 as last child, now that Accessible_child2 is STATE_SYSTEM_INVISIBLE. */
set_accessible_props(&Accessible_child2, 0, STATE_SYSTEM_INVISIBLE, 0, NULL, 0, 0, 0, 0);
SET_EXPECT_MULTI(Accessible_get_accChildCount, 3);
SET_EXPECT_MULTI(Accessible_get_accChild, 2);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_child2_get_accState);
SET_ACC_METHOD_EXPECT_MULTI(&Accessible, get_accChildCount, 3);
SET_ACC_METHOD_EXPECT_MULTI(&Accessible, get_accChild, 2);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible_child2, get_accState);
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_LastChild, &elfrag2);
ok(Accessible.ref == 4, "Unexpected refcnt %ld\n", Accessible.ref);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elfrag2, "elfrag2 == NULL\n");
CHECK_CALLED_MULTI(Accessible_get_accChildCount, 3);
CHECK_CALLED_MULTI(Accessible_get_accChild, 2);
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_child2_get_accState);
CHECK_ACC_METHOD_CALLED_MULTI(&Accessible, get_accChildCount, 3);
CHECK_ACC_METHOD_CALLED_MULTI(&Accessible, get_accChild, 2);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible_child2, get_accState);
check_fragment_acc(elfrag2, &Accessible.IAccessible_iface, 3);
IRawElementProviderFragment_Release(elfrag2);
ok(Accessible.ref == 2, "Unexpected refcnt %ld\n", Accessible.ref);
......@@ -3493,12 +3516,12 @@ static void test_uia_prov_from_acc_navigation(void)
/*
* Full IAccessible child tests.
*/
SET_EXPECT(Accessible_child_accNavigate);
SET_EXPECT(Accessible_child_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible_child, accNavigate);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accParent);
hr = pUiaProviderFromIAccessible(&Accessible_child.IAccessible_iface, 0, UIA_PFIA_DEFAULT, &elprov);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
CHECK_CALLED(Accessible_child_accNavigate);
CHECK_CALLED(Accessible_child_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible_child, accNavigate);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accParent);
ok(Accessible_child.ref == 2, "Unexpected refcnt %ld\n", Accessible_child.ref);
hr = IRawElementProviderSimple_QueryInterface(elprov, &IID_IRawElementProviderFragment, (void **)&elfrag);
......@@ -3513,20 +3536,20 @@ static void test_uia_prov_from_acc_navigation(void)
set_accessible_props(&Accessible_child, ROLE_SYSTEM_CLIENT, STATE_SYSTEM_FOCUSABLE, 0, NULL, 0, 0, 0, 0);
acc_client = &Accessible2.IAccessible_iface;
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_child_get_accRole);
SET_EXPECT(Accessible_child_get_accParent);
SET_EXPECT(Accessible2_get_accRole);
SET_EXPECT(Accessible2_QI_IAccIdentity);
SET_EXPECT(Accessible2_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible2, QI_IAccIdentity);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accParent);
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_Parent, &elfrag2);
ok(Accessible.ref == 2, "Unexpected refcnt %ld\n", Accessible.ref);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elfrag2, "elfrag2 == NULL\n");
CHECK_CALLED(Accessible_child_get_accParent);
CHECK_CALLED(Accessible_child_get_accRole);
CHECK_CALLED(Accessible2_get_accRole);
todo_wine CHECK_CALLED(Accessible2_QI_IAccIdentity);
todo_wine CHECK_CALLED(Accessible2_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accRole);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, QI_IAccIdentity);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, get_accParent);
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
check_fragment_acc(elfrag2, &Accessible.IAccessible_iface, CHILDID_SELF);
IRawElementProviderFragment_Release(elfrag2);
......@@ -3534,28 +3557,28 @@ static void test_uia_prov_from_acc_navigation(void)
acc_client = NULL;
/* Second call only does get_accParent, no root check. */
SET_EXPECT(Accessible_child_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accParent);
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_Parent, &elfrag2);
ok(Accessible.ref == 2, "Unexpected refcnt %ld\n", Accessible.ref);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elfrag2, "elfrag2 == NULL\n");
CHECK_CALLED(Accessible_child_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accParent);
check_fragment_acc(elfrag2, &Accessible.IAccessible_iface, CHILDID_SELF);
IRawElementProviderFragment_Release(elfrag2);
ok(Accessible.ref == 1, "Unexpected refcnt %ld\n", Accessible.ref);
/* ChildCount of 0, do nothing for First/Last child.*/
SET_EXPECT(Accessible_child_get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accChildCount);
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_FirstChild, &elfrag2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!elfrag2, "elfrag2 != NULL\n");
CHECK_CALLED(Accessible_child_get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accChildCount);
SET_EXPECT(Accessible_child_get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accChildCount);
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_LastChild, &elfrag2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!elfrag2, "elfrag2 != NULL\n");
CHECK_CALLED(Accessible_child_get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accChildCount);
/*
* In the case of sibling navigation on an IAccessible that wasn't
......@@ -3569,46 +3592,46 @@ static void test_uia_prov_from_acc_navigation(void)
L"acc_child", 0, 0, 50, 50);
set_accessible_props(&Accessible_child2, ROLE_SYSTEM_CLIENT, STATE_SYSTEM_FOCUSABLE, 1,
L"acc_child", 0, 0, 50, 50);
SET_EXPECT_MULTI(Accessible_get_accChildCount, 5);
SET_EXPECT_MULTI(Accessible_get_accChild, 4);
SET_EXPECT(Accessible_child_get_accParent);
SET_EXPECT(Accessible_child_get_accRole);
SET_EXPECT(Accessible_child_get_accState);
SET_EXPECT(Accessible_child_get_accChildCount);
SET_EXPECT(Accessible_child_accLocation);
SET_EXPECT(Accessible_child_get_accName);
SET_EXPECT(Accessible_child2_get_accRole);
SET_EXPECT(Accessible_child2_get_accState);
SET_EXPECT(Accessible_child2_get_accChildCount);
SET_EXPECT(Accessible_child2_accLocation);
SET_EXPECT(Accessible_child2_get_accName);
SET_ACC_METHOD_EXPECT_MULTI(&Accessible, get_accChildCount, 5);
SET_ACC_METHOD_EXPECT_MULTI(&Accessible, get_accChild, 4);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible_child, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accName);
SET_ACC_METHOD_EXPECT(&Accessible_child2, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible_child2, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible_child2, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible_child2, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible_child2, get_accName);
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_NextSibling, &elfrag2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!elfrag2, "elfrag2 != NULL\n");
CHECK_CALLED_MULTI(Accessible_get_accChildCount, 5);
CHECK_CALLED_MULTI(Accessible_get_accChild, 4);
CHECK_CALLED(Accessible_child_get_accParent);
CHECK_CALLED(Accessible_child_get_accRole);
CHECK_CALLED(Accessible_child_get_accState);
CHECK_CALLED(Accessible_child_get_accChildCount);
CHECK_CALLED(Accessible_child_accLocation);
CHECK_CALLED(Accessible_child_get_accName);
CHECK_CALLED(Accessible_child2_get_accRole);
CHECK_CALLED(Accessible_child2_get_accState);
CHECK_CALLED(Accessible_child2_get_accChildCount);
CHECK_CALLED(Accessible_child2_accLocation);
CHECK_CALLED(Accessible_child2_get_accName);
CHECK_ACC_METHOD_CALLED_MULTI(&Accessible, get_accChildCount, 5);
CHECK_ACC_METHOD_CALLED_MULTI(&Accessible, get_accChild, 4);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible_child, accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accName);
CHECK_ACC_METHOD_CALLED(&Accessible_child2, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible_child2, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible_child2, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible_child2, accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible_child2, get_accName);
/* Now they have a role mismatch, we can determine our position. */
set_accessible_props(&Accessible_child2, ROLE_SYSTEM_DOCUMENT, STATE_SYSTEM_FOCUSABLE, 1,
L"acc_child", 0, 0, 50, 50);
SET_EXPECT_MULTI(Accessible_get_accChildCount, 6);
SET_EXPECT_MULTI(Accessible_get_accChild, 5);
SET_ACC_METHOD_EXPECT_MULTI(&Accessible, get_accChildCount, 6);
SET_ACC_METHOD_EXPECT_MULTI(&Accessible, get_accChild, 5);
/* Check ChildID 1 for STATE_SYSTEM_INVISIBLE. */
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_child_get_accParent);
SET_EXPECT(Accessible_child_get_accRole);
SET_EXPECT(Accessible_child2_get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible_child2, get_accRole);
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_PreviousSibling, &elfrag2);
/*
* Even though we didn't get a new fragment, now that we know our
......@@ -3617,24 +3640,24 @@ static void test_uia_prov_from_acc_navigation(void)
ok(Accessible.ref == 2, "Unexpected refcnt %ld\n", Accessible.ref);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!elfrag2, "elfrag2 != NULL\n");
CHECK_CALLED_MULTI(Accessible_get_accChildCount, 6);
CHECK_CALLED_MULTI(Accessible_get_accChild, 5);
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_child_get_accParent);
CHECK_CALLED(Accessible_child_get_accRole);
CHECK_CALLED(Accessible_child2_get_accRole);
CHECK_ACC_METHOD_CALLED_MULTI(&Accessible, get_accChildCount, 6);
CHECK_ACC_METHOD_CALLED_MULTI(&Accessible, get_accChild, 5);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible_child2, get_accRole);
/* Now that we know our position, no extra nav work. */
SET_EXPECT(Accessible_get_accChildCount);
SET_EXPECT(Accessible_get_accChild);
SET_EXPECT(Accessible_get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChild);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_NextSibling, &elfrag2);
ok(Accessible.ref == 4, "Unexpected refcnt %ld\n", Accessible.ref);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elfrag2, "elfrag2 == NULL\n");
CHECK_CALLED(Accessible_get_accChildCount);
CHECK_CALLED(Accessible_get_accChild);
CHECK_CALLED(Accessible_get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChild);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
if (elfrag2)
{
check_fragment_acc(elfrag2, &Accessible.IAccessible_iface, 3);
......@@ -3688,21 +3711,21 @@ static void test_uia_prov_from_acc_navigation(void)
* NavigateDirection_Next/PreviousSibling behaves normally, no IAccessible
* comparisons.
*/
SET_EXPECT(Accessible_get_accChildCount);
SET_EXPECT(Accessible_get_accChild);
SET_EXPECT(Accessible_child_get_accState);
SET_EXPECT(Accessible_child_accNavigate);
SET_EXPECT(Accessible_child_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChild);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible_child, accNavigate);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accParent);
hr = IRawElementProviderFragment_Navigate(elfrag, NavigateDirection_NextSibling, &elfrag2);
ok(Accessible_child.ref == 2, "Unexpected refcnt %ld\n", Accessible_child.ref);
ok(Accessible.ref == 4, "Unexpected refcnt %ld\n", Accessible.ref);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elfrag2, "elfrag2 == NULL\n");
CHECK_CALLED(Accessible_get_accChildCount);
CHECK_CALLED(Accessible_get_accChild);
CHECK_CALLED(Accessible_child_get_accState);
CHECK_CALLED(Accessible_child_accNavigate);
CHECK_CALLED(Accessible_child_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChild);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible_child, accNavigate);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accParent);
check_fragment_acc(elfrag2, &Accessible_child.IAccessible_iface, CHILDID_SELF);
IRawElementProviderFragment_Release(elfrag2);
......@@ -3744,7 +3767,7 @@ static void test_uia_prov_from_acc_properties(void)
ok(Accessible.ref == 2, "Unexpected refcnt %ld\n", Accessible.ref);
Accessible.role = role->acc_role;
SET_EXPECT(Accessible_get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
VariantClear(&v);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_ControlTypePropertyId, &v);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
......@@ -3752,10 +3775,10 @@ static void test_uia_prov_from_acc_properties(void)
ok(check_variant_i4(&v, role->uia_control_type), "MSAA role %d: V_I4(&v) = %ld\n", role->acc_role, V_I4(&v));
else
ok(V_VT(&v) == VT_EMPTY, "MSAA role %d: V_VT(&v) = %d\n", role->acc_role, V_VT(&v));
CHECK_CALLED(Accessible_get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
if (!role->uia_control_type)
SET_EXPECT(Accessible_get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
VariantClear(&v);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_ControlTypePropertyId, &v);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
......@@ -3764,7 +3787,7 @@ static void test_uia_prov_from_acc_properties(void)
else
ok(V_VT(&v) == VT_EMPTY, "MSAA role %d: V_VT(&v) = %d\n", role->acc_role, V_VT(&v));
if (!role->uia_control_type)
CHECK_CALLED(Accessible_get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
hr = IRawElementProviderSimple_GetPatternProvider(elprov, UIA_LegacyIAccessiblePatternId, &unk);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
......@@ -3775,11 +3798,11 @@ static void test_uia_prov_from_acc_properties(void)
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!accprov, "accprov == NULL\n");
SET_EXPECT(Accessible_get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
hr = ILegacyIAccessibleProvider_get_Role(accprov, &role_val);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(role_val == Accessible.role, "role_val != Accessible.role\n");
CHECK_CALLED(Accessible_get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
ILegacyIAccessibleProvider_Release(accprov);
IRawElementProviderSimple_Release(elprov);
......@@ -3792,22 +3815,22 @@ static void test_uia_prov_from_acc_properties(void)
ok(Accessible.ref == 2, "Unexpected refcnt %ld\n", Accessible.ref);
Accessible.role = ROLE_SYSTEM_CLOCK;
SET_EXPECT(Accessible_get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
VariantClear(&v);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_ControlTypePropertyId, &v);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(check_variant_i4(&v, UIA_ButtonControlTypeId) || broken(V_VT(&v) == VT_EMPTY), /* Windows < 10 1809 */
"MSAA role %d: V_I4(&v) = %ld\n", Accessible.role, V_I4(&v));
CHECK_CALLED(Accessible_get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
if (V_VT(&v) == VT_EMPTY)
SET_EXPECT(Accessible_get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
VariantClear(&v);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_ControlTypePropertyId, &v);
ok(check_variant_i4(&v, UIA_ButtonControlTypeId) || broken(V_VT(&v) == VT_EMPTY), /* Windows < 10 1809 */
"MSAA role %d: V_I4(&v) = %ld\n", Accessible.role, V_I4(&v));
if (V_VT(&v) == VT_EMPTY)
CHECK_CALLED(Accessible_get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
Accessible.role = 0;
IRawElementProviderSimple_Release(elprov);
......@@ -3825,11 +3848,11 @@ static void test_uia_prov_from_acc_properties(void)
for (x = 0; x < 2; x++)
{
Accessible.state = x ? state->acc_state : ~state->acc_state;
SET_EXPECT(Accessible_get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, state->prop_id, &v);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(check_variant_bool(&v, x), "V_BOOL(&v) = %#x\n", V_BOOL(&v));
CHECK_CALLED(Accessible_get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
}
}
Accessible.state = 0;
......@@ -3840,23 +3863,23 @@ static void test_uia_prov_from_acc_properties(void)
* client area bounding box of the HWND it is contained within.
*/
set_accessible_props(&Accessible, 0, STATE_SYSTEM_OFFSCREEN, 0, L"Accessible", 0, 0, 0, 0);
SET_EXPECT(Accessible_get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_IsOffscreenPropertyId, &v);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(V_VT(&v) == VT_BOOL, "V_VT(&v) = %d\n", V_VT(&v));
ok(check_variant_bool(&v, TRUE), "Unexpected BOOL %#x\n", V_BOOL(&v));
CHECK_CALLED(Accessible_get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
/* accLocation fails, will return FALSE. */
set_accessible_props(&Accessible, 0, ~STATE_SYSTEM_OFFSCREEN, 0, L"Accessible", 0, 0, 0, 0);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_IsOffscreenPropertyId, &v);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(V_VT(&v) == VT_BOOL, "V_VT(&v) = %d\n", V_VT(&v));
ok(check_variant_bool(&v, FALSE), "Unexpected BOOL %#x\n", V_BOOL(&v));
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
/* Window is visible, Accessible is within its bounds. */
ShowWindow(Accessible.ow_hwnd, SW_SHOW);
......@@ -3865,14 +3888,14 @@ static void test_uia_prov_from_acc_properties(void)
set_accessible_props(&Accessible, 0, ~STATE_SYSTEM_OFFSCREEN, 0, L"Accessible", rect[0].left, rect[0].top,
(rect[0].right - rect[0].left), (rect[0].bottom - rect[0].top));
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_IsOffscreenPropertyId, &v);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(V_VT(&v) == VT_BOOL, "Unexpected VT %d\n", V_VT(&v));
ok(check_variant_bool(&v, FALSE), "Unexpected BOOL %#x\n", V_BOOL(&v));
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
/*
* Window is invisible, Accessible is within its bounds. Window visibility
......@@ -3881,40 +3904,40 @@ static void test_uia_prov_from_acc_properties(void)
ShowWindow(Accessible.ow_hwnd, SW_HIDE);
set_accessible_props(&Accessible, 0, ~STATE_SYSTEM_OFFSCREEN, 0, L"Accessible", rect[0].left, rect[0].top,
(rect[0].right - rect[0].left), (rect[0].bottom - rect[0].top));
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_IsOffscreenPropertyId, &v);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(V_VT(&v) == VT_BOOL, "Unexpected VT %d\n", V_VT(&v));
ok(check_variant_bool(&v, FALSE), "Unexpected BOOL %#x\n", V_BOOL(&v));
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
/* Accessible now outside of its window's bounds. */
set_accessible_props(&Accessible, 0, ~STATE_SYSTEM_OFFSCREEN, 0, L"Accessible", rect[0].right, rect[0].bottom,
10, 10);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_IsOffscreenPropertyId, &v);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(V_VT(&v) == VT_BOOL, "V_VT(&v) = %d\n", V_VT(&v));
ok(check_variant_bool(&v, TRUE), "Unexpected BOOL %#x\n", V_BOOL(&v));
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
/* Accessible within window bounds, but not client area bounds. */
ok(GetWindowRect(Accessible.ow_hwnd, &rect[1]), "GetWindowRect returned FALSE\n");
set_accessible_props(&Accessible, 0, ~STATE_SYSTEM_OFFSCREEN, 0, L"Accessible", rect[1].left, rect[1].top,
(rect[0].left - rect[1].left) - 1, (rect[0].top - rect[1].top) - 1);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_IsOffscreenPropertyId, &v);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(V_VT(&v) == VT_BOOL, "V_VT(&v) = %d\n", V_VT(&v));
ok(check_variant_bool(&v, TRUE), "Unexpected BOOL %#x\n", V_BOOL(&v));
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
IRawElementProviderSimple_Release(elprov);
ok(Accessible.ref == 1, "Unexpected refcnt %ld\n", Accessible.ref);
......@@ -3925,24 +3948,24 @@ static void test_uia_prov_from_acc_properties(void)
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(Accessible.ref == 2, "Unexpected refcnt %ld\n", Accessible.ref);
SET_EXPECT(Accessible_get_accName);
SET_ACC_METHOD_EXPECT(&Accessible, get_accName);
VariantInit(&v);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_NamePropertyId, &v);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(V_VT(&v) == VT_BSTR, "Unexpected VT %d\n", V_VT(&v));
ok(!lstrcmpW(V_BSTR(&v), Accessible.name), "Unexpected BSTR %s\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
CHECK_CALLED(Accessible_get_accName);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accName);
/* Name is not cached. */
set_accessible_props(&Accessible, 0, 0, 0, L"Accessible2", 0, 0, 0, 0);
SET_EXPECT(Accessible_get_accName);
SET_ACC_METHOD_EXPECT(&Accessible, get_accName);
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_NamePropertyId, &v);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(V_VT(&v) == VT_BSTR, "Unexpected VT %d\n", V_VT(&v));
ok(!lstrcmpW(V_BSTR(&v), Accessible.name), "Unexpected BSTR %s\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
CHECK_CALLED(Accessible_get_accName);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accName);
IRawElementProviderSimple_Release(elprov);
ok(Accessible.ref == 1, "Unexpected refcnt %ld\n", Accessible.ref);
......@@ -4000,24 +4023,24 @@ static void test_UiaProviderFromIAccessible(void)
IAccessible_Release(acc);
/* Don't return an HWND from accNavigate or OleWindow. */
SET_EXPECT(Accessible_accNavigate);
SET_EXPECT(Accessible_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible, accNavigate);
SET_ACC_METHOD_EXPECT(&Accessible, get_accParent);
Accessible.acc_hwnd = NULL;
Accessible.ow_hwnd = NULL;
hr = pUiaProviderFromIAccessible(&Accessible.IAccessible_iface, CHILDID_SELF, UIA_PFIA_DEFAULT, &elprov);
ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr);
CHECK_CALLED(Accessible_accNavigate);
CHECK_CALLED(Accessible_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible, accNavigate);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accParent);
/* Return an HWND from accNavigate, not OleWindow. */
SET_EXPECT(Accessible_accNavigate);
SET_ACC_METHOD_EXPECT(&Accessible, accNavigate);
SET_EXPECT(winproc_GETOBJECT_CLIENT);
acc_client = &Accessible.IAccessible_iface;
Accessible.acc_hwnd = hwnd;
Accessible.ow_hwnd = NULL;
hr = pUiaProviderFromIAccessible(&Accessible.IAccessible_iface, CHILDID_SELF, UIA_PFIA_DEFAULT, &elprov);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
CHECK_CALLED(Accessible_accNavigate);
CHECK_ACC_METHOD_CALLED(&Accessible, accNavigate);
ok(Accessible.ref == 2, "Unexpected refcnt %ld\n", Accessible.ref);
IRawElementProviderSimple_Release(elprov);
ok(Accessible.ref == 1, "Unexpected refcnt %ld\n", Accessible.ref);
......@@ -4032,14 +4055,14 @@ static void test_UiaProviderFromIAccessible(void)
expect_winproc_GETOBJECT_CLIENT = FALSE;
/* Return an HWND from parent IAccessible's IOleWindow interface. */
SET_EXPECT(Accessible_child_accNavigate);
SET_EXPECT(Accessible_child_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible_child, accNavigate);
SET_ACC_METHOD_EXPECT(&Accessible_child, get_accParent);
Accessible.acc_hwnd = NULL;
Accessible.ow_hwnd = hwnd;
hr = pUiaProviderFromIAccessible(&Accessible_child.IAccessible_iface, CHILDID_SELF, UIA_PFIA_DEFAULT, &elprov);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
CHECK_CALLED(Accessible_child_accNavigate);
CHECK_CALLED(Accessible_child_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible_child, accNavigate);
CHECK_ACC_METHOD_CALLED(&Accessible_child, get_accParent);
ok(Accessible_child.ref == 2, "Unexpected refcnt %ld\n", Accessible_child.ref);
IRawElementProviderSimple_Release(elprov);
ok(Accessible_child.ref == 1, "Unexpected refcnt %ld\n", Accessible_child.ref);
......@@ -4133,21 +4156,21 @@ static void test_UiaProviderFromIAccessible(void)
ok(Accessible.ref == 2, "Unexpected refcnt %ld\n", Accessible.ref);
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_get_accRole);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_get_accChildCount);
SET_EXPECT(Accessible_accLocation);
SET_EXPECT(Accessible_get_accName);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accName);
elprov2 = (void *)0xdeadbeef;
hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &elprov2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!elprov2, "elprov != NULL\n");
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
CHECK_CALLED(Accessible_get_accRole);
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_get_accChildCount);
CHECK_CALLED(Accessible_accLocation);
CHECK_CALLED(Accessible_get_accName);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accName);
/* Second call won't send WM_GETOBJECT. */
elprov2 = (void *)0xdeadbeef;
......@@ -4202,42 +4225,42 @@ static void test_UiaProviderFromIAccessible(void)
acc_client = &Accessible2.IAccessible_iface;
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_get_accRole);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_get_accChildCount);
SET_EXPECT(Accessible_accLocation);
SET_EXPECT(Accessible_get_accName);
SET_EXPECT(Accessible2_get_accRole);
SET_EXPECT(Accessible2_get_accState);
SET_EXPECT(Accessible2_get_accChildCount);
SET_EXPECT(Accessible2_accLocation);
SET_EXPECT(Accessible2_get_accName);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accName);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible2, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accName);
/*
* The IAccessible returned by WM_GETOBJECT will be checked for an
* IAccIdentity interface to see if Dynamic Annotation properties should
* be queried. If not present on the current IAccessible, it will check
* the parent IAccessible for one.
*/
SET_EXPECT(Accessible2_QI_IAccIdentity);
SET_EXPECT(Accessible2_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible2, QI_IAccIdentity);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accParent);
elprov2 = (void *)0xdeadbeef;
hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &elprov2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elprov2, "elprov == NULL, elprov %p\n", elprov2);
ok(Accessible2.ref == 1, "Unexpected refcnt %ld\n", Accessible2.ref);
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
CHECK_CALLED(Accessible_get_accRole);
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_get_accChildCount);
CHECK_CALLED(Accessible_accLocation);
CHECK_CALLED(Accessible_get_accName);
CHECK_CALLED(Accessible2_get_accRole);
CHECK_CALLED(Accessible2_get_accState);
CHECK_CALLED(Accessible2_get_accChildCount);
CHECK_CALLED(Accessible2_accLocation);
CHECK_CALLED(Accessible2_get_accName);
todo_wine CHECK_CALLED(Accessible2_QI_IAccIdentity);
todo_wine CHECK_CALLED(Accessible2_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accName);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible2, accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accName);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, QI_IAccIdentity);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, get_accParent);
IRawElementProviderSimple_Release(elprov2);
elprov2 = (void *)0xdeadbeef;
......@@ -4267,23 +4290,23 @@ static void test_UiaProviderFromIAccessible(void)
acc_client = &Accessible2.IAccessible_iface;
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_get_accRole);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_get_accChildCount);
SET_EXPECT(Accessible2_get_accChildCount);
SET_EXPECT(Accessible_accLocation);
SET_EXPECT(Accessible_get_accName);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accName);
elprov2 = (void *)0xdeadbeef;
hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &elprov2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!elprov2, "elprov != NULL, elprov %p\n", elprov2);
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
CHECK_CALLED(Accessible_get_accRole);
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_get_accChildCount);
CHECK_CALLED(Accessible2_get_accChildCount);
CHECK_CALLED(Accessible_accLocation);
CHECK_CALLED(Accessible_get_accName);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accName);
acc_client = NULL;
elprov2 = (void *)0xdeadbeef;
......@@ -4308,19 +4331,19 @@ static void test_UiaProviderFromIAccessible(void)
acc_client = &Accessible2.IAccessible_iface;
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_get_accRole);
SET_EXPECT(Accessible2_get_accRole);
SET_EXPECT(Accessible2_QI_IAccIdentity);
SET_EXPECT(Accessible2_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible2, QI_IAccIdentity);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accParent);
elprov2 = (void *)0xdeadbeef;
hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &elprov2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!elprov2, "elprov != NULL, elprov %p\n", elprov2);
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
CHECK_CALLED(Accessible_get_accRole);
CHECK_CALLED(Accessible2_get_accRole);
todo_wine CHECK_CALLED(Accessible2_QI_IAccIdentity);
todo_wine CHECK_CALLED(Accessible2_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accRole);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, QI_IAccIdentity);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, get_accParent);
elprov2 = (void *)0xdeadbeef;
acc_client = NULL;
......@@ -4341,34 +4364,34 @@ static void test_UiaProviderFromIAccessible(void)
acc_client = &Accessible2.IAccessible_iface;
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_get_accRole);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_get_accChildCount);
SET_EXPECT(Accessible_accLocation);
SET_EXPECT(Accessible_get_accName);
SET_EXPECT(Accessible2_get_accRole);
SET_EXPECT(Accessible2_get_accState);
SET_EXPECT(Accessible2_get_accChildCount);
SET_EXPECT(Accessible2_accLocation);
SET_EXPECT(Accessible2_QI_IAccIdentity);
SET_EXPECT(Accessible2_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accName);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible2, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible2, QI_IAccIdentity);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accParent);
elprov2 = (void *)0xdeadbeef;
hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &elprov2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elprov2, "elprov == NULL, elprov %p\n", elprov2);
ok(Accessible2.ref == 1, "Unexpected refcnt %ld\n", Accessible2.ref);
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
CHECK_CALLED(Accessible_get_accRole);
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_get_accChildCount);
CHECK_CALLED(Accessible_accLocation);
CHECK_CALLED(Accessible_get_accName);
CHECK_CALLED(Accessible2_get_accRole);
CHECK_CALLED(Accessible2_get_accState);
CHECK_CALLED(Accessible2_get_accChildCount);
CHECK_CALLED(Accessible2_accLocation);
todo_wine CHECK_CALLED(Accessible2_QI_IAccIdentity);
todo_wine CHECK_CALLED(Accessible2_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accName);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible2, accLocation);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, QI_IAccIdentity);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, get_accParent);
IRawElementProviderSimple_Release(elprov2);
elprov2 = (void *)0xdeadbeef;
......@@ -4391,31 +4414,31 @@ static void test_UiaProviderFromIAccessible(void)
acc_client = &Accessible2.IAccessible_iface;
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_get_accRole);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_get_accChildCount);
SET_EXPECT(Accessible_accLocation);
SET_EXPECT(Accessible_get_accName);
SET_EXPECT(Accessible2_get_accRole);
SET_EXPECT(Accessible2_get_accState);
SET_EXPECT(Accessible2_get_accChildCount);
SET_EXPECT(Accessible2_QI_IAccIdentity);
SET_EXPECT(Accessible2_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accName);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible2, QI_IAccIdentity);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accParent);
elprov2 = (void *)0xdeadbeef;
hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &elprov2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!elprov2, "elprov != NULL, elprov %p\n", elprov2);
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
CHECK_CALLED(Accessible_get_accRole);
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_get_accChildCount);
CHECK_CALLED(Accessible_accLocation);
CHECK_CALLED(Accessible_get_accName);
CHECK_CALLED(Accessible2_get_accRole);
CHECK_CALLED(Accessible2_get_accState);
CHECK_CALLED(Accessible2_get_accChildCount);
todo_wine CHECK_CALLED(Accessible2_QI_IAccIdentity);
todo_wine CHECK_CALLED(Accessible2_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accName);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accChildCount);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, QI_IAccIdentity);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, get_accParent);
elprov2 = (void *)0xdeadbeef;
acc_client = NULL;
......@@ -4436,30 +4459,30 @@ static void test_UiaProviderFromIAccessible(void)
acc_client = &Accessible2.IAccessible_iface;
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_get_accRole);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_get_accChildCount);
SET_EXPECT(Accessible_accLocation);
SET_EXPECT(Accessible_get_accName);
SET_EXPECT(Accessible2_get_accChildCount);
SET_EXPECT(Accessible2_get_accName);
SET_EXPECT(Accessible2_QI_IAccIdentity);
SET_EXPECT(Accessible2_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accName);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accChildCount);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accName);
SET_ACC_METHOD_EXPECT(&Accessible2, QI_IAccIdentity);
SET_ACC_METHOD_EXPECT(&Accessible2, get_accParent);
elprov2 = (void *)0xdeadbeef;
hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &elprov2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!elprov2, "elprov == NULL, elprov %p\n", elprov2);
ok(Accessible2.ref == 1, "Unexpected refcnt %ld\n", Accessible2.ref);
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
CHECK_CALLED(Accessible_get_accRole);
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_get_accChildCount);
CHECK_CALLED(Accessible_accLocation);
CHECK_CALLED(Accessible_get_accName);
CHECK_CALLED(Accessible2_get_accChildCount);
CHECK_CALLED(Accessible2_get_accName);
todo_wine CHECK_CALLED(Accessible2_QI_IAccIdentity);
todo_wine CHECK_CALLED(Accessible2_get_accParent);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accName);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accChildCount);
CHECK_ACC_METHOD_CALLED(&Accessible2, get_accName);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, QI_IAccIdentity);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible2, get_accParent);
IRawElementProviderSimple_Release(elprov2);
elprov2 = (void *)0xdeadbeef;
......@@ -4487,9 +4510,9 @@ static void test_UiaProviderFromIAccessible(void)
ok(!!elfrag, "elfrag == NULL\n");
SET_EXPECT(winproc_GETOBJECT_CLIENT);
SET_EXPECT(Accessible_get_accRole);
SET_EXPECT(Accessible_get_accState);
SET_EXPECT(Accessible_accLocation);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, accLocation);
hr = IRawElementProviderFragment_get_BoundingRectangle(elfrag, &rect);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(rect.left == (double)Accessible.left, "Unexpected left value %f\n", rect.left);
......@@ -4497,20 +4520,20 @@ static void test_UiaProviderFromIAccessible(void)
ok(rect.width == (double)Accessible.width, "Unexpected width value %f\n", rect.width);
ok(rect.height == (double)Accessible.height, "Unexpected height value %f\n", rect.height);
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
CHECK_CALLED(Accessible_get_accRole);
CHECK_CALLED(Accessible_get_accState);
CHECK_CALLED(Accessible_accLocation);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, accLocation);
/* If Accessible has STATE_SYSTEM_OFFSCREEN, it will return an empty rect. */
set_accessible_props(&Accessible, ROLE_SYSTEM_DOCUMENT, STATE_SYSTEM_OFFSCREEN, 0, L"acc_name", 0, 0, 50, 50);
SET_EXPECT(Accessible_get_accState);
SET_ACC_METHOD_EXPECT(&Accessible, get_accState);
hr = IRawElementProviderFragment_get_BoundingRectangle(elfrag, &rect);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(rect.left == 0.0, "Unexpected left value %f\n", rect.left);
ok(rect.top == 0.0, "Unexpected top value %f\n", rect.top);
ok(rect.width == 0.0, "Unexpected width value %f\n", rect.width);
ok(rect.height == 0.0, "Unexpected height value %f\n", rect.height);
CHECK_CALLED(Accessible_get_accState);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accState);
IRawElementProviderFragment_Release(elfrag);
IRawElementProviderSimple_Release(elprov);
......@@ -13997,8 +14020,8 @@ static void test_default_clientside_providers(void)
acc_client = &Accessible.IAccessible_iface;
prov_root = child_win_prov_root = NULL;
SET_EXPECT(Accessible_QI_IAccIdentity);
SET_EXPECT(Accessible_get_accParent);
SET_ACC_METHOD_EXPECT(&Accessible, QI_IAccIdentity);
SET_ACC_METHOD_EXPECT(&Accessible, get_accParent);
SET_EXPECT(winproc_GETOBJECT_UiaRoot);
/* Only sent twice on Win7. */
SET_EXPECT_MULTI(winproc_GETOBJECT_CLIENT, 2);
......@@ -14006,8 +14029,8 @@ static void test_default_clientside_providers(void)
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(Provider.ref == 2, "Unexpected refcnt %ld\n", Provider.ref);
ok(Accessible.ref >= 2, "Unexpected refcnt %ld\n", Accessible.ref);
todo_wine CHECK_CALLED(Accessible_QI_IAccIdentity);
todo_wine CHECK_CALLED(Accessible_get_accParent);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible, QI_IAccIdentity);
todo_wine CHECK_ACC_METHOD_CALLED(&Accessible, get_accParent);
CHECK_CALLED(winproc_GETOBJECT_UiaRoot);
CHECK_CALLED(winproc_GETOBJECT_CLIENT);
......@@ -14019,13 +14042,13 @@ static void test_default_clientside_providers(void)
check_node_provider_desc(V_BSTR(&v), L"Main", NULL, TRUE);
VariantClear(&v);
SET_EXPECT(Accessible_get_accRole);
SET_ACC_METHOD_EXPECT(&Accessible, get_accRole);
hr = UiaGetPropertyValue(node, UIA_ControlTypePropertyId, &v);
ok(hr == S_OK, "Unexpected hr %#lx\n", hr);
ok(V_VT(&v) == VT_I4, "Unexpected VT %d\n", V_VT(&v));
ok(V_I4(&v) == UIA_EditControlTypeId, "Unexpected I4 %#lx\n", V_I4(&v));
VariantClear(&v);
CHECK_CALLED(Accessible_get_accRole);
CHECK_ACC_METHOD_CALLED(&Accessible, get_accRole);
UiaNodeRelease(node);
ok(Provider.ref == 1, "Unexpected refcnt %ld\n", Provider.ref);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment