Shuai Meng : vbscript: Implemented CByte.
Alexandre Julliard
julliard at winehq.org
Wed May 14 15:39:07 CDT 2014
Module: wine
Branch: master
Commit: db42703d5ff9eb31130896c9d7d7713b8fe09d3b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=db42703d5ff9eb31130896c9d7d7713b8fe09d3b
Author: Shuai Meng <mengshuaicalendr at gmail.com>
Date: Wed May 14 23:05:02 2014 +0800
vbscript: Implemented CByte.
---
dlls/vbscript/global.c | 21 +++++++++++++++++++--
dlls/vbscript/tests/api.vbs | 44 +++++++++++++++++++++++++++++++++++++++++++
dlls/vbscript/tests/run.c | 2 ++
3 files changed, 65 insertions(+), 2 deletions(-)
diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c
index 9aeba34..484158f 100644
--- a/dlls/vbscript/global.c
+++ b/dlls/vbscript/global.c
@@ -424,8 +424,25 @@ static HRESULT Global_CBool(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VAR
static HRESULT Global_CByte(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
{
- FIXME("\n");
- return E_NOTIMPL;
+ VARIANT v;
+ HRESULT hres;
+
+ TRACE("%s\n", debugstr_variant(arg));
+
+ assert(args_cnt == 1);
+
+ V_VT(&v) = VT_EMPTY;
+ hres = VariantChangeType(&v, arg, VARIANT_LOCALBOOL, VT_UI1);
+ if(FAILED(hres))
+ return hres;
+
+ if(!res) {
+ VariantClear(&v);
+ return DISP_E_BADVARTYPE;
+ }
+
+ *res = v;
+ return S_OK;
}
static HRESULT Global_CDate(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs
index 12124b7..8197d6d 100644
--- a/dlls/vbscript/tests/api.vbs
+++ b/dlls/vbscript/tests/api.vbs
@@ -533,4 +533,48 @@ MyObject.myval = 0
Call ok(CBool(MyObject) = False, "CBool(MyObject) = " & CBool(MyObject))
Call ok(getVT(CBool(MyObject)) = "VT_BOOL", "getVT(CBool(MyObject)) = " & getVT(CBool(MyObject)))
+Sub testCByteError(strings, error_num1,error_num2)
+ on error resume next
+ Dim x
+
+ Call Err.clear()
+ x = CByte(strings)
+ Call ok(Err.number = error_num1, "Err.number = " & Err.number)
+
+ Call Err.clear()
+ Call CByte(strings)
+ Call ok(Err.number = error_num2, "Err.number = " & Err.number)
+End Sub
+
+Call ok(CByte(Empty) = 0, "CByte(Empty) = " & CByte(Empty))
+Call ok(getVT(CByte(Empty)) = "VT_UI1", "getVT(CByte(Empty)) = " & getVT(CByte(Empty)))
+Call ok(CByte(255) = 255, "CByte(255) = " & CByte(255))
+Call ok(getVT(CByte(255)) = "VT_UI1", "getVT(CByte(255)) = " & getVT(CByte(255)))
+Call ok(CByte(255.49) = 255, "CByte(255.49) = " & CByte(255.49))
+Call ok(getVT(CByte(255.49)) = "VT_UI1", "getVT(CByte(255.49)) = " & getVT(CByte(255.49)))
+Call testCByteError(1, 0, 458)
+Call testCByteError("", 13, 13)
+Call testCByteError("-1", 6, 6)
+Call testCByteError("258", 6, 6)
+Call testCByteError("TRUE", 13, 13)
+Call testCByteError("FALSE", 13, 13)
+Call testCByteError("#TRue#", 13, 13)
+Call testCByteError("#fAlSE#", 13, 13)
+If isEnglishLang Then
+ Call ok(CByte("-0.5") = 0, "CByte(""-0.5"") = " & CByte("-0.5"))
+ Call ok(getVT(CByte("-0.5")) = "VT_UI1", "getVT(CByte(""-0.5"")) = " & getVT(CByte("-0.5")))
+End If
+Call ok(CByte(True) = 255, "CByte(True) = " & CByte(True))
+Call ok(getVT(CByte(True)) = "VT_UI1", "getVT(CByte(True)) = " & getVT(CByte(True)))
+Call ok(CByte(False) = 0, "CByte(False) = " & CByte(False))
+Call ok(getVT(CByte(False)) = "VT_UI1", "getVT(CByte(False)) = " & getVT(CByte(False)))
+Call ok(CByte(MyObject) = 0, "CByte(MyObject) = " & CByte(MyObject))
+Call ok(getVT(CByte(MyObject)) = "VT_UI1", "getVT(CByte(MyObject)) = " & getVT(CByte(MyObject)))
+MyObject.myval = 1
+Call ok(CByte(MyObject) = 1, "CByte(MyObject) = " & CByte(MyObject))
+Call ok(getVT(CByte(MyObject)) = "VT_UI1", "getVT(CByte(MyObject)) = " & getVT(CByte(MyObject)))
+MyObject.myval = 0
+Call ok(CByte(MyObject) = 0, "CByte(MyObject) = " & CByte(MyObject))
+Call ok(getVT(CByte(MyObject)) = "VT_UI1", "getVT(CByte(MyObject)) = " & getVT(CByte(MyObject)))
+
Call reportSuccess()
diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c
index 53ead45..9620398 100644
--- a/dlls/vbscript/tests/run.c
+++ b/dlls/vbscript/tests/run.c
@@ -181,6 +181,8 @@ static const char *vt2a(VARIANT *v)
return "VT_ARRAY|VT_VARIANT";
case VT_ARRAY|VT_BYREF|VT_VARIANT:
return "VT_ARRAY|VT_BYREF|VT_VARIANT";
+ case VT_UI1:
+ return "VT_UI1";
default:
ok(0, "unknown vt %d\n", V_VT(v));
return NULL;
More information about the wine-cvs
mailing list