Jacek Caban : vbscript: Add SetScriptState(SCRIPTSTATE_CLOSED) implementation.
Alexandre Julliard
julliard at winehq.org
Mon Feb 3 15:06:08 CST 2020
Module: wine
Branch: master
Commit: 1c6649d443f73cc44167f0dd71ac88dddff752ff
URL: https://source.winehq.org/git/wine.git/?a=commit;h=1c6649d443f73cc44167f0dd71ac88dddff752ff
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Feb 3 19:57:11 2020 +0100
vbscript: Add SetScriptState(SCRIPTSTATE_CLOSED) implementation.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/vbscript/tests/vbscript.c | 71 ++++++++++++++++++++++++++++++++++++++++++
dlls/vbscript/vbscript.c | 5 ++-
2 files changed, 75 insertions(+), 1 deletion(-)
diff --git a/dlls/vbscript/tests/vbscript.c b/dlls/vbscript/tests/vbscript.c
index f0b75ad2f3..10af993ba5 100644
--- a/dlls/vbscript/tests/vbscript.c
+++ b/dlls/vbscript/tests/vbscript.c
@@ -1520,10 +1520,81 @@ static void test_vbscript_uninitializing(void)
hres = IActiveScriptParse_InitNew(parse);
ok(hres == E_UNEXPECTED, "InitNew failed: %08x\n", hres);
+ /* initialize again and use SetScriptState(SCRIPTSTATE_CLOSED) to uninitialize it */
+
+ 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);
+
+ SET_EXPECT(OnStateChange_CONNECTED);
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres);
+ CHECK_CALLED(OnStateChange_CONNECTED);
+
+ SET_EXPECT(OnStateChange_DISCONNECTED);
+ SET_EXPECT(OnStateChange_INITIALIZED);
+ SET_EXPECT(OnStateChange_CLOSED);
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CLOSED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CLOSED) failed: %08x\n", hres);
+ CHECK_CALLED(OnStateChange_DISCONNECTED);
+ CHECK_CALLED(OnStateChange_INITIALIZED);
+ CHECK_CALLED(OnStateChange_CLOSED);
+
+ test_state(script, SCRIPTSTATE_CLOSED);
+
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CLOSED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CLOSED) failed: %08x\n", hres);
+
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_INITIALIZED);
+ ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_INITIALIZED) failed: %08x\n", hres);
+
+ hres = IActiveScript_Close(script);
+ ok(hres == S_OK, "Close failed: %08x\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);
+
+ SET_EXPECT(OnStateChange_CONNECTED);
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres);
+ CHECK_CALLED(OnStateChange_CONNECTED);
+
+ SET_EXPECT(OnStateChange_DISCONNECTED);
+ SET_EXPECT(OnStateChange_INITIALIZED);
+ SET_EXPECT(OnStateChange_CLOSED);
+ hres = IActiveScript_Close(script);
+ ok(hres == S_OK, "Close failed: %08x\n", hres);
+ CHECK_CALLED(OnStateChange_DISCONNECTED);
+ CHECK_CALLED(OnStateChange_INITIALIZED);
+ CHECK_CALLED(OnStateChange_CLOSED);
+
+ test_state(script, SCRIPTSTATE_CLOSED);
+
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CLOSED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CLOSED) failed: %08x\n", hres);
+
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_INITIALIZED);
+ ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_INITIALIZED) failed: %08x\n", hres);
+
IActiveScriptParse_Release(parse);
ref = IActiveScript_Release(script);
ok(!ref, "ref = %d\n", ref);
+
+ script = create_vbscript();
+
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CLOSED);
+ ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_CLOSED) failed: %08x\n", hres);
+
+ ref = IActiveScript_Release(script);
+ ok(!ref, "ref = %d\n", ref);
}
static void test_vbscript_release(void)
diff --git a/dlls/vbscript/vbscript.c b/dlls/vbscript/vbscript.c
index b597389a9a..4f00128217 100644
--- a/dlls/vbscript/vbscript.c
+++ b/dlls/vbscript/vbscript.c
@@ -559,7 +559,7 @@ static HRESULT WINAPI VBScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE
return S_OK;
}
- if(!This->is_initialized || !This->ctx->site)
+ if(!This->is_initialized || (!This->ctx->site && ss != SCRIPTSTATE_CLOSED))
return E_UNEXPECTED;
switch(ss) {
@@ -573,6 +573,9 @@ static HRESULT WINAPI VBScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE
case SCRIPTSTATE_INITIALIZED:
decrease_state(This, SCRIPTSTATE_INITIALIZED);
return S_OK;
+ case SCRIPTSTATE_CLOSED:
+ decrease_state(This, SCRIPTSTATE_CLOSED);
+ return S_OK;
case SCRIPTSTATE_DISCONNECTED:
FIXME("unimplemented SCRIPTSTATE_DISCONNECTED\n");
return S_OK;
More information about the wine-cvs
mailing list