[PATCH v5 5/9] jscript: Retrieve the proper script dispatch from the named item in GetScriptDispatch.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Fri Mar 6 07:48:42 CST 2020
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/jscript/jscript.c | 10 +++++++++-
dlls/jscript/tests/jscript.c | 9 ++-------
2 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c
index b74f172..535f95d 100644
--- a/dlls/jscript/jscript.c
+++ b/dlls/jscript/jscript.c
@@ -888,6 +888,7 @@ static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR
IDispatch **ppdisp)
{
JScript *This = impl_from_IActiveScript(iface);
+ jsdisp_t *script_obj;
TRACE("(%p)->(%s %p)\n", This, debugstr_w(pstrItemName), ppdisp);
@@ -899,7 +900,14 @@ static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR
return E_UNEXPECTED;
}
- *ppdisp = to_disp(This->ctx->global);
+ script_obj = This->ctx->global;
+ if(pstrItemName) {
+ named_item_t *item = lookup_named_item(This->ctx, pstrItemName, 0);
+ if(!item) return E_INVALIDARG;
+ if(item->script_obj) script_obj = item->script_obj;
+ }
+
+ *ppdisp = to_disp(script_obj);
IDispatch_AddRef(*ppdisp);
return S_OK;
}
diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c
index 8d4f6e1..40a8456 100644
--- a/dlls/jscript/tests/jscript.c
+++ b/dlls/jscript/tests/jscript.c
@@ -1196,7 +1196,6 @@ static void test_named_items(void)
ok(dispex == dispex2, "get_script_dispatch returned different dispatch objects.\n");
IDispatchEx_Release(dispex2);
dispex2 = get_script_dispatch(script, L"codeOnlyItem");
- todo_wine
ok(dispex != dispex2, "get_script_dispatch returned same dispatch objects.\n");
SET_EXPECT(OnStateChange_INITIALIZED);
@@ -1325,9 +1324,7 @@ static void test_named_items(void)
id = 0;
hr = IDispatchEx_GetDispID(dispex2, bstr, 0, &id);
- todo_wine
ok(hr == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08x\n", wine_dbgstr_w(global_idents[i]), hr);
- todo_wine
ok(id == -1, "[%s] id = %d, expected -1\n", wine_dbgstr_w(global_idents[i]), id);
SysFreeString(bstr);
}
@@ -1343,7 +1340,9 @@ static void test_named_items(void)
ok(id == -1, "[%s] id = %d, expected -1\n", wine_dbgstr_w(context_idents[i]), id);
id = 0;
hr = IDispatchEx_GetDispID(dispex2, bstr, 0, &id);
+ todo_wine
ok(hr == S_OK, "GetDispID(%s) returned %08x\n", wine_dbgstr_w(context_idents[i]), hr);
+ todo_wine
ok(id != -1, "[%s] id = -1\n", wine_dbgstr_w(context_idents[i]));
SysFreeString(bstr);
}
@@ -1531,9 +1530,7 @@ static void test_named_items(void)
bstr = SysAllocString(global_idents[i]);
id = 0;
hr = IDispatchEx_GetDispID(dispex, bstr, 0, &id);
- todo_wine
ok(hr == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08x\n", wine_dbgstr_w(global_idents[i]), hr);
- todo_wine
ok(id == -1, "[%s] id = %d, expected -1\n", wine_dbgstr_w(global_idents[i]), id);
SysFreeString(bstr);
}
@@ -1543,9 +1540,7 @@ static void test_named_items(void)
bstr = SysAllocString(context_idents[i]);
id = 0;
hr = IDispatchEx_GetDispID(dispex, bstr, 0, &id);
- todo_wine_if(i != 0)
ok(hr == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08x\n", wine_dbgstr_w(context_idents[i]), hr);
- todo_wine_if(i != 0)
ok(id == -1, "[%s] id = %d, expected -1\n", wine_dbgstr_w(context_idents[i]), id);
SysFreeString(bstr);
}
--
2.21.0
More information about the wine-devel
mailing list