Module: wine Branch: master Commit: 1c6649d443f73cc44167f0dd71ac88dddff752ff URL: https://source.winehq.org/git/wine.git/?a=commit;h=1c6649d443f73cc44167f0dd7...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Feb 3 19:57:11 2020 +0100
vbscript: Add SetScriptState(SCRIPTSTATE_CLOSED) implementation.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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;