Jacek Caban : vbscript: Added IActiveScriptParseProcedure2:: ParseProcedureText tests.

Alexandre Julliard julliard at winehq.org
Thu Sep 6 13:37:23 CDT 2012


Module: wine
Branch: master
Commit: 76b1a7e016e93eaa9f06b9a018728353da5bfd7c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=76b1a7e016e93eaa9f06b9a018728353da5bfd7c

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Sep  6 11:57:46 2012 +0200

vbscript: Added IActiveScriptParseProcedure2::ParseProcedureText tests.

---

 dlls/vbscript/tests/run.c |  162 +++++++++++++++++++++++++++++++++++++++------
 1 files changed, 141 insertions(+), 21 deletions(-)

diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c
index d77c6cb..6a2b72a 100644
--- a/dlls/vbscript/tests/run.c
+++ b/dlls/vbscript/tests/run.c
@@ -33,6 +33,8 @@
 #define IActiveScriptParse_Release IActiveScriptParse64_Release
 #define IActiveScriptParse_InitNew IActiveScriptParse64_InitNew
 #define IActiveScriptParse_ParseScriptText IActiveScriptParse64_ParseScriptText
+#define IActiveScriptParseProcedure2_Release IActiveScriptParseProcedure2_64_Release
+#define IActiveScriptParseProcedure2_ParseProcedureText IActiveScriptParseProcedure2_64_ParseProcedureText
 
 #else
 
@@ -40,6 +42,8 @@
 #define IActiveScriptParse_Release IActiveScriptParse32_Release
 #define IActiveScriptParse_InitNew IActiveScriptParse32_InitNew
 #define IActiveScriptParse_ParseScriptText IActiveScriptParse32_ParseScriptText
+#define IActiveScriptParseProcedure2_Release IActiveScriptParseProcedure2_32_Release
+#define IActiveScriptParseProcedure2_ParseProcedureText IActiveScriptParseProcedure2_32_ParseProcedureText
 
 #endif
 
@@ -106,6 +110,7 @@ DEFINE_EXPECT(Next);
 #define DISPID_COLLOBJ_RESET        3000
 
 static const WCHAR testW[] = {'t','e','s','t',0};
+static const WCHAR emptyW[] = {0};
 
 static BOOL strict_dispid_check, is_english;
 static const char *test_name = "(null)";
@@ -130,6 +135,18 @@ static int strcmp_wa(LPCWSTR strw, const char *stra)
     return lstrcmpA(buf, stra);
 }
 
+static const char *debugstr_guid(REFIID riid)
+{
+    static char buf[50];
+
+    sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
+            riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
+            riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
+            riid->Data4[5], riid->Data4[6], riid->Data4[7]);
+
+    return buf;
+}
+
 static const char *vt2a(VARIANT *v)
 {
     if(V_VT(v) == (VT_BYREF|VT_VARIANT)) {
@@ -186,6 +203,38 @@ static BOOL is_lang_english(void)
     return PRIMARYLANGID(GetUserDefaultLangID()) == LANG_ENGLISH;
 }
 
+static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
+{
+    ok(0, "unexpected call\n");
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface)
+{
+    return 2;
+}
+
+static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface)
+{
+    return 1;
+}
+
+static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService,
+        REFIID riid, void **ppv)
+{
+    ok(0, "unexpected service %s\n", debugstr_guid(guidService));
+    return E_NOINTERFACE;
+}
+
+static const IServiceProviderVtbl ServiceProviderVtbl = {
+    ServiceProvider_QueryInterface,
+    ServiceProvider_AddRef,
+    ServiceProvider_Release,
+    ServiceProvider_QueryService
+};
+
+static IServiceProvider caller_sp = { &ServiceProviderVtbl };
+
 static void test_disp(IDispatch *disp)
 {
     DISPID id, public_prop_id, public_prop2_id, public_func_id, public_sub_id, defvalget_id;
@@ -378,18 +427,6 @@ static void _test_grfdex(unsigned line, DWORD grfdex, DWORD expect)
     ok_(__FILE__,line)(grfdex == expect, "grfdex = %x, expected %x\n", grfdex, expect);
 }
 
-static const char *debugstr_guid(REFIID riid)
-{
-    static char buf[50];
-
-    sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
-            riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
-            riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
-            riid->Data4[5], riid->Data4[6], riid->Data4[7]);
-
-    return buf;
-}
-
 static IDispatchEx enumDisp;
 
 static HRESULT WINAPI EnumVARIANT_QueryInterface(IEnumVARIANT *iface, REFIID riid, void **ppv)
@@ -1240,29 +1277,24 @@ static IActiveScript *create_script(void)
     return script;
 }
 
