Jacek Caban : mshtml: Added function object tests.

Alexandre Julliard julliard at winehq.org
Tue Sep 1 11:05:37 CDT 2009


Module: wine
Branch: master
Commit: 012004bcf95d8282e2425a148b002ce484a7dd36
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=012004bcf95d8282e2425a148b002ce484a7dd36

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Aug 31 20:47:21 2009 +0200

mshtml: Added function object tests.

---

 dlls/mshtml/tests/script.c |   99 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 98 insertions(+), 1 deletions(-)

diff --git a/dlls/mshtml/tests/script.c b/dlls/mshtml/tests/script.c
index 157b00f..2c74ff7 100644
--- a/dlls/mshtml/tests/script.c
+++ b/dlls/mshtml/tests/script.c
@@ -129,6 +129,25 @@ static const char *debugstr_guid(REFIID riid)
     return buf;
 }
 
+static int strcmp_wa(LPCWSTR strw, const char *stra)
+{
+    CHAR buf[512];
+    WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL);
+    return lstrcmpA(stra, buf);
+}
+
+static BSTR a2bstr(const char *str)
+{
+    BSTR ret;
+    int len;
+
+    len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
+    ret = SysAllocStringLen(NULL, len);
+    MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
+
+    return ret;
+}
+
 static HRESULT WINAPI PropertyNotifySink_QueryInterface(IPropertyNotifySink *iface,
         REFIID riid, void**ppv)
 {
@@ -617,12 +636,76 @@ static HRESULT WINAPI ActiveScriptParse_AddScriptlet(IActiveScriptParse *iface,
     return E_NOTIMPL;
 }
 
+static void test_func(IDispatchEx *obj)
+{
+    DISPID id, propput_arg = DISPID_PROPERTYPUT;
+    IDispatchEx *dispex;
+    IDispatch *disp;
+    EXCEPINFO ei;
+    DISPPARAMS dp;
+    BSTR str;
+    VARIANT var;
+    HRESULT hres;
+
+    str = a2bstr("toString");
+    hres = IDispatchEx_GetDispID(obj, str, fdexNameCaseSensitive, &id);
+    SysFreeString(str);
+    ok(hres == S_OK, "GetDispID failed: %08x\n", hres);
+    ok(id == DISPID_IOMNAVIGATOR_TOSTRING, "id = %x\n", id);
+
+    memset(&dp, 0, sizeof(dp));
+    memset(&ei, 0, sizeof(ei));
+    VariantInit(&var);
+    hres = IDispatchEx_InvokeEx(obj, id, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dp, &var, &ei, NULL);
+    ok(hres == S_OK, "InvokeEx failed: %08x\n", hres);
+    ok(V_VT(&var) == VT_DISPATCH, "V_VT(var)=%d\n", V_VT(&var));
+    ok(V_DISPATCH(&var) != NULL, "V_DISPATCH(var) == NULL\n");
+    disp = V_DISPATCH(&var);
+
+    memset(&dp, 0, sizeof(dp));
+    memset(&ei, 0, sizeof(ei));
+    VariantInit(&var);
+    hres = IDispatchEx_InvokeEx(obj, id, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dp, &var, &ei, NULL);
+    ok(hres == S_OK, "InvokeEx failed: %08x\n", hres);
+    ok(V_VT(&var) == VT_DISPATCH, "V_VT(var)=%d\n", V_VT(&var));
+    ok(V_DISPATCH(&var) == disp, "V_DISPATCH(var) != disp\n");
+    VariantClear(&var);
+
+    hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
+    IDispatch_Release(disp);
+    ok(hres == S_OK, "Could not get IDispatchEx iface: %08x\n", hres);
+
+    /* FIXME: Test InvokeEx(DISPATCH_METHOD) */
+
+    memset(&dp, 0, sizeof(dp));
+    memset(&ei, 0, sizeof(ei));
+    VariantInit(&var);
+    hres = IDispatchEx_Invoke(dispex, DISPID_VALUE, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dp, &var, &ei, NULL);
+    ok(hres == S_OK, "InvokeEx failed: %08x\n", hres);
+    ok(V_VT(&var) == VT_BSTR, "V_VT(var)=%d\n", V_VT(&var));
+    ok(!strcmp_wa(V_BSTR(&var), "[object]"), "V_BSTR(var) = %s\n", wine_dbgstr_w(V_BSTR(&var)));
+    VariantClear(&var);
+
+    dp.cArgs = 1;
+    dp.rgvarg = &var;
+    dp.cNamedArgs = 1;
+    dp.rgdispidNamedArgs = &propput_arg;
+    V_VT(&var) = VT_I4;
+    V_I4(&var) = 100;
+    hres = IDispatchEx_InvokeEx(obj, id, LOCALE_NEUTRAL, DISPATCH_PROPERTYPUT, &dp, NULL, &ei, NULL);
+    ok(hres == E_NOTIMPL, "InvokeEx failed: %08x\n", hres);
+
+    IDispatchEx_Release(dispex);
+}
+
 static HRESULT WINAPI ActiveScriptParse_ParseScriptText(IActiveScriptParse *iface,
         LPCOLESTR pstrCode, LPCOLESTR pstrItemName, IUnknown *punkContext,
         LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLine,
         DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo)
 {
-    IDispatchEx *document;
+    IDispatchEx *document, *dispex;
+    IHTMLWindow2 *window;
+    IOmNavigator *navigator;
     IUnknown *unk;
     VARIANT var, arg;
     DISPPARAMS dp;
@@ -737,6 +820,20 @@ static HRESULT WINAPI ActiveScriptParse_ParseScriptText(IActiveScriptParse *ifac
 
     IDispatchEx_Release(document);
 
+    hres = IDispatchEx_QueryInterface(window_dispex, &IID_IHTMLWindow2, (void**)&window);
+    ok(hres == S_OK, "Could not get IHTMLWindow2 iface: %08x\n", hres);
+
+    hres = IHTMLWindow2_get_navigator(window, &navigator);
+    IHTMLWindow2_Release(window);
+    ok(hres == S_OK, "get_navigator failed: %08x\n", hres);
+
+    hres = IOmNavigator_QueryInterface(navigator, &IID_IDispatchEx, (void**)&dispex);
+    IOmNavigator_Release(navigator);
+    ok(hres == S_OK, "Could not get IDispatchEx iface: %08x\n", hres);
+
+    test_func(dispex);
+    IDispatchEx_Release(dispex);
+
     return S_OK;
 }
 




More information about the wine-cvs mailing list