Jacek Caban : vbscript: Added MsgBox tests.

Alexandre Julliard julliard at winehq.org
Wed Sep 26 14:06:51 CDT 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Sep 26 14:36:58 2012 +0200

vbscript: Added MsgBox tests.

---

 dlls/vbscript/tests/run.c |  152 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 151 insertions(+), 1 deletions(-)

diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c
index 9c3725b..ae590bf 100644
--- a/dlls/vbscript/tests/run.c
+++ b/dlls/vbscript/tests/run.c
@@ -73,6 +73,9 @@ extern const CLSID CLSID_VBScript;
         expect_ ## func = called_ ## func = FALSE; \
     }while(0)
 
+#define CLEAR_CALLED(func) \
+    expect_ ## func = called_ ## func = FALSE
+
 DEFINE_EXPECT(global_success_d);
 DEFINE_EXPECT(global_success_i);
 DEFINE_EXPECT(global_vbvar_d);
@@ -87,6 +90,9 @@ DEFINE_EXPECT(global_propargput1_d);
 DEFINE_EXPECT(global_propargput1_i);
 DEFINE_EXPECT(collectionobj_newenum_i);
 DEFINE_EXPECT(Next);
+DEFINE_EXPECT(GetWindow);
+DEFINE_EXPECT(GetUIBehavior);
+DEFINE_EXPECT(EnableModeless);
 
 #define DISPID_GLOBAL_REPORTSUCCESS 1000
 #define DISPID_GLOBAL_TRACE         1001
@@ -112,9 +118,10 @@ DEFINE_EXPECT(Next);
 static const WCHAR testW[] = {'t','e','s','t',0};
 static const WCHAR emptyW[] = {0};
 
-static BOOL strict_dispid_check, is_english;
+static BOOL strict_dispid_check, is_english, allow_ui;
 static const char *test_name = "(null)";
 static int test_counter;
