Jacek Caban : jscript: Better checks for too old jscript.dll versions.

Alexandre Julliard julliard at winehq.org
Tue Sep 21 13:59:31 CDT 2010


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Sep 21 15:58:48 2010 +0200

jscript: Better checks for too old jscript.dll versions.

---

 dlls/jscript/tests/activex.c |   60 ++++++++++++++++++++++++-----------------
 dlls/jscript/tests/jscript.c |   28 +++++++++++++++----
 dlls/jscript/tests/run.c     |    7 +++++
 3 files changed, 64 insertions(+), 31 deletions(-)

diff --git a/dlls/jscript/tests/activex.c b/dlls/jscript/tests/activex.c
index ba3f8bd..faf73d3 100644
--- a/dlls/jscript/tests/activex.c
+++ b/dlls/jscript/tests/activex.c
@@ -701,7 +701,7 @@ static void _parse_script_a(unsigned line, IActiveScriptParse *parser, const cha
     ok_(__FILE__,line)(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
 }
 
-static IActiveScriptParse *create_script(void)
+static IActiveScriptParse *create_script(BOOL skip_tests)
 {
     IActiveScriptParse *parser;
     IActiveScript *script;
@@ -719,11 +719,13 @@ static IActiveScriptParse *create_script(void)
 
     hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
             &IID_IActiveScript, (void**)&script);
-    ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
+    if(!skip_tests)
+        ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
     if(FAILED(hres))
         return NULL;
 
-    set_safety_options((IUnknown*)script);
+    if(!skip_tests)
+        set_safety_options((IUnknown*)script);
 
     hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parser);
     ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
@@ -743,17 +745,19 @@ static IActiveScriptParse *create_script(void)
 
     IActiveScript_Release(script);
 
-    parse_script_a(parser,
-            "function testException(func, type, number) {\n"
-            "try {\n"
-            "    func();\n"
-            "}catch(e) {\n"
-            "    ok(e.name === type, 'e.name = ' + e.name + ', expected ' + type)\n"
-            "    ok(e.number === number, 'e.number = ' + e.number + ', expected ' + number);\n"
-            "    return;\n"
-            "}"
-            "ok(false, 'exception expected');\n"
-            "}");
+    if(!skip_tests) {
+        parse_script_a(parser,
+                "function testException(func, type, number) {\n"
+                "    try {\n"
+                "        func();\n"
+                "    }catch(e) {\n"
+                "        ok(e.name === type, 'e.name = ' + e.name + ', expected ' + type)\n"
+                "        ok(e.number === number, 'e.number = ' + e.number + ', expected ' + number);\n"
+                "        return;\n"
+                "    }\n"
+                "    ok(false, 'exception expected');\n"
+                "}");
+    }
 
     return parser;
 }
@@ -800,7 +804,7 @@ static void test_ActiveXObject(void)
     IActiveScriptParse *parser;
     IDispatchEx *proc;
 
-    parser = create_script();
+    parser = create_script(FALSE);
 
     SET_EXPECT(Host_QS_SecMgr);
     SET_EXPECT(ProcessUrlAction);
@@ -845,7 +849,7 @@ static void test_ActiveXObject(void)
     IDispatchEx_Release(proc);
     IUnknown_Release(parser);
 
-    parser = create_script();
+    parser = create_script(FALSE);
     proc = parse_procedure_a(parser, "(new ActiveXObject('Wine.Test')).reportSuccess();");
 
     SET_EXPECT(Host_QS_SecMgr);
@@ -867,7 +871,7 @@ static void test_ActiveXObject(void)
     IDispatchEx_Release(proc);
     IUnknown_Release(parser);
 
-    parser = create_script();
+    parser = create_script(FALSE);
     QS_SecMgr_hres = E_NOINTERFACE;
 
     SET_EXPECT(Host_QS_SecMgr);
@@ -876,7 +880,7 @@ static void test_ActiveXObject(void)
 
     IUnknown_Release(parser);
 
-    parser = create_script();
+    parser = create_script(FALSE);
     ProcessUrlAction_hres = E_FAIL;
 
     SET_EXPECT(Host_QS_SecMgr);
@@ -887,7 +891,7 @@ static void test_ActiveXObject(void)
 
     IUnknown_Release(parser);
 
-    parser = create_script();
+    parser = create_script(FALSE);
     ProcessUrlAction_policy = URLPOLICY_DISALLOW;
 
     SET_EXPECT(Host_QS_SecMgr);
@@ -898,7 +902,7 @@ static void test_ActiveXObject(void)
 
     IUnknown_Release(parser);
 
