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