-static HRESULT parse_script(DWORD flags, BSTR script_str)
+static IActiveScript *create_and_init_script(DWORD flags)
 {
     IActiveScriptParse *parser;
     IActiveScript *engine;
-    IDispatch *script_disp;
-    LONG ref;
     HRESULT hres;
 
     engine = create_script();
     if(!engine)
-        return S_OK;
+        return NULL;
 
     hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptParse, (void**)&parser);
     ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
-    if (FAILED(hres))
-    {
-        IActiveScript_Release(engine);
-        return hres;
-    }
 
     hres = IActiveScriptParse_InitNew(parser);
     ok(hres == S_OK, "InitNew failed: %08x\n", hres);
 
+    IActiveScriptParse_Release(parser);
+
     hres = IActiveScript_SetScriptSite(engine, &ActiveScriptSite);
     ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
 
@@ -1273,6 +1305,41 @@ static HRESULT parse_script(DWORD flags, BSTR script_str)
     hres = IActiveScript_SetScriptState(engine, SCRIPTSTATE_STARTED);
     ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08x\n", hres);
 
+    return engine;
+}
+
+static void close_script(IActiveScript *script)
+{
+    ULONG ref;
+    HRESULT hres;
+
+    hres = IActiveScript_Close(script);
+    ok(hres == S_OK, "Close failed: %08x\n", hres);
+
+    ref = IActiveScript_Release(script);
+    ok(!ref, "ref=%u\n", ref);
+}
+
+static HRESULT parse_script(DWORD flags, BSTR script_str)
+{
+    IActiveScriptParse *parser;
+    IActiveScript *engine;
+    IDispatch *script_disp;
+    LONG ref;
+    HRESULT hres;
+
+    engine = create_and_init_script(flags);
+    if(!engine)
+        return S_OK;
+
+    hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptParse, (void**)&parser);
+    ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
+    if (FAILED(hres))
+    {
+        IActiveScript_Release(engine);
+        return hres;
+    }
+
     hres = IActiveScript_GetScriptDispatch(engine, NULL, &script_disp);
     ok(hres == S_OK, "GetScriptDispatch failed: %08x\n", hres);
     ok(script_disp != NULL, "script_disp == NULL\n");
@@ -1308,6 +1375,58 @@ static void parse_script_a(const char *src)
     parse_script_af(SCRIPTITEM_GLOBALMEMBERS, src);
 }
 
+static IDispatchEx *parse_procedure(IActiveScriptParseProcedure2 *parse_proc, const char *src)
+{
+    IDispatchEx *dispex;
+    IDispatch *disp;
+    BSTR str;
+    HRESULT hres;
+
+    static const WCHAR delimiterW[] = {'\"',0};
+
+    str = a2bstr(src);
+    hres = IActiveScriptParseProcedure2_ParseProcedureText(parse_proc, str, NULL, emptyW, NULL, NULL, delimiterW, 0, 0,
+            SCRIPTPROC_HOSTMANAGESSOURCE|SCRIPTPROC_IMPLICIT_THIS|SCRIPTPROC_IMPLICIT_PARENTS, &disp);
+    SysFreeString(str);
+    ok(hres == S_OK, "ParseProcedureText failed: %08x\n", hres);
+    ok(disp != NULL, "disp = NULL\n");
+
+    hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
+    IDispatch_Release(disp);
+    ok(hres == S_OK, "Could not get IDispatchEx iface: %08x\n", hres);
+
+    return dispex;
+}
+
+
+static void test_procedures(void)
+{
+    IActiveScriptParseProcedure2 *parse_proc;
+    DISPPARAMS dp = {NULL};
+    IActiveScript *script;
+    IDispatchEx *proc;
+    EXCEPINFO ei = {0};
+    VARIANT v;
+    HRESULT hres;
+
+    script = create_and_init_script(0);
+
+    hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParseProcedure2, (void**)&parse_proc);
+    ok(hres == S_OK, "Could not get IActiveScriptParseProcedure2 iface: %08x\n", hres);
+
+    proc = parse_procedure(parse_proc, "dim x\nif true then x=false");
+
+    V_VT(&v) = VT_EMPTY;
+    hres = IDispatchEx_InvokeEx(proc, DISPID_VALUE, 0, DISPATCH_METHOD, &dp, &v, &ei, &caller_sp);
+    ok(hres == S_OK, "InvokeEx failed: %08x\n", hres);
+
+    IDispatchEx_Release(proc);
+
+    IActiveScriptParseProcedure2_Release(parse_proc);
+
+    close_script(script);
+}
+
 static void test_gc(void)
 {
     IActiveScriptParse *parser;
@@ -1609,6 +1728,7 @@ static void run_tests(void)
     run_from_res("lang.vbs");
     run_from_res("api.vbs");
 
+    test_procedures();
     test_gc();
 }
 




More information about the wine-cvs mailing list