-    parser = create_script();
+    parser = create_script(FALSE);
     CreateInstance_hres = E_FAIL;
 
     SET_EXPECT(Host_QS_SecMgr);
@@ -911,7 +915,7 @@ static void test_ActiveXObject(void)
 
     IUnknown_Release(parser);
 
-    parser = create_script();
+    parser = create_script(FALSE);
     QueryCustomPolicy_hres = E_FAIL;
 
     SET_EXPECT(Host_QS_SecMgr);
@@ -926,7 +930,7 @@ static void test_ActiveXObject(void)
 
     IUnknown_Release(parser);
 
-    parser = create_script();
+    parser = create_script(FALSE);
     QueryCustomPolicy_psize = 6;
 
     SET_EXPECT(Host_QS_SecMgr);
@@ -945,7 +949,7 @@ static void test_ActiveXObject(void)
 
     IUnknown_Release(parser);
 
-    parser = create_script();
+    parser = create_script(FALSE);
     QueryCustomPolicy_policy = URLPOLICY_DISALLOW;
 
     SET_EXPECT(Host_QS_SecMgr);
@@ -981,7 +985,7 @@ static void test_ActiveXObject(void)
 
     IUnknown_Release(parser);
 
-    parser = create_script();
+    parser = create_script(FALSE);
     object_with_site = &ObjectWithSite;
 
     SET_EXPECT(Host_QS_SecMgr);
@@ -1062,18 +1066,24 @@ static BOOL register_activex(void)
 
 static BOOL check_jscript(void)
 {
+    IActiveScriptProperty *script_prop;
     IActiveScriptParse *parser;
     BSTR str;
     HRESULT hres;
 
-    parser = create_script();
+    parser = create_script(TRUE);
     if(!parser)
         return FALSE;
 
     str = a2bstr("if(!('localeCompare' in String.prototype)) throw 1;");
     hres = IActiveScriptParse64_ParseScriptText(parser, str, NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
     SysFreeString(str);
+
+    if(hres == S_OK)
+        hres = IUnknown_QueryInterface(parser, &IID_IActiveScriptProperty, (void**)&script_prop);
     IUnknown_Release(parser);
+    if(hres == S_OK)
+        IActiveScriptProperty_Release(script_prop);
 
     return hres == S_OK;
 }
diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c
index f7f1e30..ce25781 100644
--- a/dlls/jscript/tests/jscript.c
+++ b/dlls/jscript/tests/jscript.c
@@ -335,10 +335,9 @@ static HRESULT set_script_prop(IActiveScript *engine, DWORD property, VARIANT *v
 
     hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptProperty,
             (void**)&script_prop);
-    if(FAILED(hres)) {
-        win_skip("IActiveScriptProperty not supported\n");
-        return E_NOTIMPL;
-    }
+    ok(hres == S_OK, "Could not get IActiveScriptProperty: %08x\n", hres);
+    if(FAILED(hres))
+        return hres;
 
     hres = IActiveScriptProperty_SetProperty(script_prop, property, NULL, val);
     IActiveScriptProperty_Release(script_prop);
@@ -523,12 +522,29 @@ static void test_jscript2(void)
     ok(!ref, "ref = %d\n", ref);
 }
 
+static BOOL check_jscript(void)
+{
+    IActiveScriptProperty *script_prop;
+    HRESULT hres;
+
+    hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
+            &IID_IActiveScriptProperty, (void**)&script_prop);
+    if(SUCCEEDED(hres))
+        IActiveScriptProperty_Release(script_prop);
+
+    return hres == S_OK;
+}
+
 START_TEST(jscript)
 {
     CoInitialize(NULL);
 
-    test_jscript();
-    test_jscript2();
+    if(check_jscript()) {
+        test_jscript();
+        test_jscript2();
+    }else {
+        win_skip("Broken engine, probably too old\n");
+    }
 
     CoUninitialize();
 }
diff --git a/dlls/jscript/tests/run.c b/dlls/jscript/tests/run.c
index 303907e..4df315c 100644
--- a/dlls/jscript/tests/run.c
+++ b/dlls/jscript/tests/run.c
@@ -1090,9 +1090,16 @@ static void run_tests(void)
 
 static BOOL check_jscript(void)
 {
+    IActiveScriptProperty *script_prop;
     BSTR str;
     HRESULT hres;
 
+    hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
+            &IID_IActiveScriptProperty, (void**)&script_prop);
+    if(FAILED(hres))
+        return FALSE;
+    IActiveScriptProperty_Release(script_prop);
+
     str = a2bstr("if(!('localeCompare' in String.prototype)) throw 1;");
     hres = parse_script(0, str);
     SysFreeString(str);




More information about the wine-cvs mailing list