[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