static void run_tests(void) { strict_dispid_check = TRUE; parse_script_a(""); parse_script_a("' empty ;"); SET_EXPECT(global_success_d); SET_EXPECT(global_success_i); parse_script_a("reportSuccess"); CHECK_CALLED(global_success_d); CHECK_CALLED(global_success_i); SET_EXPECT(global_success_d); SET_EXPECT(global_success_i); parse_script_a("reportSuccess()"); CHECK_CALLED(global_success_d); CHECK_CALLED(global_success_i); SET_EXPECT(global_success_d); SET_EXPECT(global_success_i); parse_script_a("Call reportSuccess"); CHECK_CALLED(global_success_d); CHECK_CALLED(global_success_i); SET_EXPECT(global_vbvar_d); SET_EXPECT(global_vbvar_i); parse_script_a("Option Explicit\nvbvar = 3"); CHECK_CALLED(global_vbvar_d); CHECK_CALLED(global_vbvar_i); SET_EXPECT(global_vbvar_d); SET_EXPECT(global_vbvar_i); parse_script_a("Option Explicit\nvbvar() = 3"); CHECK_CALLED(global_vbvar_d); CHECK_CALLED(global_vbvar_i); SET_EXPECT(testobj_propget_d); SET_EXPECT(testobj_propget_i); parse_script_a("dim x\nx = testObj.propget"); CHECK_CALLED(testobj_propget_d); CHECK_CALLED(testobj_propget_i); SET_EXPECT(testobj_propput_d); SET_EXPECT(testobj_propput_i); parse_script_a("testObj.propput = 1"); CHECK_CALLED(testobj_propput_d); CHECK_CALLED(testobj_propput_i); run_from_res("lang.vbs"); run_from_res("api.vbs"); test_gc(); }
static IActiveScriptParse *create_script(BOOL skip_tests, BOOL use_sec_mgr) { IActiveScriptParse *parser; IActiveScript *script; HRESULT hres; QS_SecMgr_hres = S_OK; ProcessUrlAction_hres = S_OK; ProcessUrlAction_policy = URLPOLICY_ALLOW; CreateInstance_hres = S_OK; QueryCustomPolicy_hres = S_OK; QueryCustomPolicy_psize = sizeof(DWORD); QueryCustomPolicy_policy = URLPOLICY_ALLOW; QI_IDispatch_hres = S_OK; SetSite_hres = S_OK; hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, &IID_IActiveScript, (void**)&script); if(!skip_tests) ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres); if(FAILED(hres)) return NULL; if(!skip_tests) set_safety_options((IUnknown*)script, use_sec_mgr); hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parser); ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres); hres = IActiveScriptParse64_InitNew(parser); ok(hres == S_OK, "InitNew failed: %08x\n", hres); hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite); ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres); hres = IActiveScript_AddNamedItem(script, testW, SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE|SCRIPTITEM_GLOBALMEMBERS); ok(hres == S_OK, "AddNamedItem failed: %08x\n", hres); hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED); ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08x\n", hres); IActiveScript_Release(script); 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; }
static void run_scripts(void) { IActiveScriptParse *parser; HRESULT hres; parser = create_script(); hres = IActiveScriptParse64_QueryInterface(parser, &IID_IVariantChangeType, (void**)&script_change_type); ok(hres == S_OK, "Could not get IVariantChangeType iface: %08x\n", hres); SET_EXPECT(testArgConv); parse_script_a(parser, "var obj = {" " toString: function() { return 'strval'; }," " valueOf: function() { return 10; }" "};" "testArgConv(obj);"); CHECK_CALLED(testArgConv); test_change_types(script_change_type, stored_obj); IDispatch_Release(stored_obj); IVariantChangeType_Release(script_change_type); IUnknown_Release(parser); }
static void test_GetObject(void) { IActiveScriptParse *parser; HRESULT hres; /* Never allowed with security manager */ parser = create_script(TRUE); hres = parse_script_ae(parser, "Call GetObject(\"clsid:" TESTOBJINST_CLSID "\").reportSuccess()"); ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08x\n", hres); IActiveScriptParse_Release(parser); parser = create_script(FALSE); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(SetSite); SET_EXPECT(reportSuccess); hres = parse_script_ae(parser, "Call GetObject(\"clsid:" TESTOBJINST_CLSID "\").reportSuccess()"); if(hres == HRESULT_FROM_WIN32(ERROR_MOD_NOT_FOUND)) { /* Workaround for broken win2k */ win_skip("got unexpected error %08x\n", hres); CLEAR_CALLED(QI_IObjectWithSite); CLEAR_CALLED(SetSite); CLEAR_CALLED(reportSuccess); IActiveScriptParse_Release(parser); return; } ok(hres == S_OK, "hres = %08x\n", hres); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(SetSite); CHECK_CALLED(reportSuccess); SetSite_hres = E_FAIL; SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(SetSite); hres = parse_script_ae(parser, "Call GetObject(\"clsid:" TESTOBJINST_CLSID "\").reportSuccess()"); ok(hres == E_FAIL, "hres = %08x\n", hres); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(SetSite); QI_IObjectWithSite_hres = E_NOINTERFACE; SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(reportSuccess); parse_script_a(parser, "Call GetObject(\"clsid:" TESTOBJINST_CLSID "\").reportSuccess()"); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(reportSuccess); IActiveScriptParse_Release(parser); /* Invalid moniker */ parser = create_script(FALSE); hres = parse_script_ae(parser, "Call GetObject(\"nonexistent:test\").reportSuccess()"); ok(hres == MK_E_SYNTAX, "hres = %08x\n", hres); IActiveScriptParse_Release(parser); }
static void test_ActiveXObject(void) { IActiveScriptParse *parser; IDispatchEx *proc; parser = create_script(FALSE, TRUE); SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(reportSuccess); parse_script_a(parser, "(new ActiveXObject('Wine.Test')).reportSuccess();"); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(reportSuccess); proc = parse_procedure_a(parser, "(new ActiveXObject('Wine.Test')).reportSuccess();"); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(reportSuccess); call_procedure(proc, NULL); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(reportSuccess); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(reportSuccess); call_procedure(proc, &caller_sp); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(reportSuccess); IDispatchEx_Release(proc); IUnknown_Release(parser); parser = create_script(FALSE, TRUE); proc = parse_procedure_a(parser, "(new ActiveXObject('Wine.Test')).reportSuccess();"); SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(reportSuccess); call_procedure(proc, &caller_sp); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(reportSuccess); parse_script_a(parser, "testException(function() { new ActiveXObject('Wine.TestABC'); }, 'Error', -2146827859);"); IDispatchEx_Release(proc); IUnknown_Release(parser); parser = create_script(FALSE, TRUE); QS_SecMgr_hres = E_NOINTERFACE; SET_EXPECT(Host_QS_SecMgr); parse_script_a(parser, "testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);"); CHECK_CALLED(Host_QS_SecMgr); IUnknown_Release(parser); parser = create_script(FALSE, TRUE); ProcessUrlAction_hres = E_FAIL; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); parse_script_a(parser, "testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);"); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); IUnknown_Release(parser); parser = create_script(FALSE, TRUE); ProcessUrlAction_policy = URLPOLICY_DISALLOW; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); parse_script_a(parser, "testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);"); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); IUnknown_Release(parser); parser = create_script(FALSE, TRUE); CreateInstance_hres = E_FAIL; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); parse_script_a(parser, "testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);"); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); IUnknown_Release(parser); parser = create_script(FALSE, TRUE); QueryCustomPolicy_hres = E_FAIL; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); parse_script_a(parser, "testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);"); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); IUnknown_Release(parser); parser = create_script(FALSE, TRUE); QueryCustomPolicy_psize = 6; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(reportSuccess); parse_script_a(parser, "(new ActiveXObject('Wine.Test')).reportSuccess();"); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(reportSuccess); IUnknown_Release(parser); parser = create_script(FALSE, TRUE); QueryCustomPolicy_policy = URLPOLICY_DISALLOW; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); parse_script_a(parser, "testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);"); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); QueryCustomPolicy_psize = 6; SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); parse_script_a(parser, "testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);"); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); QueryCustomPolicy_policy = URLPOLICY_ALLOW; QueryCustomPolicy_psize = 3; SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); parse_script_a(parser, "testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);"); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); IUnknown_Release(parser); parser = create_script(FALSE, FALSE); SET_EXPECT(CreateInstance); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(reportSuccess); parse_script_a(parser, "(new ActiveXObject('Wine.Test')).reportSuccess();"); CHECK_CALLED(CreateInstance); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(reportSuccess); IUnknown_Release(parser); parser = create_script(FALSE, TRUE); object_with_site = &ObjectWithSite; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(SetSite); SET_EXPECT(reportSuccess); parse_script_a(parser, "(new ActiveXObject('Wine.Test')).reportSuccess();"); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(SetSite); CHECK_CALLED(reportSuccess); SetSite_hres = E_FAIL; SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(SetSite); parse_script_a(parser, "testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);"); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(SetSite); IUnknown_Release(parser); }
static void test_CreateObject(void) { IActiveScriptParse *parser; HRESULT hres; parser = create_script(TRUE); SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(reportSuccess); parse_script_a(parser, "Call CreateObject(\"Wine.Test\").reportSuccess()"); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(reportSuccess); IUnknown_Release(parser); parser = create_script(TRUE); hres = parse_script_ae(parser, "Call CreateObject(\"Wine.TestABC\")"); ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08x\n", hres); IUnknown_Release(parser); parser = create_script(TRUE); QS_SecMgr_hres = E_NOINTERFACE; SET_EXPECT(Host_QS_SecMgr); hres = parse_script_ae(parser, "Call CreateObject(\"Wine.Test\")"); ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08x\n", hres); CHECK_CALLED(Host_QS_SecMgr); IUnknown_Release(parser); parser = create_script(TRUE); ProcessUrlAction_hres = E_FAIL; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); hres = parse_script_ae(parser, "Call CreateObject(\"Wine.Test\")"); ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08x\n", hres); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); IUnknown_Release(parser); parser = create_script(TRUE); ProcessUrlAction_policy = URLPOLICY_DISALLOW; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); hres = parse_script_ae(parser, "Call CreateObject(\"Wine.Test\")"); ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08x\n", hres); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); IUnknown_Release(parser); parser = create_script(TRUE); CreateInstance_hres = E_FAIL; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); hres = parse_script_ae(parser, "Call CreateObject(\"Wine.Test\")"); ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08x\n", hres); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); IUnknown_Release(parser); parser = create_script(TRUE); QueryCustomPolicy_hres = E_FAIL; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); hres = parse_script_ae(parser, "Call CreateObject(\"Wine.Test\")"); ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08x\n", hres); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); IUnknown_Release(parser); parser = create_script(TRUE); QueryCustomPolicy_psize = 6; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(reportSuccess); parse_script_a(parser, "Call CreateObject(\"Wine.Test\").reportSuccess()"); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(reportSuccess); IUnknown_Release(parser); parser = create_script(TRUE); QueryCustomPolicy_policy = URLPOLICY_DISALLOW; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); hres = parse_script_ae(parser, "Call CreateObject(\"Wine.Test\")"); ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08x\n", hres); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); QueryCustomPolicy_psize = 6; SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); hres = parse_script_ae(parser, "Call CreateObject(\"Wine.Test\")"); ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08x\n", hres); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); QueryCustomPolicy_policy = URLPOLICY_ALLOW; QueryCustomPolicy_psize = 3; SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); hres = parse_script_ae(parser, "Call CreateObject(\"Wine.Test\")"); ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08x\n", hres); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); IUnknown_Release(parser); parser = create_script(FALSE); SET_EXPECT(CreateInstance); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(reportSuccess); parse_script_a(parser, "Call CreateObject(\"Wine.Test\").reportSuccess()"); CHECK_CALLED(CreateInstance); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(reportSuccess); IUnknown_Release(parser); parser = create_script(TRUE); object_with_site = &ObjectWithSite; SET_EXPECT(Host_QS_SecMgr); SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(SetSite); SET_EXPECT(reportSuccess); parse_script_a(parser, "Call CreateObject(\"Wine.Test\").reportSuccess()"); CHECK_CALLED(Host_QS_SecMgr); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(SetSite); CHECK_CALLED(reportSuccess); SetSite_hres = E_FAIL; SET_EXPECT(ProcessUrlAction); SET_EXPECT(CreateInstance); SET_EXPECT(QueryCustomPolicy); SET_EXPECT(QI_IObjectWithSite); SET_EXPECT(SetSite); hres = parse_script_ae(parser, "Call CreateObject(\"Wine.Test\")"); ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08x\n", hres); CHECK_CALLED(ProcessUrlAction); CHECK_CALLED(CreateInstance); CHECK_CALLED(QueryCustomPolicy); CHECK_CALLED(QI_IObjectWithSite); CHECK_CALLED(SetSite); IUnknown_Release(parser); }