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