[PATCH v3 5/5] vbscript/tests: Add tests for named item script dispatches.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Wed Feb 5 10:38:47 CST 2020
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/vbscript/tests/vbscript.c | 158 ++++++++++++++++++++++++++++++---
1 file changed, 144 insertions(+), 14 deletions(-)
diff --git a/dlls/vbscript/tests/vbscript.c b/dlls/vbscript/tests/vbscript.c
index 10af993..d2e7e81 100644
--- a/dlls/vbscript/tests/vbscript.c
+++ b/dlls/vbscript/tests/vbscript.c
@@ -93,6 +93,7 @@ DEFINE_EXPECT(OnStateChange_CONNECTED);
DEFINE_EXPECT(OnStateChange_DISCONNECTED);
DEFINE_EXPECT(OnStateChange_CLOSED);
DEFINE_EXPECT(OnStateChange_INITIALIZED);
+DEFINE_EXPECT(OnScriptError);
DEFINE_EXPECT(OnEnterScript);
DEFINE_EXPECT(OnLeaveScript);
DEFINE_EXPECT(GetItemInfo_global);
@@ -174,9 +175,12 @@ static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOL
LCID lcid, DISPID *ids)
{
ok(name_cnt == 1, "name_cnt = %u\n", name_cnt);
- ok(!wcscmp(names[0], L"testCall"), "names[0] = %s\n", wine_dbgstr_w(names[0]));
*ids = 1;
- return S_OK;
+ if (!wcscmp(names[0], L"testCall"))
+ return S_OK;
+
+ ok(!wcscmp(names[0], L"testSub_global"), "names[0] = %s\n", wine_dbgstr_w(names[0]));
+ return DISP_E_UNKNOWNNAME;
}
static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID id, REFIID riid, LCID lcid, WORD flags,
@@ -308,7 +312,7 @@ static HRESULT WINAPI ActiveScriptSite_OnStateChange(IActiveScriptSite *iface, S
static HRESULT WINAPI ActiveScriptSite_OnScriptError(IActiveScriptSite *iface, IActiveScriptError *pscripterror)
{
- ok(0, "unexpected call\n");
+ CHECK_EXPECT(OnScriptError);
return E_NOTIMPL;
}
@@ -431,14 +435,14 @@ static void test_safety(IActiveScript *script)
IObjectSafety_Release(safety);
}
-static IDispatchEx *get_script_dispatch(IActiveScript *script)
+static IDispatchEx *get_script_dispatch(IActiveScript *script, const WCHAR *item_name)
{
IDispatchEx *dispex;
IDispatch *disp;
HRESULT hres;
disp = (void*)0xdeadbeef;
- hres = IActiveScript_GetScriptDispatch(script, NULL, &disp);
+ hres = IActiveScript_GetScriptDispatch(script, item_name, &disp);
ok(hres == S_OK, "GetScriptDispatch failed: %08x\n", hres);
if(FAILED(hres))
return NULL;
@@ -531,7 +535,7 @@ static void test_scriptdisp(void)
ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
CHECK_CALLED(GetLCID);
- script_disp2 = get_script_dispatch(vbscript);
+ script_disp2 = get_script_dispatch(vbscript, NULL);
test_state(vbscript, SCRIPTSTATE_UNINITIALIZED);
@@ -549,7 +553,7 @@ static void test_scriptdisp(void)
test_state(vbscript, SCRIPTSTATE_CONNECTED);
- script_disp = get_script_dispatch(vbscript);
+ script_disp = get_script_dispatch(vbscript, NULL);
ok(script_disp == script_disp2, "script_disp != script_disp2\n");
IDispatchEx_Release(script_disp2);
@@ -676,7 +680,7 @@ static void test_code_persistence(void)
ok(hr == S_OK, "ParseScriptText failed: %08x\n", hr);
/* Pending code does not add identifiers to the global scope */
- script_disp = get_script_dispatch(vbscript);
+ script_disp = get_script_dispatch(vbscript, NULL);
id = 0;
get_disp_id(script_disp, "x", DISP_E_UNKNOWNNAME, &id);
ok(id == -1, "id = %d, expected -1\n", id);
@@ -715,7 +719,7 @@ static void test_code_persistence(void)
CHECK_CALLED_MULTI(OnLeaveScript, 2);
test_state(vbscript, SCRIPTSTATE_CONNECTED);
- script_disp = get_script_dispatch(vbscript);
+ script_disp = get_script_dispatch(vbscript, NULL);
id = 0;
get_disp_id(script_disp, "x", DISP_E_UNKNOWNNAME, &id);
ok(id == -1, "id = %d, expected -1\n", id);
@@ -761,7 +765,7 @@ static void test_code_persistence(void)
CHECK_CALLED(GetLCID);
CHECK_CALLED(OnStateChange_INITIALIZED);
- script_disp = get_script_dispatch(vbscript);
+ script_disp = get_script_dispatch(vbscript, NULL);
id = 0;
get_disp_id(script_disp, "z", DISP_E_UNKNOWNNAME, &id);
ok(id == -1, "id = %d, expected -1\n", id);
@@ -777,7 +781,7 @@ static void test_code_persistence(void)
CHECK_CALLED(OnLeaveScript);
test_state(vbscript, SCRIPTSTATE_CONNECTED);
- script_disp = get_script_dispatch(vbscript);
+ script_disp = get_script_dispatch(vbscript, NULL);
id = 0;
get_disp_id(script_disp, "z", S_OK, &id);
ok(id != -1, "id = -1\n");
@@ -840,7 +844,7 @@ static void test_code_persistence(void)
CHECK_CALLED(OnStateChange_CONNECTED);
test_state(vbscript, SCRIPTSTATE_CONNECTED);
- script_disp = get_script_dispatch(vbscript);
+ script_disp = get_script_dispatch(vbscript, NULL);
id = 0;
get_disp_id(script_disp, "y", DISP_E_UNKNOWNNAME, &id);
ok(id == -1, "id = %d, expected -1\n", id);
@@ -953,7 +957,7 @@ static void test_script_typeinfo(void)
"implicit = 10\n"
"dim obj\nset obj = new C\n");
- script_disp = get_script_dispatch(vbscript);
+ script_disp = get_script_dispatch(vbscript, NULL);
hr = IDispatchEx_QueryInterface(script_disp, &IID_ITypeInfo, (void**)&typeinfo);
ok(hr == E_NOINTERFACE, "QueryInterface(IID_ITypeInfo) returned: %08x\n", hr);
hr = IDispatchEx_GetTypeInfo(script_disp, 1, LOCALE_USER_DEFAULT, &typeinfo);
@@ -1446,7 +1450,7 @@ static void test_vbscript_uninitializing(void)
test_state(script, SCRIPTSTATE_CONNECTED);
- dispex = get_script_dispatch(script);
+ dispex = get_script_dispatch(script, NULL);
ok(dispex != NULL, "dispex == NULL\n");
if(dispex)
IDispatchEx_Release(dispex);
@@ -1702,8 +1706,11 @@ static void test_vbscript_initializing(void)
static void test_named_items(void)
{
+ IDispatchEx *script_disp, *script_disp2;
IActiveScriptParse *parse;
IActiveScript *script;
+ IDispatch *disp;
+ DISPID id;
ULONG ref;
HRESULT hres;
@@ -1718,6 +1725,8 @@ static void test_named_items(void)
ok(hres == E_UNEXPECTED, "AddNamedItem returned: %08x\n", hres);
hres = IActiveScript_AddNamedItem(script, L"globalItem", SCRIPTITEM_GLOBALMEMBERS);
ok(hres == E_UNEXPECTED, "AddNamedItem returned: %08x\n", hres);
+ hres = IActiveScript_AddNamedItem(script, L"code context", SCRIPTITEM_CODEONLY);
+ ok(hres == E_UNEXPECTED, "AddNamedItem returned: %08x\n", hres);
SET_EXPECT(GetLCID);
hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
@@ -1731,10 +1740,19 @@ static void test_named_items(void)
hres = IActiveScript_AddNamedItem(script, L"visibleItem", SCRIPTITEM_ISVISIBLE);
ok(hres == S_OK, "AddNamedItem failed: %08x\n", hres);
+ hres = IActiveScript_AddNamedItem(script, L"code context", SCRIPTITEM_CODEONLY);
+ ok(hres == S_OK, "AddNamedItem failed: %08x\n", hres);
ok(global_named_item_ref > 0, "global_named_item_ref = %u\n", global_named_item_ref);
ok(visible_named_item_ref == 0, "visible_named_item_ref = %u\n", visible_named_item_ref);
+ hres = IActiveScript_GetScriptDispatch(script, L"no context", &disp);
+ ok(hres == E_INVALIDARG, "GetScriptDispatch returned: %08x\n", hres);
+
+ script_disp = get_script_dispatch(script, NULL);
+ script_disp2 = get_script_dispatch(script, L"code CONTEXT");
+ ok(script_disp != script_disp2, "get_script_dispatch returned same dispatch objects.\n");
+
SET_EXPECT(OnStateChange_INITIALIZED);
hres = IActiveScriptParse_InitNew(parse);
ok(hres == S_OK, "InitNew failed: %08x\n", hres);
@@ -1762,6 +1780,118 @@ static void test_named_items(void)
parse_script(parse, "visibleItem.testCall\n");
CHECK_CALLED(testCall);
+ hres = IActiveScriptParse_ParseScriptText(parse, L"sub testSub\nend sub\n", L"no context", NULL, NULL, 0, 0, 0, NULL, NULL);
+ ok(hres == E_INVALIDARG, "ParseScriptText returned: %08x\n", hres);
+ SET_EXPECT(OnEnterScript);
+ SET_EXPECT(OnLeaveScript);
+ hres = IActiveScriptParse_ParseScriptText(parse, L"sub testSub_global\nend sub\n", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
+ ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
+ CHECK_CALLED(OnEnterScript);
+ CHECK_CALLED(OnLeaveScript);
+ SET_EXPECT(OnEnterScript);
+ SET_EXPECT(OnLeaveScript);
+ hres = IActiveScriptParse_ParseScriptText(parse, L"sub testSub\nend sub\n", L"code context", NULL, NULL, 0, 0, 0, NULL, NULL);
+ ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
+ CHECK_CALLED(OnEnterScript);
+ CHECK_CALLED(OnLeaveScript);
+ SET_EXPECT(OnEnterScript);
+ SET_EXPECT(OnLeaveScript);
+ hres = IActiveScriptParse_ParseScriptText(parse, L"sub testSub2\nend sub\n", L"Code Context", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
+ ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
+ CHECK_CALLED(OnEnterScript);
+ CHECK_CALLED(OnLeaveScript);
+
+ id = 0;
+ get_disp_id(script_disp, "testSub", DISP_E_UNKNOWNNAME, &id);
+ ok(id == -1, "id = %d, expected -1\n", id);
+ id = 0;
+ get_disp_id(script_disp, "testSub_global", S_OK, &id);
+ ok(id != -1, "id = -1\n");
+ id = 0;
+ get_disp_id(script_disp2, "testSub_global", DISP_E_UNKNOWNNAME, &id);
+ ok(id == -1, "id = %d, expected -1\n", id);
+ id = 0;
+ get_disp_id(script_disp2, "testSub", S_OK, &id);
+ ok(id != -1, "id = -1\n");
+ id = 0;
+ get_disp_id(script_disp2, "testSub2", S_OK, &id);
+ ok(id != -1, "id = -1\n");
+
+ SET_EXPECT(OnEnterScript);
+ SET_EXPECT(OnLeaveScript);
+ hres = IActiveScriptParse_ParseScriptText(parse, L"testSub_global\n", L"code context", NULL, NULL, 0, 0, 0, NULL, NULL);
+ ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
+ CHECK_CALLED(OnEnterScript);
+ CHECK_CALLED(OnLeaveScript);
+ SET_EXPECT(OnScriptError);
+ SET_EXPECT(OnEnterScript);
+ SET_EXPECT(OnLeaveScript);
+ hres = IActiveScriptParse_ParseScriptText(parse, L"testSub_global = 10\n", L"code context", NULL, NULL, 0, 0, 0, NULL, NULL);
+ ok(FAILED(hres), "ParseScriptText returned: %08x\n", hres);
+ CHECK_CALLED(OnScriptError);
+ CHECK_CALLED(OnEnterScript);
+ CHECK_CALLED(OnLeaveScript);
+
+ IDispatchEx_Release(script_disp2);
+ IDispatchEx_Release(script_disp);
+
+ SET_EXPECT(OnStateChange_DISCONNECTED);
+ SET_EXPECT(OnStateChange_INITIALIZED);
+ SET_EXPECT(OnStateChange_UNINITIALIZED);
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres);
+ CHECK_CALLED(OnStateChange_DISCONNECTED);
+ CHECK_CALLED(OnStateChange_INITIALIZED);
+ CHECK_CALLED(OnStateChange_UNINITIALIZED);
+ test_no_script_dispatch(script);
+
+ hres = IActiveScript_GetScriptDispatch(script, L"code context", &disp);
+ ok(hres == E_UNEXPECTED, "hres = %08x, expected E_UNEXPECTED\n", hres);
+
+ SET_EXPECT(GetLCID);
+ SET_EXPECT(OnStateChange_INITIALIZED);
+ hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
+ ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
+ CHECK_CALLED(GetLCID);
+ CHECK_CALLED(OnStateChange_INITIALIZED);
+
+ hres = IActiveScript_AddNamedItem(script, L"code context", SCRIPTITEM_CODEONLY);
+ ok(hres == S_OK, "AddNamedItem failed: %08x\n", hres);
+
+ SET_EXPECT(OnStateChange_CONNECTED);
+ SET_EXPECT_MULTI(OnEnterScript, 2);
+ SET_EXPECT_MULTI(OnLeaveScript, 2);
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres);
+ CHECK_CALLED(OnStateChange_CONNECTED);
+ CHECK_CALLED_MULTI(OnEnterScript, 2);
+ CHECK_CALLED_MULTI(OnLeaveScript, 2);
+ test_state(script, SCRIPTSTATE_CONNECTED);
+
+ script_disp = get_script_dispatch(script, NULL);
+ id = 0;
+ get_disp_id(script_disp, "testSub_global", S_OK, &id);
+ ok(id != -1, "id = -1\n");
+ id = 0;
+ get_disp_id(script_disp, "testSub", DISP_E_UNKNOWNNAME, &id);
+ ok(id == -1, "id = %d, expected -1\n", id);
+ id = 0;
+ get_disp_id(script_disp, "testSub2", DISP_E_UNKNOWNNAME, &id);
+ ok(id == -1, "id = %d, expected -1\n", id);
+ IDispatchEx_Release(script_disp);
+
+ script_disp = get_script_dispatch(script, L"code context");
+ id = 0;
+ get_disp_id(script_disp, "testSub_global", DISP_E_UNKNOWNNAME, &id);
+ ok(id == -1, "id = %d, expected -1\n", id);
+ id = 0;
+ get_disp_id(script_disp, "testSub", DISP_E_UNKNOWNNAME, &id);
+ ok(id == -1, "id = %d, expected -1\n", id);
+ id = 0;
+ get_disp_id(script_disp, "testSub2", DISP_E_UNKNOWNNAME, &id);
+ ok(id == -1, "id = %d, expected -1\n", id);
+ IDispatchEx_Release(script_disp);
+
SET_EXPECT(OnStateChange_DISCONNECTED);
SET_EXPECT(OnStateChange_INITIALIZED);
SET_EXPECT(OnStateChange_CLOSED);
--
2.21.0
More information about the wine-devel
mailing list