Module: wine Branch: master Commit: 9848d6be2ed2e3be4e7ce3ac07c5b96586614591 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9848d6be2ed2e3be4e7ce3ac07...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Sep 15 14:19:19 2011 +0200
vbscript: Added interp_nothing implementation and tests.
---
dlls/vbscript/interp.c | 9 +++++++-- dlls/vbscript/tests/lang.vbs | 5 +++++ dlls/vbscript/tests/run.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c index 4094ac1..f8e0011 100644 --- a/dlls/vbscript/interp.c +++ b/dlls/vbscript/interp.c @@ -599,8 +599,13 @@ static HRESULT interp_null(exec_ctx_t *ctx)
static HRESULT interp_nothing(exec_ctx_t *ctx) { - FIXME("\n"); - return E_NOTIMPL; + VARIANT v; + + TRACE("\n"); + + V_VT(&v) = VT_DISPATCH; + V_DISPATCH(&v) = NULL; + return stack_push(ctx, &v); }
static HRESULT interp_not(exec_ctx_t *ctx) diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs index c89009b..a94b2cd 100644 --- a/dlls/vbscript/tests/lang.vbs +++ b/dlls/vbscript/tests/lang.vbs @@ -71,9 +71,14 @@ Call ok(getVT(1 & 100000) = "VT_BSTR", "getVT(1 & 100000) is not VT_BSTR") Call ok(getVT(-empty) = "VT_I2", "getVT(-empty) = " & getVT(-empty)) Call ok(getVT(-null) = "VT_NULL", "getVT(-null) = " & getVT(-null)) Call ok(getVT(y) = "VT_EMPTY*", "getVT(y) = " & getVT(y)) +Call ok(getVT(nothing) = "VT_DISPATCH", "getVT(nothing) = " & getVT(nothing)) +set x = nothing +Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=nothing) = " & getVT(x)) x = true Call ok(getVT(x) = "VT_BOOL*", "getVT(x) = " & getVT(x))
+Call ok(isNullDisp(nothing), "nothing is not nulldisp?") + x = "xx" Call ok("ab" & "cd" = "abcd", """ab"" & ""cd"" <> ""abcd""") Call ok("ab " & null = "ab ", """ab"" & null = " & ("ab " & null)) diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c index aa2e3f1..4281b16 100644 --- a/dlls/vbscript/tests/run.c +++ b/dlls/vbscript/tests/run.c @@ -70,6 +70,7 @@ DEFINE_EXPECT(testobj_propput_i); #define DISPID_GLOBAL_ISENGLOC 1004 #define DISPID_GLOBAL_VBVAR 1005 #define DISPID_GLOBAL_TESTOBJ 1006 +#define DISPID_GLOBAL_ISNULLDISP 1007
#define DISPID_TESTOBJ_PROPPUT 2001
@@ -329,6 +330,12 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD *pid = DISPID_GLOBAL_VBVAR; return S_OK; } + if(!strcmp_wa(bstrName, "isNullDisp")) { + test_grfdex(grfdex, fdexNameCaseInsensitive); + *pid = DISPID_GLOBAL_ISNULLDISP; + return S_OK; + } +
if(strict_dispid_check && strcmp_wa(bstrName, "x")) ok(0, "unexpected call %s %x\n", wine_dbgstr_w(bstrName), grfdex); @@ -459,6 +466,28 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, V_VT(pvarRes) = VT_DISPATCH; V_DISPATCH(pvarRes) = (IDispatch*)&testObj; return S_OK; + + case DISPID_GLOBAL_ISNULLDISP: { + VARIANT *v; + + ok(wFlags == (INVOKE_FUNC|INVOKE_PROPERTYGET), "wFlags = %x\n", wFlags); + ok(pdp != NULL, "pdp == NULL\n"); + ok(pdp->rgvarg != NULL, "rgvarg == NULL\n"); + ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n"); + ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs); + ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs); + ok(pvarRes != NULL, "pvarRes == NULL\n"); + ok(pei != NULL, "pei == NULL\n"); + + v = pdp->rgvarg; + if(V_VT(v) == (VT_VARIANT|VT_BYREF)) + v = V_VARIANTREF(v); + + ok(V_VT(v) == VT_DISPATCH, "V_VT(psp->rgvargs) = %d\n", V_VT(pdp->rgvarg)); + V_VT(pvarRes) = VT_BOOL; + V_BOOL(pvarRes) = V_DISPATCH(v) ? VARIANT_FALSE : VARIANT_TRUE; + return S_OK; + } }
ok(0, "unexpected call %d\n", id);