Jacek Caban : mshtml: Added execScript tests.

Alexandre Julliard julliard at winehq.org
Tue Nov 9 13:13:22 CST 2010


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Nov  9 13:36:39 2010 +0100

mshtml: Added execScript tests.

---

 dlls/mshtml/tests/jstest.html |    6 +++
 dlls/mshtml/tests/script.c    |   82 +++++++++++++++++++++++++++++++++++-----
 2 files changed, 77 insertions(+), 11 deletions(-)

diff --git a/dlls/mshtml/tests/jstest.html b/dlls/mshtml/tests/jstest.html
index 3363c5a..b977ad3 100644
--- a/dlls/mshtml/tests/jstest.html
+++ b/dlls/mshtml/tests/jstest.html
@@ -31,6 +31,8 @@ function test_select_index() {
     ok(s[2] === null, "s[2] = " + s[2]);
 }
 
+var globalVar = false;
+
 function runTest() {
     obj = new Object();
     ok(obj === window.obj, "obj !== window.obj");
@@ -41,6 +43,10 @@ function runTest() {
     test_removeAttribute(document.body);
     test_select_index();
 
+    var r = window.execScript("globalVar = true;");
+    ok(r === undefined, "execScript returned " + r);
+    ok(globalVar === true, "globalVar = " + globalVar);
+
     external.reportSuccess();
 }
 </script>
diff --git a/dlls/mshtml/tests/script.c b/dlls/mshtml/tests/script.c
index 23f1ab8..4da0df7 100644
--- a/dlls/mshtml/tests/script.c
+++ b/dlls/mshtml/tests/script.c
@@ -113,7 +113,8 @@ DEFINE_EXPECT(SetScriptState_STARTED);
 DEFINE_EXPECT(SetScriptState_CONNECTED);
 DEFINE_EXPECT(SetScriptState_DISCONNECTED);
 DEFINE_EXPECT(AddNamedItem);
-DEFINE_EXPECT(ParseScriptText);
+DEFINE_EXPECT(ParseScriptText_script);
+DEFINE_EXPECT(ParseScriptText_execScript);
 DEFINE_EXPECT(GetScriptDispatch);
 DEFINE_EXPECT(funcDisp);
 DEFINE_EXPECT(script_divid_d);
@@ -423,7 +424,7 @@ static HRESULT WINAPI scriptDisp_GetDispID(IDispatchEx *iface, BSTR bstrName, DW
         return E_FAIL;
     }
 
-    ok(0, "unexpected call\n");
+    ok(0, "unexpected call %s\n", wine_dbgstr_w(bstrName));
     return E_NOTIMPL;
 }
 
@@ -1732,10 +1733,7 @@ static void test_global_id(void)
     VariantClear(&var);
 }
 
