From: Nikolay Sivov Subject: [PATCH 3/3] msscript: Implement Timeout property Message-Id: <1465639360-31315-3-git-send-email-nsivov@codeweavers.com> Date: Sat, 11 Jun 2016 13:02:40 +0300 In-Reply-To: <1465639360-31315-1-git-send-email-nsivov@codeweavers.com> References: <1465639360-31315-1-git-send-email-nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov --- dlls/msscript.ocx/msscript.c | 22 +++++++++++--- dlls/msscript.ocx/tests/msscript.c | 62 +++++++++++++++++++++++++++++++++++++- 2 files changed, 79 insertions(+), 5 deletions(-) diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c index b6764f4..b9995cc 100644 --- a/dlls/msscript.ocx/msscript.c +++ b/dlls/msscript.ocx/msscript.c @@ -45,6 +45,7 @@ struct ScriptControl { BSTR lang; IActiveScript *script; SCRIPTSTATE script_state; + LONG timeout; }; static HINSTANCE msscript_instance; @@ -524,15 +525,27 @@ static HRESULT WINAPI ScriptControl_get_SitehWnd(IScriptControl *iface, LONG *p) static HRESULT WINAPI ScriptControl_get_Timeout(IScriptControl *iface, LONG *p) { ScriptControl *This = impl_from_IScriptControl(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, p); + + if (!p) + return E_POINTER; + + *p = This->timeout; + return S_OK; } static HRESULT WINAPI ScriptControl_put_Timeout(IScriptControl *iface, LONG milliseconds) { ScriptControl *This = impl_from_IScriptControl(iface); - FIXME("(%p)->(%d)\n", This, milliseconds); - return E_NOTIMPL; + + TRACE("(%p)->(%d)\n", This, milliseconds); + + if (milliseconds < -1) + return CTL_E_INVALIDPROPERTYVALUE; + + This->timeout = milliseconds; + return S_OK; } static HRESULT WINAPI ScriptControl_get_AllowUI(IScriptControl *iface, VARIANT_BOOL *p) @@ -1100,6 +1113,7 @@ static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknow script_control->ref = 1; script_control->site = NULL; script_control->lang = NULL; + script_control->timeout = 10000; script_control->script_state = SCRIPTSTATE_UNINITIALIZED; script_control->script = NULL; diff --git a/dlls/msscript.ocx/tests/msscript.c b/dlls/msscript.ocx/tests/msscript.c index d1d553b..3ed7324 100644 --- a/dlls/msscript.ocx/tests/msscript.c +++ b/dlls/msscript.ocx/tests/msscript.c @@ -33,6 +33,7 @@ #define TESTSCRIPT_CLSID "{178fc164-f585-4e24-9c13-4bb7faf80746}" static const GUID CLSID_TestScript = {0x178fc164,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x07,0x46}}; +static const WCHAR vbW[] = {'V','B','S','c','r','i','p','t',0}; #ifdef _WIN64 @@ -616,7 +617,6 @@ static void test_olecontrol(void) static void test_Language(void) { - static const WCHAR vbW[] = {'V','B','S','c','r','i','p','t',0}; static const WCHAR jsW[] = {'J','S','c','r','i','p','t',0}; static const WCHAR vb2W[] = {'v','B','s','c','r','i','p','t',0}; static const WCHAR dummyW[] = {'d','u','m','m','y',0}; @@ -700,6 +700,65 @@ static void test_Language(void) IScriptControl_Release(sc); } +static void test_Timeout(void) +{ + IScriptControl *sc; + HRESULT hr; + LONG val; + BSTR str; + + hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, + &IID_IScriptControl, (void**)&sc); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IScriptControl_get_Timeout(sc, NULL); + ok(hr == E_POINTER, "got 0x%08x\n", hr); + + val = 0; + hr = IScriptControl_get_Timeout(sc, &val); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(val == 10000, "got %d\n", val); + + hr = IScriptControl_put_Timeout(sc, -1); + ok(hr == S_OK, "got 0x%08x\n", hr); + + val = 0; + hr = IScriptControl_get_Timeout(sc, &val); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(val == -1, "got %d\n", val); + + hr = IScriptControl_put_Timeout(sc, -2); + ok(hr == CTL_E_INVALIDPROPERTYVALUE, "got 0x%08x\n", hr); + + val = 0; + hr = IScriptControl_get_Timeout(sc, &val); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(val == -1, "got %d\n", val); + + hr = IScriptControl_put_Timeout(sc, 0); + ok(hr == S_OK, "got 0x%08x\n", hr); + + val = 1; + hr = IScriptControl_get_Timeout(sc, &val); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(val == 0, "got %d\n", val); + + str = SysAllocString(vbW); + hr = IScriptControl_put_Language(sc, str); + ok(hr == S_OK, "got 0x%08x\n", hr); + SysFreeString(str); + + val = 1; + hr = IScriptControl_get_Timeout(sc, &val); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(val == 0, "got %d\n", val); + + hr = IScriptControl_put_Timeout(sc, 10000); + ok(hr == S_OK, "got 0x%08x\n", hr); + + IScriptControl_Release(sc); +} + START_TEST(msscript) { IUnknown *unk; @@ -719,6 +778,7 @@ START_TEST(msscript) test_persiststreaminit(); test_olecontrol(); test_Language(); + test_Timeout(); CoUninitialize(); } -- 2.8.1