jscript: Better checks for too old jscript.dll versions.
This commit is contained in:
parent
a7188842af
commit
a8e969236f
@ -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);
|
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;
|
IActiveScriptParse *parser;
|
||||||
IActiveScript *script;
|
IActiveScript *script;
|
||||||
@ -719,11 +719,13 @@ static IActiveScriptParse *create_script(void)
|
|||||||
|
|
||||||
hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
|
hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
|
||||||
&IID_IActiveScript, (void**)&script);
|
&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))
|
if(FAILED(hres))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
set_safety_options((IUnknown*)script);
|
if(!skip_tests)
|
||||||
|
set_safety_options((IUnknown*)script);
|
||||||
|
|
||||||
hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parser);
|
hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parser);
|
||||||
ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
|
ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
|
||||||
@ -743,17 +745,19 @@ static IActiveScriptParse *create_script(void)
|
|||||||
|
|
||||||
IActiveScript_Release(script);
|
IActiveScript_Release(script);
|
||||||
|
|
||||||
parse_script_a(parser,
|
if(!skip_tests) {
|
||||||
"function testException(func, type, number) {\n"
|
parse_script_a(parser,
|
||||||
"try {\n"
|
"function testException(func, type, number) {\n"
|
||||||
" func();\n"
|
" try {\n"
|
||||||
"}catch(e) {\n"
|
" func();\n"
|
||||||
" ok(e.name === type, 'e.name = ' + e.name + ', expected ' + type)\n"
|
" }catch(e) {\n"
|
||||||
" ok(e.number === number, 'e.number = ' + e.number + ', expected ' + number);\n"
|
" ok(e.name === type, 'e.name = ' + e.name + ', expected ' + type)\n"
|
||||||
" return;\n"
|
" ok(e.number === number, 'e.number = ' + e.number + ', expected ' + number);\n"
|
||||||
"}"
|
" return;\n"
|
||||||
"ok(false, 'exception expected');\n"
|
" }\n"
|
||||||
"}");
|
" ok(false, 'exception expected');\n"
|
||||||
|
"}");
|
||||||
|
}
|
||||||
|
|
||||||
return parser;
|
return parser;
|
||||||
}
|
}
|
||||||
@ -800,7 +804,7 @@ static void test_ActiveXObject(void)
|
|||||||
IActiveScriptParse *parser;
|
IActiveScriptParse *parser;
|
||||||
IDispatchEx *proc;
|
IDispatchEx *proc;
|
||||||
|
|
||||||
parser = create_script();
|
parser = create_script(FALSE);
|
||||||
|
|
||||||
SET_EXPECT(Host_QS_SecMgr);
|
SET_EXPECT(Host_QS_SecMgr);
|
||||||
SET_EXPECT(ProcessUrlAction);
|
SET_EXPECT(ProcessUrlAction);
|
||||||
@ -845,7 +849,7 @@ static void test_ActiveXObject(void)
|
|||||||
IDispatchEx_Release(proc);
|
IDispatchEx_Release(proc);
|
||||||
IUnknown_Release(parser);
|
IUnknown_Release(parser);
|
||||||
|
|
||||||
parser = create_script();
|
parser = create_script(FALSE);
|
||||||
proc = parse_procedure_a(parser, "(new ActiveXObject('Wine.Test')).reportSuccess();");
|
proc = parse_procedure_a(parser, "(new ActiveXObject('Wine.Test')).reportSuccess();");
|
||||||
|
|
||||||
SET_EXPECT(Host_QS_SecMgr);
|
SET_EXPECT(Host_QS_SecMgr);
|
||||||
@ -867,7 +871,7 @@ static void test_ActiveXObject(void)
|
|||||||
IDispatchEx_Release(proc);
|
IDispatchEx_Release(proc);
|
||||||
IUnknown_Release(parser);
|
IUnknown_Release(parser);
|
||||||
|
|
||||||
parser = create_script();
|
parser = create_script(FALSE);
|
||||||
QS_SecMgr_hres = E_NOINTERFACE;
|
QS_SecMgr_hres = E_NOINTERFACE;
|
||||||
|
|
||||||
SET_EXPECT(Host_QS_SecMgr);
|
SET_EXPECT(Host_QS_SecMgr);
|
||||||
@ -876,7 +880,7 @@ static void test_ActiveXObject(void)
|
|||||||
|
|
||||||
IUnknown_Release(parser);
|
IUnknown_Release(parser);
|
||||||
|
|
||||||
parser = create_script();
|
parser = create_script(FALSE);
|
||||||
ProcessUrlAction_hres = E_FAIL;
|
ProcessUrlAction_hres = E_FAIL;
|
||||||
|
|
||||||
SET_EXPECT(Host_QS_SecMgr);
|
SET_EXPECT(Host_QS_SecMgr);
|
||||||
@ -887,7 +891,7 @@ static void test_ActiveXObject(void)
|
|||||||
|
|
||||||
IUnknown_Release(parser);
|
IUnknown_Release(parser);
|
||||||
|
|
||||||
parser = create_script();
|
parser = create_script(FALSE);
|
||||||
ProcessUrlAction_policy = URLPOLICY_DISALLOW;
|
ProcessUrlAction_policy = URLPOLICY_DISALLOW;
|
||||||
|
|
||||||
SET_EXPECT(Host_QS_SecMgr);
|
SET_EXPECT(Host_QS_SecMgr);
|
||||||
@ -898,7 +902,7 @@ static void test_ActiveXObject(void)
|
|||||||
|
|
||||||
IUnknown_Release(parser);
|
IUnknown_Release(parser);
|
||||||
|
|
||||||
parser = create_script();
|
parser = create_script(FALSE);
|
||||||
CreateInstance_hres = E_FAIL;
|
CreateInstance_hres = E_FAIL;
|
||||||
|
|
||||||
SET_EXPECT(Host_QS_SecMgr);
|
SET_EXPECT(Host_QS_SecMgr);
|
||||||
@ -911,7 +915,7 @@ static void test_ActiveXObject(void)
|
|||||||
|
|
||||||
IUnknown_Release(parser);
|
IUnknown_Release(parser);
|
||||||
|
|
||||||
parser = create_script();
|
parser = create_script(FALSE);
|
||||||
QueryCustomPolicy_hres = E_FAIL;
|
QueryCustomPolicy_hres = E_FAIL;
|
||||||
|
|
||||||
SET_EXPECT(Host_QS_SecMgr);
|
SET_EXPECT(Host_QS_SecMgr);
|
||||||
@ -926,7 +930,7 @@ static void test_ActiveXObject(void)
|
|||||||
|
|
||||||
IUnknown_Release(parser);
|
IUnknown_Release(parser);
|
||||||
|
|
||||||
parser = create_script();
|
parser = create_script(FALSE);
|
||||||
QueryCustomPolicy_psize = 6;
|
QueryCustomPolicy_psize = 6;
|
||||||
|
|
||||||
SET_EXPECT(Host_QS_SecMgr);
|
SET_EXPECT(Host_QS_SecMgr);
|
||||||
@ -945,7 +949,7 @@ static void test_ActiveXObject(void)
|
|||||||
|
|
||||||
IUnknown_Release(parser);
|
IUnknown_Release(parser);
|
||||||
|
|
||||||
parser = create_script();
|
parser = create_script(FALSE);
|
||||||
QueryCustomPolicy_policy = URLPOLICY_DISALLOW;
|
QueryCustomPolicy_policy = URLPOLICY_DISALLOW;
|
||||||
|
|
||||||
SET_EXPECT(Host_QS_SecMgr);
|
SET_EXPECT(Host_QS_SecMgr);
|
||||||
@ -981,7 +985,7 @@ static void test_ActiveXObject(void)
|
|||||||
|
|
||||||
IUnknown_Release(parser);
|
IUnknown_Release(parser);
|
||||||
|
|
||||||
parser = create_script();
|
parser = create_script(FALSE);
|
||||||
object_with_site = &ObjectWithSite;
|
object_with_site = &ObjectWithSite;
|
||||||
|
|
||||||
SET_EXPECT(Host_QS_SecMgr);
|
SET_EXPECT(Host_QS_SecMgr);
|
||||||
@ -1062,18 +1066,24 @@ static BOOL register_activex(void)
|
|||||||
|
|
||||||
static BOOL check_jscript(void)
|
static BOOL check_jscript(void)
|
||||||
{
|
{
|
||||||
|
IActiveScriptProperty *script_prop;
|
||||||
IActiveScriptParse *parser;
|
IActiveScriptParse *parser;
|
||||||
BSTR str;
|
BSTR str;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
parser = create_script();
|
parser = create_script(TRUE);
|
||||||
if(!parser)
|
if(!parser)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
str = a2bstr("if(!('localeCompare' in String.prototype)) throw 1;");
|
str = a2bstr("if(!('localeCompare' in String.prototype)) throw 1;");
|
||||||
hres = IActiveScriptParse64_ParseScriptText(parser, str, NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
|
hres = IActiveScriptParse64_ParseScriptText(parser, str, NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
|
||||||
SysFreeString(str);
|
SysFreeString(str);
|
||||||
|
|
||||||
|
if(hres == S_OK)
|
||||||
|
hres = IUnknown_QueryInterface(parser, &IID_IActiveScriptProperty, (void**)&script_prop);
|
||||||
IUnknown_Release(parser);
|
IUnknown_Release(parser);
|
||||||
|
if(hres == S_OK)
|
||||||
|
IActiveScriptProperty_Release(script_prop);
|
||||||
|
|
||||||
return hres == S_OK;
|
return hres == S_OK;
|
||||||
}
|
}
|
||||||
|
@ -335,10 +335,9 @@ static HRESULT set_script_prop(IActiveScript *engine, DWORD property, VARIANT *v
|
|||||||
|
|
||||||
hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptProperty,
|
hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptProperty,
|
||||||
(void**)&script_prop);
|
(void**)&script_prop);
|
||||||
if(FAILED(hres)) {
|
ok(hres == S_OK, "Could not get IActiveScriptProperty: %08x\n", hres);
|
||||||
win_skip("IActiveScriptProperty not supported\n");
|
if(FAILED(hres))
|
||||||
return E_NOTIMPL;
|
return hres;
|
||||||
}
|
|
||||||
|
|
||||||
hres = IActiveScriptProperty_SetProperty(script_prop, property, NULL, val);
|
hres = IActiveScriptProperty_SetProperty(script_prop, property, NULL, val);
|
||||||
IActiveScriptProperty_Release(script_prop);
|
IActiveScriptProperty_Release(script_prop);
|
||||||
@ -523,12 +522,29 @@ static void test_jscript2(void)
|
|||||||
ok(!ref, "ref = %d\n", ref);
|
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)
|
START_TEST(jscript)
|
||||||
{
|
{
|
||||||
CoInitialize(NULL);
|
CoInitialize(NULL);
|
||||||
|
|
||||||
test_jscript();
|
if(check_jscript()) {
|
||||||
test_jscript2();
|
test_jscript();
|
||||||
|
test_jscript2();
|
||||||
|
}else {
|
||||||
|
win_skip("Broken engine, probably too old\n");
|
||||||
|
}
|
||||||
|
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
|
@ -1090,9 +1090,16 @@ static void run_tests(void)
|
|||||||
|
|
||||||
static BOOL check_jscript(void)
|
static BOOL check_jscript(void)
|
||||||
{
|
{
|
||||||
|
IActiveScriptProperty *script_prop;
|
||||||
BSTR str;
|
BSTR str;
|
||||||
HRESULT hres;
|
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;");
|
str = a2bstr("if(!('localeCompare' in String.prototype)) throw 1;");
|
||||||
hres = parse_script(0, str);
|
hres = parse_script(0, str);
|
||||||
SysFreeString(str);
|
SysFreeString(str);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user