-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)
+static void test_script_run(void)
 {
     IDispatchEx *document, *dispex;
     IHTMLWindow2 *window;
@@ -1752,8 +1750,6 @@ static HRESULT WINAPI ActiveScriptParse_ParseScriptText(IActiveScriptParse *ifac
     static const WCHAR testW[] = {'t','e','s','t',0};
     static const WCHAR funcW[] = {'f','u','n','c',0};
 
-    CHECK_EXPECT(ParseScriptText);
-
     SET_EXPECT(GetScriptDispatch);
 
     tmp = SysAllocString(documentW);
@@ -1943,8 +1939,38 @@ static HRESULT WINAPI ActiveScriptParse_ParseScriptText(IActiveScriptParse *ifac
     test_global_id();
 
     test_security();
+}
 
-    return S_OK;
+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)
+{
+    ok(!punkContext, "punkContext = %p\n", punkContext);
+    ok(pvarResult != NULL, "pvarResult == NULL\n");
+    ok(pexcepinfo != NULL, "pexcepinfo == NULL\n");
+
+    if(!strcmp_wa(pstrCode, "execScript call")) {
+        CHECK_EXPECT(ParseScriptText_execScript);
+        ok(!pstrItemName, "pstrItemName = %s\n", wine_dbgstr_w(pstrItemName));
+        ok(!strcmp_wa(pstrDelimiter, "\""), "pstrDelimiter = %s\n", wine_dbgstr_w(pstrDelimiter));
+        ok(dwFlags == SCRIPTTEXT_ISVISIBLE, "dwFlags = %x\n", dwFlags);
+
+        V_VT(pvarResult) = VT_I4;
+        V_I4(pvarResult) = 10;
+        return S_OK;
+    }else if(!strcmp_wa(pstrCode, "simple script")) {
+        CHECK_EXPECT(ParseScriptText_script);
+        ok(!strcmp_wa(pstrItemName, "window"), "pstrItemName = %s\n", wine_dbgstr_w(pstrItemName));
+        ok(!strcmp_wa(pstrDelimiter, "</SCRIPT>"), "pstrDelimiter = %s\n", wine_dbgstr_w(pstrDelimiter));
+        ok(dwFlags == (SCRIPTTEXT_ISVISIBLE|SCRIPTTEXT_HOSTMANAGESSOURCE), "dwFlags = %x\n", dwFlags);
+
+        test_script_run();
+        return S_OK;
+    }
+
+    ok(0, "unexpected script %s\n", wine_dbgstr_w(pstrCode));
+    return E_FAIL;
 }
 
 static const IActiveScriptParseVtbl ActiveScriptParseVtbl = {
@@ -2265,6 +2291,38 @@ static const char simple_script_str[] =
     "<script language=\"TestScript\">simple script</script>"
     "</body></html>";
 
+static void test_exec_script(IHTMLDocument2 *doc)
+{
+    IHTMLWindow2 *window;
+    BSTR code, lang;
+    VARIANT v;
+    HRESULT hres;
+
+    hres = IHTMLDocument2_get_parentWindow(doc, &window);
+    ok(hres == S_OK, "get_parentWindow failed: %08x\n", hres);
+
+    code = a2bstr("execScript call");
+    lang = a2bstr("TestScript");
+
+    SET_EXPECT(ParseScriptText_execScript);
+    hres = IHTMLWindow2_execScript(window, code, lang, &v);
+    ok(hres == S_OK, "execScript failed: %08x\n", hres);
+    ok(V_VT(&v) == VT_I4, "V_VT(v) = %d\n", V_VT(&v));
+    ok(V_I4(&v) == 10, "V_I4(v) = %d\n", V_I4(&v));
+    CHECK_CALLED(ParseScriptText_execScript);
+    SysFreeString(lang);
+
+    lang = a2bstr("invalid");
+    V_VT(&v) = 100;
+    hres = IHTMLWindow2_execScript(window, code, lang, &v);
+    ok(hres == CO_E_CLASSSTRING, "execScript failed: %08x, expected CO_E_CLASSSTRING\n", hres);
+    ok(V_VT(&v) == 100, "V_VT(v) = %d\n", V_VT(&v));
+    SysFreeString(lang);
+    SysFreeString(code);
+
+    IHTMLWindow2_Release(window);
+}
+
 static void test_simple_script(void)
 {
     IHTMLDocument2 *doc;
@@ -2284,7 +2342,7 @@ static void test_simple_script(void)
     SET_EXPECT(SetScriptState_STARTED);
     SET_EXPECT(AddNamedItem);
     SET_EXPECT(SetProperty_ABBREVIATE_GLOBALNAME_RESOLUTION); /* IE8 */
-    SET_EXPECT(ParseScriptText);
+    SET_EXPECT(ParseScriptText_script);
     SET_EXPECT(SetScriptState_CONNECTED);
 
     load_doc(doc, simple_script_str);
@@ -2300,9 +2358,11 @@ static void test_simple_script(void)
     CHECK_CALLED(SetScriptState_STARTED);
     CHECK_CALLED(AddNamedItem);
     CHECK_CALLED_BROKEN(SetProperty_ABBREVIATE_GLOBALNAME_RESOLUTION); /* IE8 */
-    CHECK_CALLED(ParseScriptText);
+    CHECK_CALLED(ParseScriptText_script);
     CHECK_CALLED(SetScriptState_CONNECTED);
 
+    test_exec_script(doc);
+
     if(site)
         IActiveScriptSite_Release(site);
     if(window_dispex)




More information about the wine-cvs mailing list