[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