[PATCH 01/10] vbscript: Fixed CBool(try 3)

Jacek Caban jacek at codeweavers.com
Mon Apr 21 04:18:02 CDT 2014


Hi Shuai,

On 04/21/14 03:45, Shuai Meng wrote:
> -
> -    return return_bool(res, val);
> +    V_VT(res) = VT_EMPTY;
> +    return VariantChangeType(res, arg, VARIANT_LOCALBOOL, VT_BOOL);

You can't assume that res is not NULL. If result of the function is not
used, it will be NULL. A simple test case is like this:

call CBool(0)

Also, are you sure we want VARIANT_LOCALBOOL here? Did you test it
(probably by running tests on localized Windows with translated string
"False")?

Looking at CBool tests:

+Call ok(CBool(Empty) = False, "CBool(Empty) = " & CBool(Empty))
+Call ok(getVT(CBool(Empty)) = "VT_BOOL", "getVT(CBool(Empty)) = " & getVT(CBool(Empty)))
+Call ok(CBool(1) = True, "CBool(1) = " & CBool(1))
+Call ok(getVT(CBool(1)) = "VT_BOOL", "getVT(CBool(1)) = " & getVT(CBool(1)))
+Call ok(CBool(CLng(0)) = False, "CBool(CLng(0)) = " & CBool(CLng(0)))
+Call ok(getVT(CBool(CLng(0))) = "VT_BOOL", "getVT(CBool(CLng(0))) = " & getVT(CBool(CLng(0))))
+Call ok(CBool(CSng(0.5)) = True, "CBool(CSng(0.5)) = " & CBool(CSng(0.5)))
+Call ok(getVT(CBool(CSng(0.5))) = "VT_BOOL", "getVT(CBool(CSng(0.5))) = " & getVT(CBool(CSng(0.5))))
+Call ok(CBool(-0.56) = True, "CBool(-0.56) = " & CBool(-0.56))
+Call ok(getVT(CBool(-0.56)) = "VT_BOOL", "getVT(CBool(-0.56)) = " & getVT(CBool(-0.56)))
+Call ok(CBool(CCur(8.55)) = True, "CBool(CCur(8.55)) = " & CBool(CCur(8.55)))
+Call ok(getVT(CBool(CCur(8.55))) = "VT_BOOL", "getVT(CBool(CCur(8.55))) = " & getVT(CBool(CCur(8.55))))
+Call ok(CBool(CDate(0)) = False, "CBool(CDate(0)) = " & CBool(CDate(0)))
+Call ok(getVT(CBool(CDate(0))) = "VT_BOOL", "getVT(CBool(CDate(0))) = " & getVT(CBool(CDate(0))))
+Call ok(CBool(CDate(3.33)) = True, "CBool(CDate(3.33)) = " & CBool(CDate(3.33)))
+Call ok(getVT(CBool(CDate(3.33))) = "VT_BOOL", "getVT(CBool(CDate(3.33))) = " & getVT(CBool(CDate(3.33))))
+Call ok(CBool("6666.78") = True, "CBool(""6666.78"") = " & CBool("6666.78"))
+Call ok(getVT(CBool("6666.78")) = "VT_BOOL", "getVT(CBool(""6666.78"")) = " & getVT(CBool("6666.78")))
+Call ok(CBool(CByte(-0.1)) = False, "CBool(CByte(-0.1)) = " & CBool(CByte(-0.1)))
+Call ok(getVT(CBool(CByte(-0.1))) = "VT_BOOL", "getVT(CBool(CByte(-0.1))) = " & getVT(CBool(CByte(-0.1))))

Those look mostly good. However I'd like to see some more tests.
Interesting case is for example empty string and a "false", "False" and
"#FALSE#" string. Also I'd really like to see tests on object default
values. See the attached patch for an example.

Those comments apply also to other patches in the series. It may be
easier to proceed if you resent just the first patch fixed and include
tests that don't depending on other patches in the series in the patch
itself.

Cheers,
Jacek
-------------- next part --------------
diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs
index 3c496b1..00787a4 100644
--- a/dlls/vbscript/tests/api.vbs
+++ b/dlls/vbscript/tests/api.vbs
@@ -433,6 +433,17 @@ Call ok(getVT(vbYes) = "VT_I2", "getVT(vbYes) = " & getVT(vbYes))
 Call ok(vbNo = 7, "vbNo = " & vbNo)
 Call ok(getVT(vbNo) = "VT_I2", "getVT(vbNo) = " & getVT(vbNo))
 
+class valclass
+    public val
+
+    public default property get defprop
+        defprop = val
+    end property
+end class
+
+dim valobj
+set valobj = new valclass
+
 Call ok(CInt(-36.75) = -37, "CInt(-36.75) = " & CInt(-36.75))
 Call ok(getVT(CInt(-36.75)) = "VT_I2", "getVT(CInt(-36.75)) = " & getVT(CInt(-36.75)))
 Call ok(CInt(-36.50) = -36, "CInt(-36.50) = " & CInt(-36.50))
@@ -464,4 +475,9 @@ Call ok(getVT(CBool(0)) = "VT_BOOL", "getVT(CBool(0)) = " & getVT(CBool(0)))
 Call ok(CBool(-5) = true, "CBool(-5) = " & CBool(-5))
 Call ok(getVT(CBool(-5)) = "VT_BOOL", "getVT(CBool(-5)) = " & getVT(CBool(-5)))
 
+valobj.val = 1
+Call ok(CBool(valobj) = true, "CBool(valobj) = " & CBool(valobj))
+valobj.val = 0
+Call ok(CBool(valobj) = false, "CBool(valobj) = " & CBool(valobj))
+
 Call reportSuccess()


More information about the wine-devel mailing list