+static SCRIPTUICHANDLING uic_handling = SCRIPTUICHANDLING_NOUIERROR;
 
 static BSTR a2bstr(const char *str)
 {
@@ -1178,6 +1185,86 @@ static IDispatchExVtbl GlobalVtbl = {
 
 static IDispatchEx Global = { &GlobalVtbl };
 
+static HRESULT WINAPI ActiveScriptSiteWindow_QueryInterface(IActiveScriptSiteWindow *iface, REFIID riid, void **ppv)
+{
+    ok(0, "unexpected call\n");
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ActiveScriptSiteWindow_AddRef(IActiveScriptSiteWindow *iface)
+{
+    return 2;
+}
+
+static ULONG WINAPI ActiveScriptSiteWindow_Release(IActiveScriptSiteWindow *iface)
+{
+    return 1;
+}
+
+static HRESULT WINAPI ActiveScriptSiteWindow_GetWindow(IActiveScriptSiteWindow *iface, HWND *phwnd)
+{
+    if(!allow_ui)
+        CHECK_EXPECT(GetWindow);
+    *phwnd = NULL;
+    return S_OK;
+}
+
+static HRESULT WINAPI ActiveScriptSiteWindow_EnableModeless(IActiveScriptSiteWindow *iface, BOOL fEnable)
+{
+    if(allow_ui)
+        return S_OK;
+
+    CHECK_EXPECT(EnableModeless);
+    ok(!fEnable, "fEnable = %x\n", fEnable);
+    return E_FAIL;
+}
+
+static const IActiveScriptSiteWindowVtbl ActiveScriptSiteWindowVtbl = {
+    ActiveScriptSiteWindow_QueryInterface,
+    ActiveScriptSiteWindow_AddRef,
+    ActiveScriptSiteWindow_Release,
+    ActiveScriptSiteWindow_GetWindow,
+    ActiveScriptSiteWindow_EnableModeless
+};
+
+static IActiveScriptSiteWindow ActiveScriptSiteWindow = { &ActiveScriptSiteWindowVtbl };
+
+static HRESULT WINAPI ActiveScriptSiteUIControl_QueryInterface(IActiveScriptSiteUIControl *iface, REFIID riid, void **ppv)
+{
+    ok(0, "unexpected call\n");
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ActiveScriptSiteUIControl_AddRef(IActiveScriptSiteUIControl *iface)
+{
+    return 2;
+}
+
+static ULONG WINAPI ActiveScriptSiteUIControl_Release(IActiveScriptSiteUIControl *iface)
+{
+    return 1;
+}
+
+static HRESULT WINAPI ActiveScriptSiteUIControl_GetUIBehavior(IActiveScriptSiteUIControl *iface, SCRIPTUICITEM UicItem,
+        SCRIPTUICHANDLING *pUicHandling)
+{
+    if(!allow_ui) {
+        CHECK_EXPECT(GetUIBehavior);
+        ok(UicItem == SCRIPTUICITEM_MSGBOX, "UidItem = %d\n", UicItem);
+    }
+    *pUicHandling = uic_handling;
+    return S_OK;
+}
+
+static const IActiveScriptSiteUIControlVtbl ActiveScriptSiteUIControlVtbl = {
+    ActiveScriptSiteUIControl_QueryInterface,
+    ActiveScriptSiteUIControl_AddRef,
+    ActiveScriptSiteUIControl_Release,
+    ActiveScriptSiteUIControl_GetUIBehavior
+};
+
+static IActiveScriptSiteUIControl ActiveScriptSiteUIControl = { &ActiveScriptSiteUIControlVtbl };
+
 static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface, REFIID riid, void **ppv)
 {
     *ppv = NULL;
@@ -1186,6 +1273,10 @@ static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface,
         *ppv = iface;
     else if(IsEqualGUID(&IID_IActiveScriptSite, riid))
         *ppv = iface;
+    else if(IsEqualGUID(&IID_IActiveScriptSiteWindow, riid))
+        *ppv = &ActiveScriptSiteWindow;
+    else if(IsEqualGUID(&IID_IActiveScriptSiteUIControl, riid))
+        *ppv = &ActiveScriptSiteUIControl;
     else
         return E_NOINTERFACE;
 
@@ -1376,6 +1467,17 @@ static void parse_script_af(DWORD flags, const char *src)
     ok(hres == S_OK, "parse_script failed: %08x\n", hres);
 }
 
+static HRESULT parse_script_ar(const char *src)
+{
+    BSTR tmp;
+    HRESULT hres;
+
+    tmp = a2bstr(src);
+    hres = parse_script(SCRIPTITEM_GLOBALMEMBERS, tmp);
+    SysFreeString(tmp);
+    return hres;
+}
+
 static void parse_script_a(const char *src)
 {
     parse_script_af(SCRIPTITEM_GLOBALMEMBERS, src);
@@ -1488,6 +1590,51 @@ static void test_gc(void)
     IActiveScriptParse_Release(parser);
 }
 
+static void test_msgbox(void)
+{
+    HRESULT hres;
+
+    uic_handling = SCRIPTUICHANDLING_NOUIDEFAULT;
+
+    SET_EXPECT(GetUIBehavior);
+    SET_EXPECT(GetWindow);
+    SET_EXPECT(EnableModeless);
+    hres = parse_script_ar("MsgBox \"testing...\"");
+    CLEAR_CALLED(GetUIBehavior);
+    CLEAR_CALLED(GetWindow);
+    CLEAR_CALLED(EnableModeless);
+    if(FAILED(hres)) {
+        win_skip("Skipping MsgBox tests, broken (probably too old) vbscript\n");
+        return;
+    }
+
+    SET_EXPECT(GetUIBehavior);
+    parse_script_a("dim r\n r=MsgBox(\"testing...\")\n Call ok(r=0, \"r=\"&r)");
+    CHECK_CALLED(GetUIBehavior);
+
+    SET_EXPECT(GetUIBehavior);
+    parse_script_a("MsgBox 10");
+    CHECK_CALLED(GetUIBehavior);
+
+    uic_handling = SCRIPTUICHANDLING_ALLOW;
+
+    SET_EXPECT(GetUIBehavior);
+    SET_EXPECT(GetWindow);
+    SET_EXPECT(EnableModeless);
+    hres = parse_script_ar("MsgBox \"testing...\"");
+    ok(FAILED(hres), "script not failed\n");
+    CHECK_CALLED(GetUIBehavior);
+    CHECK_CALLED(GetWindow);
+    CHECK_CALLED(EnableModeless);
+
+    uic_handling = SCRIPTUICHANDLING_NOUIERROR;
+
+    SET_EXPECT(GetUIBehavior);
+    hres = parse_script_ar("MsgBox \"testing...\"");
+    ok(FAILED(hres), "script not failed\n");
+    CHECK_CALLED(GetUIBehavior);
+}
+
 static HRESULT test_global_vars_ref(BOOL use_close)
 {
     IActiveScriptParse *parser;
@@ -1736,6 +1883,7 @@ static void run_tests(void)
 
     test_procedures();
     test_gc();
+    test_msgbox();
 }
 
 static BOOL check_vbscript(void)
@@ -1767,6 +1915,8 @@ START_TEST(run)
     if(!check_vbscript()) {
         win_skip("Broken engine, probably too old\n");
     }else if(argc > 2) {
+        allow_ui = TRUE;
+        uic_handling = SCRIPTUICHANDLING_ALLOW;
         run_from_file(argv[2]);
     }else {
         run_tests();




More information about the wine-cvs mailing list