[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