Jacek Caban : oleaut32: Correctly test VARIANT_BOOL value in VarCat.

Alexandre Julliard julliard at winehq.org
Tue Aug 23 12:45:11 CDT 2011


Module: wine
Branch: master
Commit: 6ee95c77381791299ae040248897ac58c74f49f6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6ee95c77381791299ae040248897ac58c74f49f6

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Aug 23 15:49:07 2011 +0200

oleaut32: Correctly test VARIANT_BOOL value in VarCat.

---

 dlls/oleaut32/tests/vartest.c |   38 ++++++++++++++++++++++++++++++++++++++
 dlls/oleaut32/variant.c       |    4 ++--
 2 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/dlls/oleaut32/tests/vartest.c b/dlls/oleaut32/tests/vartest.c
index 3032a9e..c52e3ce 100644
--- a/dlls/oleaut32/tests/vartest.c
+++ b/dlls/oleaut32/tests/vartest.c
@@ -345,6 +345,20 @@ static void test_var_call2( int line, HRESULT (WINAPI *func)(LPVARIANT,LPVARIANT
     VariantClear( &result );
 }
 
+static int strcmp_wa(const WCHAR *strw, const char *stra)
+{
+    WCHAR buf[512];
+    MultiByteToWideChar(CP_ACP, 0, stra, -1, buf, sizeof(buf));
+    return lstrcmpW(strw, buf);
+}
+
+#define test_bstr_var(a,b) _test_bstr_var(__LINE__,a,b)
+static void _test_bstr_var(unsigned line, const VARIANT *v, const char *str)
+{
+    ok_(__FILE__,line)(V_VT(v) == VT_BSTR, "unexpected vt=%d\n", V_VT(v));
+    if(V_VT(v) == VT_BSTR)
+        ok(!strcmp_wa(V_BSTR(v), str), "v=%s, expected %s\n", wine_dbgstr_w(V_BSTR(v)), str);
+}
 
 static void test_VariantInit(void)
 {
@@ -5645,6 +5659,30 @@ static void test_VarCat(void)
     VariantClear(&right);
     VariantClear(&result);
     VariantClear(&expected);
+
+    /* Test boolean conversion */
+    V_VT(&left) = VT_BOOL;
+    V_BOOL(&left) = VARIANT_TRUE;
+    V_VT(&right) = VT_BSTR;
+    V_BSTR(&right) = SysAllocStringLen(NULL,0);
+    hres = VarCat(&left, &right, &result);
+    ok(hres == S_OK, "VarCat failed: %08x\n", hres);
+    if(!strcmp_wa(V_BSTR(&result), "True")) {
+        V_VT(&right) = VT_BOOL;
+        V_BOOL(&right) = 100;
+        hres = VarCat(&left, &right, &result);
+        ok(hres == S_OK, "VarCat failed: %08x\n", hres);
+        test_bstr_var(&result, "TrueTrue");
+        VariantClear(&result);
+
+        V_BOOL(&right) = VARIANT_FALSE;
+        hres = VarCat(&left, &right, &result);
+        ok(hres == S_OK, "VarCat failed: %08x\n", hres);
+        test_bstr_var(&result, "TrueFalse");
+        VariantClear(&result);
+    }else {
+        skip("Got %s as True, assuming non-English locale\n", wine_dbgstr_w(V_BSTR(&result)));
+    }
 }
 
 static HRESULT (WINAPI *pVarAnd)(LPVARIANT,LPVARIANT,LPVARIANT);
diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c
index 60407d5..0d1f2cc 100644
--- a/dlls/oleaut32/variant.c
+++ b/dlls/oleaut32/variant.c
@@ -2624,7 +2624,7 @@ HRESULT WINAPI VarCat(LPVARIANT left, LPVARIANT right, LPVARIANT out)
             {
                 /* Bools are handled as localized True/False strings instead of 0/-1 as in MSDN */
                 V_VT(&bstrvar_left) = VT_BSTR;
-                if (V_BOOL(left) == TRUE)
+                if (V_BOOL(left))
                     V_BSTR(&bstrvar_left) = SysAllocString(str_true);
                 else
                     V_BSTR(&bstrvar_left) = SysAllocString(str_false);
@@ -2664,7 +2664,7 @@ HRESULT WINAPI VarCat(LPVARIANT left, LPVARIANT right, LPVARIANT out)
             {
                 /* Bools are handled as localized True/False strings instead of 0/-1 as in MSDN */
                 V_VT(&bstrvar_right) = VT_BSTR;
-                if (V_BOOL(right) == TRUE)
+                if (V_BOOL(right))
                     V_BSTR(&bstrvar_right) = SysAllocString(str_true);
                 else
                     V_BSTR(&bstrvar_right) = SysAllocString(str_false);




More information about the wine-cvs mailing list