Module: wine Branch: master Commit: db21502d510d6c92e0680a9b116fdfb40b8c63d5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=db21502d510d6c92e0680a9b11...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Sep 1 01:25:29 2008 +0200
jscript: Added IActiveScript::GetScriptState implementation.
---
dlls/jscript/jscript.c | 18 ++++++++++++++++-- dlls/jscript/tests/jscript.c | 16 ++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c index 26586d1..4d62fce 100644 --- a/dlls/jscript/jscript.c +++ b/dlls/jscript/jscript.c @@ -188,8 +188,22 @@ static HRESULT WINAPI JScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE s static HRESULT WINAPI JScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState) { JScript *This = ACTSCRIPT_THIS(iface); - FIXME("(%p)->(%p)\n", This, pssState); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, pssState); + + if(!pssState) + return E_POINTER; + + if(!This->thread_id) { + *pssState = SCRIPTSTATE_UNINITIALIZED; + return S_OK; + } + + if(This->thread_id != GetCurrentThreadId()) + return E_UNEXPECTED; + + *pssState = This->ctx ? This->ctx->state : SCRIPTSTATE_UNINITIALIZED; + return S_OK; }
static HRESULT WINAPI JScript_Close(IActiveScript *iface) diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c index 18aef1a..d923f33 100644 --- a/dlls/jscript/tests/jscript.c +++ b/dlls/jscript/tests/jscript.c @@ -66,6 +66,17 @@ DEFINE_EXPECT(OnStateChange_INITIALIZED); DEFINE_EXPECT(OnEnterScript); DEFINE_EXPECT(OnLeaveScript);
+#define test_state(s,ss) _test_state(__LINE__,s,ss) +static void _test_state(unsigned line, IActiveScript *script, SCRIPTSTATE exstate) +{ + SCRIPTSTATE state = -1; + HRESULT hres; + + hres = IActiveScript_GetScriptState(script, &state); + ok_(__FILE__,line) (hres == S_OK, "GetScriptState failed: %08x\n", hres); + ok_(__FILE__,line) (state == exstate, "state=%d, expected %d\n", state, exstate); +} + static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface, REFIID riid, void **ppv) { *ppv = NULL; @@ -277,6 +288,7 @@ static void test_jscript(void) hres = IUnknown_QueryInterface(unk, &IID_IActiveScriptParse, (void**)&parse); ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
+ test_state(script, SCRIPTSTATE_UNINITIALIZED); test_safety(unk);
hres = IActiveScriptParse_InitNew(parse); @@ -288,6 +300,7 @@ static void test_jscript(void) hres = IActiveScript_SetScriptSite(script, NULL); ok(hres == E_POINTER, "SetScriptSite failed: %08x, expected E_POINTER\n", hres);
+ test_state(script, SCRIPTSTATE_UNINITIALIZED); test_script_dispatch(script, FALSE);
SET_EXPECT(GetLCID); @@ -297,6 +310,8 @@ static void test_jscript(void) CHECK_CALLED(GetLCID); CHECK_CALLED(OnStateChange_INITIALIZED);
+ test_state(script, SCRIPTSTATE_INITIALIZED); + hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite); ok(hres == E_UNEXPECTED, "SetScriptSite failed: %08x, expected E_UNEXPECTED\n", hres);
@@ -307,6 +322,7 @@ static void test_jscript(void) ok(hres == S_OK, "Close failed: %08x\n", hres); CHECK_CALLED(OnStateChange_CLOSED);
+ test_state(script, SCRIPTSTATE_CLOSED); test_script_dispatch(script, FALSE);
IActiveScriptParse_Release(parse);