Gabriel Ivăncescu : msscript.ocx: Implement ScriptControl::get_CodeObject.
Alexandre Julliard
julliard at winehq.org
Tue Aug 4 15:26:36 CDT 2020
Module: wine
Branch: master
Commit: ad56f0c5c5a7e85558db93b3f180e8be61bd858b
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ad56f0c5c5a7e85558db93b3f180e8be61bd858b
Author: Gabriel Ivăncescu <gabrielopcode at gmail.com>
Date: Tue Aug 4 17:28:16 2020 +0300
msscript.ocx: Implement ScriptControl::get_CodeObject.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msscript.ocx/msscript.c | 8 +++--
dlls/msscript.ocx/tests/msscript.c | 67 ++++++++++++++++++++++++++++++++++++++
2 files changed, 73 insertions(+), 2 deletions(-)
diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c
index 94d6ddac83..3fc4aca2e9 100644
--- a/dlls/msscript.ocx/msscript.c
+++ b/dlls/msscript.ocx/msscript.c
@@ -1760,8 +1760,12 @@ static HRESULT WINAPI ScriptControl_get_Error(IScriptControl *iface, IScriptErro
static HRESULT WINAPI ScriptControl_get_CodeObject(IScriptControl *iface, IDispatch **p)
{
ScriptControl *This = impl_from_IScriptControl(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ if (!This->host) return E_FAIL;
+
+ return IScriptModule_get_CodeObject(&This->modules[0]->IScriptModule_iface, p);
}
static HRESULT WINAPI ScriptControl_get_Procedures(IScriptControl *iface, IScriptProcedureCollection **p)
diff --git a/dlls/msscript.ocx/tests/msscript.c b/dlls/msscript.ocx/tests/msscript.c
index 90f6d19231..352bf78703 100644
--- a/dlls/msscript.ocx/tests/msscript.c
+++ b/dlls/msscript.ocx/tests/msscript.c
@@ -2883,6 +2883,72 @@ static void test_IScriptControl_get_Modules(void)
}
}
+static void test_IScriptControl_get_CodeObject(void)
+{
+ IScriptControl *sc;
+ IDispatch *disp;
+ HRESULT hr;
+ BSTR str;
+
+ hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,
+ &IID_IScriptControl, (void**)&sc);
+ ok(hr == S_OK, "Failed to create IScriptControl interface: 0x%08x.\n", hr);
+
+ hr = IScriptControl_get_CodeObject(sc, &disp);
+ ok(hr == E_FAIL, "IScriptControl_get_CodeObject returned: 0x%08x.\n", hr);
+
+ str = SysAllocString(L"jscript");
+ hr = IScriptControl_put_Language(sc, str);
+ ok(hr == S_OK, "IScriptControl_put_Language failed: 0x%08x.\n", hr);
+ SysFreeString(str);
+
+ hr = IScriptControl_get_CodeObject(sc, &disp);
+ ok(hr == S_OK, "IScriptControl_get_CodeObject failed: 0x%08x.\n", hr);
+
+ IDispatch_Release(disp);
+ IScriptControl_Release(sc);
+
+ if (have_custom_engine)
+ {
+ hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,
+ &IID_IScriptControl, (void**)&sc);
+ ok(hr == S_OK, "Failed to create IScriptControl interface: 0x%08x.\n", hr);
+
+ SET_EXPECT(CreateInstance);
+ SET_EXPECT(SetInterfaceSafetyOptions);
+ SET_EXPECT(SetScriptSite);
+ SET_EXPECT(QI_IActiveScriptParse);
+ SET_EXPECT(InitNew);
+
+ str = SysAllocString(L"testscript");
+ hr = IScriptControl_put_Language(sc, str);
+ ok(hr == S_OK, "IScriptControl_put_Language failed: 0x%08x.\n", hr);
+ SysFreeString(str);
+
+ CHECK_CALLED(CreateInstance);
+ CHECK_CALLED(SetInterfaceSafetyOptions);
+ CHECK_CALLED(SetScriptSite);
+ CHECK_CALLED(QI_IActiveScriptParse);
+ CHECK_CALLED(InitNew);
+
+ GetScriptDispatch_expected_name = NULL;
+ SET_EXPECT(SetScriptState_STARTED);
+ SET_EXPECT(GetScriptDispatch);
+ hr = IScriptControl_get_CodeObject(sc, &disp);
+ ok(hr == S_OK, "IScriptControl_get_CodeObject failed: 0x%08x.\n", hr);
+ ok(disp == (IDispatch*)&DispatchEx, "unexpected code object %p\n", disp);
+ CHECK_CALLED(GetScriptDispatch);
+ CHECK_CALLED(SetScriptState_STARTED);
+
+ IDispatch_Release(disp);
+ IActiveScriptSite_Release(site);
+
+ SET_EXPECT(Close);
+ IScriptControl_Release(sc);
+ CHECK_CALLED(Close);
+ }
+}
+
START_TEST(msscript)
{
IUnknown *unk;
@@ -2921,6 +2987,7 @@ START_TEST(msscript)
test_IScriptControl_ExecuteStatement();
test_IScriptControl_Run();
test_IScriptControl_get_Modules();
+ test_IScriptControl_get_CodeObject();
init_registry(FALSE);
More information about the wine-cvs
mailing list