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