Gijs Vermeulen : msscript: Implement IScriptControl_[get|put]_State.

Alexandre Julliard julliard at winehq.org
Fri Mar 16 13:53:07 CDT 2018


Module: wine
Branch: master
Commit: 3e0a6da5d38c37e1189cc6f9fd1d2bc8aa2e8fe6
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3e0a6da5d38c37e1189cc6f9fd1d2bc8aa2e8fe6

Author: Gijs Vermeulen <gijsvrm at gmail.com>
Date:   Thu Mar 15 21:28:41 2018 +0100

msscript: Implement IScriptControl_[get|put]_State.

Signed-off-by: Gijs Vermeulen <gijsvrm at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msscript.ocx/msscript.c       | 26 +++++++++++++++---
 dlls/msscript.ocx/tests/msscript.c | 54 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 76 insertions(+), 4 deletions(-)

diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c
index a020dd2..746c2d3 100644
--- a/dlls/msscript.ocx/msscript.c
+++ b/dlls/msscript.ocx/msscript.c
@@ -91,6 +91,7 @@ struct ScriptControl {
     LONG timeout;
     VARIANT_BOOL allow_ui;
     VARIANT_BOOL use_safe_subset;
+    ScriptControlStates state;
 
     /* connection points */
     ConnectionPoint *cp_list;
@@ -761,15 +762,31 @@ static HRESULT WINAPI ScriptControl_put_Language(IScriptControl *iface, BSTR lan
 static HRESULT WINAPI ScriptControl_get_State(IScriptControl *iface, ScriptControlStates *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;
+
+    if(!This->host)
+        return E_FAIL;
+
+    *p = This->state;
+    return S_OK;
 }
 
 static HRESULT WINAPI ScriptControl_put_State(IScriptControl *iface, ScriptControlStates state)
 {
     ScriptControl *This = impl_from_IScriptControl(iface);
-    FIXME("(%p)->(%x)\n", This, state);
-    return E_NOTIMPL;
+    TRACE("(%p)->(%x)\n", This, state);
+
+    if(!This->host)
+        return E_FAIL;
+
+    if(state != Initialized && state != Connected)
+        return CTL_E_INVALIDPROPERTYVALUE;
+
+    This->state = state;
+    return S_OK;
 }
 
 static HRESULT WINAPI ScriptControl_put_SitehWnd(IScriptControl *iface, LONG hwnd)
@@ -1900,6 +1917,7 @@ static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknow
     script_control->view_sink = NULL;
     script_control->allow_ui = VARIANT_TRUE;
     script_control->use_safe_subset = VARIANT_FALSE;
+    script_control->state = Initialized;
 
     ConnectionPoint_Init(&script_control->cp_scsource, script_control, &DIID_DScriptControlSource);
     ConnectionPoint_Init(&script_control->cp_propnotif, script_control, &IID_IPropertyNotifySink);
diff --git a/dlls/msscript.ocx/tests/msscript.c b/dlls/msscript.ocx/tests/msscript.c
index f6630c3..3110ea2 100644
--- a/dlls/msscript.ocx/tests/msscript.c
+++ b/dlls/msscript.ocx/tests/msscript.c
@@ -1291,6 +1291,59 @@ static void test_UseSafeSubset(void)
     IScriptControl_Release(sc);
 }
 
+static void test_State(void)
+{
+    IScriptControl *sc;
+    ScriptControlStates state;
+    HRESULT hr;
+    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_State(sc, NULL);
+    ok(hr == E_POINTER, "got 0x%08x\n", hr);
+
+    hr = IScriptControl_get_State(sc, &state);
+    ok(hr == E_FAIL, "got 0x%08x\n", hr);
+
+    hr = IScriptControl_put_State(sc, Connected);
+    ok(hr == E_FAIL, "got 0x%08x\n", hr);
+
+    str = SysAllocString(vbW);
+    hr = IScriptControl_put_Language(sc, str);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    SysFreeString(str);
+
+    hr = IScriptControl_get_State(sc, &state);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(state == Initialized, "got %d\n", state);
+
+    hr = IScriptControl_put_State(sc, Connected);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    hr = IScriptControl_get_State(sc, &state);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(state == Connected, "got %d\n", state);
+
+    hr = IScriptControl_put_State(sc, 2);
+    ok(hr == CTL_E_INVALIDPROPERTYVALUE, "got 0x%08x\n", hr);
+
+    hr = IScriptControl_get_State(sc, &state);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(state == Connected, "got %d\n", state);
+
+    hr = IScriptControl_put_State(sc, -1);
+    ok(hr == CTL_E_INVALIDPROPERTYVALUE, "got 0x%08x\n", hr);
+
+    hr = IScriptControl_get_State(sc, &state);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(state == Connected, "got %d\n", state);
+
+    IScriptControl_Release(sc);
+}
+
 START_TEST(msscript)
 {
     IUnknown *unk;
@@ -1319,6 +1372,7 @@ START_TEST(msscript)
     test_AddObject();
     test_AllowUI();
     test_UseSafeSubset();
+    test_State();
 
     CoUninitialize();
 }




More information about the wine-cvs mailing list