[PATCH] oleaut32: Add VarBstrFromDisp tests
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Thu May 25 18:25:17 CDT 2017
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
dlls/oleaut32/tests/vartype.c | 44 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/dlls/oleaut32/tests/vartype.c b/dlls/oleaut32/tests/vartype.c
index 0f39043..04a96c8 100644
--- a/dlls/oleaut32/tests/vartype.c
+++ b/dlls/oleaut32/tests/vartype.c
@@ -511,6 +511,7 @@ static HRESULT (WINAPI *pVarBstrFromCy)(CY,LCID,ULONG,BSTR*);
static HRESULT (WINAPI *pVarBstrFromDec)(DECIMAL*,LCID,ULONG,BSTR*);
static HRESULT (WINAPI *pVarBstrCmp)(BSTR,BSTR,LCID,ULONG);
static HRESULT (WINAPI *pVarBstrCat)(BSTR,BSTR,BSTR*);
+static HRESULT (WINAPI *pVarBstrFromDisp)(IDispatch*,LCID,ULONG,BSTR*);
static INT (WINAPI *pSystemTimeToVariantTime)(LPSYSTEMTIME,double*);
static void (WINAPI *pClearCustData)(LPCUSTDATA);
@@ -591,6 +592,7 @@ static HRESULT WINAPI DummyDispatch_Invoke(IDispatch *iface,
UINT *arg_err)
{
DummyDispatch *This = impl_from_IDispatch(iface);
+ static WCHAR value[] = {'1','0',0};
CHECK_EXPECT(dispatch_invoke);
@@ -614,6 +616,11 @@ static HRESULT WINAPI DummyDispatch_Invoke(IDispatch *iface,
V_VT(res) = This->vt;
if (This->vt == VT_UI1)
V_UI1(res) = 1;
+ else if (This->vt == VT_BSTR)
+ {
+ V_VT(res) = VT_BSTR;
+ V_BSTR(res) = SysAllocString(value);
+ }
else
memset(res, 0, sizeof(*res));
@@ -639,6 +646,13 @@ static void init_test_dispatch(LONG ref, VARTYPE vt, DummyDispatch *dispatch)
dispatch->bFailInvoke = FALSE;
}
+static int strcmp_wa(const WCHAR *strw, const char *stra)
+{
+ WCHAR buf[512];
+ MultiByteToWideChar(CP_ACP, 0, stra, -1, buf, sizeof(buf)/sizeof(buf[0]));
+ return lstrcmpW(strw, buf);
+}
+
/*
* VT_I1/VT_UI1
*/
@@ -5274,6 +5288,35 @@ static void test_VarBstrFromDec(void)
#undef BSTR_DEC64
}
+static void test_VarBstrFromDisp(void)
+{
+ DummyDispatch dispatch;
+ HRESULT hres;
+ BSTR b;
+ LCID in;
+
+ CHECKPTR(VarBstrFromDisp);
+
+ in = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT);
+
+ init_test_dispatch(1, VT_BSTR, &dispatch);
+
+ SET_EXPECT(dispatch_invoke);
+ hres = pVarBstrFromDisp(&dispatch.IDispatch_iface, in, 0, &b);
+ ok(hres == S_OK, "got 0x%08x\n", hres);
+ ok(!strcmp_wa(b, "10"), "got %s\n", wine_dbgstr_w(b));
+ SysFreeString(b);
+ CHECK_CALLED(dispatch_invoke);
+
+ init_test_dispatch(1, VT_BSTR, &dispatch);
+ dispatch.bFailInvoke = TRUE;
+
+ SET_EXPECT(dispatch_invoke);
+ hres = pVarBstrFromDisp(&dispatch.IDispatch_iface, in, 0, &b);
+ ok(hres == DISP_E_TYPEMISMATCH, "got 0x%08x\n", hres);
+ CHECK_CALLED(dispatch_invoke);
+}
+
#define _VARBSTRCMP(left,right,lcid,flags,result) \
hres = pVarBstrCmp(left,right,lcid,flags); \
ok(hres == result, "VarBstrCmp: expected " #result ", got hres=0x%x\n", hres)
@@ -6861,6 +6904,7 @@ START_TEST(vartype)
test_VarBstrFromDate();
test_VarBstrFromCy();
test_VarBstrFromDec();
+ test_VarBstrFromDisp();
test_VarBstrCmp();
test_SysStringLen();
test_SysStringByteLen();
--
1.9.1
More information about the wine-patches
mailing list