[PATCH 3/3] msscript: Implement Timeout property
Nikolay Sivov
nsivov at codeweavers.com
Sat Jun 11 05:02:40 CDT 2016
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
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
More information about the wine-patches
mailing list