static void run_from_res(const char *name) { const char *data; DWORD size, len; BSTR str; HRSRC src; HRESULT hres; strict_dispid_check = FALSE; test_name = name; src = FindResourceA(NULL, name, (LPCSTR)40); ok(src != NULL, "Could not find resource %s\n", name); size = SizeofResource(NULL, src); data = LoadResource(NULL, src); len = MultiByteToWideChar(CP_ACP, 0, data, size, NULL, 0); str = SysAllocStringLen(NULL, len); MultiByteToWideChar(CP_ACP, 0, data, size, str, len); SET_EXPECT(global_success_d); SET_EXPECT(global_success_i); hres = parse_script(SCRIPTITEM_GLOBALMEMBERS, str); CHECK_CALLED(global_success_d); CHECK_CALLED(global_success_i); ok(hres == S_OK, "parse_script failed: %08x\n", hres); SysFreeString(str); }
static void test_default_handler_run(void) { const CLSID test_server_clsid = {0x0f77e570,0x80c3,0x11e2,{0x9e,0x96,0x08,0x00,0x20,0x0c,0x9a,0x66}}; IUnknown *unk; IRunnableObject *ro; DWORD class_reg; HRESULT hres; if(!GetProcAddress(GetModuleHandle("ole32"), "CoRegisterSurrogateEx")) { win_skip("skipping OleCreateDefaultHandler tests\n"); return; } hres = CoRegisterClassObject(&test_server_clsid, (IUnknown*)&ClassFactory, CLSCTX_INPROC_SERVER, 0, &class_reg); ok(hres == S_OK, "CoRegisterClassObject failed: %x\n", hres); hres = OleCreateDefaultHandler(&test_server_clsid, NULL, &IID_IUnknown, (void**)&unk); ok(hres == S_OK, "OleCreateDefaultHandler failed: %x\n", hres); hres = IUnknown_QueryInterface(unk, &IID_IRunnableObject, (void**)&ro); ok(hres == S_OK, "QueryInterface(IRunnableObject) failed: %x\n", hres); IUnknown_Release(unk); hres = IRunnableObject_Run(ro, NULL); ok(hres == REGDB_E_CLASSNOTREG, "Run returned: %x, expected REGDB_E_CLASSNOTREG\n", hres); IRunnableObject_Release(ro); SET_EXPECT(CF_QueryInterface_IMarshal); CoRevokeClassObject(class_reg); todo_wine CHECK_CALLED(CF_QueryInterface_IMarshal); hres = CoRegisterClassObject(&test_server_clsid, (IUnknown*)&ClassFactory, CLSCTX_LOCAL_SERVER, 0, &class_reg); ok(hres == S_OK, "CoRegisterClassObject failed: %x\n", hres); hres = OleCreateDefaultHandler(&test_server_clsid, NULL, &IID_IUnknown, (void**)&unk); ok(hres == S_OK, "OleCreateDefaultHandler failed: %x\n", hres); hres = IUnknown_QueryInterface(unk, &IID_IRunnableObject, (void**)&ro); ok(hres == S_OK, "QueryInterface(IRunnableObject) failed: %x\n", hres); IUnknown_Release(unk); SET_EXPECT(CF_QueryInterface_ClassFactory); SET_EXPECT(CF_CreateInstance); hres = IRunnableObject_Run(ro, NULL); todo_wine ok(hres == S_OK, "Run failed: %x\n", hres); CHECK_CALLED(CF_QueryInterface_ClassFactory); CHECK_CALLED(CF_CreateInstance); IRunnableObject_Release(ro); SET_EXPECT(CF_QueryInterface_IMarshal); CoRevokeClassObject(class_reg); todo_wine CHECK_CALLED(CF_QueryInterface_IMarshal); }
static void test_wcsncat_s(void) { static wchar_t abcW[] = {'a','b','c',0}; int ret; wchar_t dst[4]; wchar_t src[4]; if (!p_wcsncat_s) { win_skip("skipping wcsncat_s tests\n"); return; } if(!p_set_invalid_parameter_handler) { win_skip("_set_invalid_parameter_handler not found\n"); return; } memcpy(src, abcW, sizeof(abcW)); dst[0] = 0; SET_EXPECT(invalid_parameter_handler); ret = p_wcsncat_s(NULL, 4, src, 4); ok(ret == EINVAL, "err = %d\n", ret); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); ret = p_wcsncat_s(dst, 0, src, 4); ok(ret == EINVAL, "err = %d\n", ret); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); ret = p_wcsncat_s(dst, 0, src, _TRUNCATE); ok(ret == EINVAL, "err = %d\n", ret); CHECK_CALLED(invalid_parameter_handler); ret = p_wcsncat_s(dst, 4, NULL, 0); ok(ret == 0, "err = %d\n", ret); dst[0] = 0; SET_EXPECT(invalid_parameter_handler); ret = p_wcsncat_s(dst, 2, src, 4); ok(ret == ERANGE, "err = %d\n", ret); CHECK_CALLED(invalid_parameter_handler); dst[0] = 0; ret = p_wcsncat_s(dst, 2, src, _TRUNCATE); ok(ret == STRUNCATE, "err = %d\n", ret); ok(dst[0] == 'a' && dst[1] == 0, "dst is %s\n", wine_dbgstr_w(dst)); memcpy(dst, abcW, sizeof(abcW)); dst[3] = 'd'; SET_EXPECT(invalid_parameter_handler); ret = p_wcsncat_s(dst, 4, src, 4); ok(ret == EINVAL, "err = %d\n", ret); CHECK_CALLED(invalid_parameter_handler); }
static void test_URLOpenStreamW(void) { HRESULT hr; hr = URLOpenStreamW(NULL, NULL, 0, &BindStatusCallback); ok(hr == E_INVALIDARG, "URLOpenStreamW should have failed with E_INVALIDARG instead of 0x%08x\n", hr); SET_EXPECT(GetBindInfo); SET_EXPECT(QueryInterface_IServiceProvider); SET_EXPECT(OnStartBinding); SET_EXPECT(OnProgress_SENDINGREQUEST); SET_EXPECT(OnProgress_MIMETYPEAVAILABLE); SET_EXPECT(OnProgress_BEGINDOWNLOADDATA); SET_EXPECT(OnProgress_ENDDOWNLOADDATA); SET_EXPECT(OnDataAvailable); SET_EXPECT(OnStopBinding); hr = URLOpenStreamW(NULL, INDEX_HTML, 0, &BindStatusCallback); ok(hr == S_OK, "URLOpenStreamW failed with error 0x%08x\n", hr); CHECK_CALLED(GetBindInfo); todo_wine CHECK_CALLED(QueryInterface_IServiceProvider); CHECK_CALLED(OnStartBinding); CHECK_CALLED(OnProgress_SENDINGREQUEST); CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE); CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA); CHECK_CALLED(OnProgress_ENDDOWNLOADDATA); CHECK_CALLED(OnDataAvailable); CHECK_CALLED(OnStopBinding); }
static void test_gc(void) { IActiveScriptParse *parser; IActiveScript *engine; BSTR src; HRESULT hres; strict_dispid_check = FALSE; engine = create_script(); if(!engine) return; hres = IActiveScript_QueryInterface(engine, &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(engine, &ActiveScriptSite); ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres); hres = IActiveScript_AddNamedItem(engine, testW, SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE|SCRIPTITEM_GLOBALMEMBERS); ok(hres == S_OK, "AddNamedItem failed: %08x\n", hres); hres = IActiveScript_SetScriptState(engine, SCRIPTSTATE_STARTED); ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08x\n", hres); src = a2bstr( "class C\n" " Public ref\n" " Public Sub Class_Terminate\n" " Call reportSuccess()\n" " End Sub\n" "End Class\n" "Dim x\n" "set x = new C\n" "set x.ref = x\n" "set x = nothing\n"); hres = IActiveScriptParse64_ParseScriptText(parser, src, NULL, NULL, NULL, 0, 0, 0, NULL, NULL); ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres); SysFreeString(src); SET_EXPECT(global_success_d); SET_EXPECT(global_success_i); IActiveScript_Close(engine); CHECK_CALLED(global_success_d); CHECK_CALLED(global_success_i); IActiveScript_Release(engine); IUnknown_Release(parser); }
static void test_URLOpenBlockingStreamW(void) { HRESULT hr; IStream *pStream = NULL; char buffer[256]; hr = URLOpenBlockingStreamW(NULL, NULL, &pStream, 0, &BindStatusCallback); ok(hr == E_INVALIDARG, "URLOpenBlockingStreamW should have failed with E_INVALIDARG instead of 0x%08x\n", hr); if (0) /* crashes on Win2k */ { hr = URLOpenBlockingStreamW(NULL, INDEX_HTML, NULL, 0, &BindStatusCallback); ok(hr == E_INVALIDARG, "URLOpenBlockingStreamW should have failed with E_INVALIDARG instead of 0x%08x\n", hr); } SET_EXPECT(GetBindInfo); SET_EXPECT(QueryInterface_IServiceProvider); SET_EXPECT(OnStartBinding); SET_EXPECT(OnProgress_SENDINGREQUEST); SET_EXPECT(OnProgress_MIMETYPEAVAILABLE); SET_EXPECT(OnProgress_BEGINDOWNLOADDATA); SET_EXPECT(OnProgress_ENDDOWNLOADDATA); SET_EXPECT(OnStopBinding); hr = URLOpenBlockingStreamW(NULL, INDEX_HTML, &pStream, 0, &BindStatusCallback); ok(hr == S_OK, "URLOpenBlockingStreamW failed with error 0x%08x\n", hr); CHECK_CALLED(GetBindInfo); todo_wine CHECK_CALLED(QueryInterface_IServiceProvider); CHECK_CALLED(OnStartBinding); CHECK_CALLED(OnProgress_SENDINGREQUEST); CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE); CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA); CHECK_CALLED(OnProgress_ENDDOWNLOADDATA); CHECK_CALLED(OnStopBinding); ok(pStream != NULL, "pStream is NULL\n"); if(pStream) { buffer[0] = 0; hr = IStream_Read(pStream, buffer, sizeof(buffer), NULL); ok(hr == S_OK, "IStream_Read failed with error 0x%08x\n", hr); ok(!memcmp(buffer, szHtmlDoc, sizeof(szHtmlDoc)-1), "read data differs from file\n"); IStream_Release(pStream); } hr = URLOpenBlockingStreamW(NULL, INDEX_HTML, &pStream, 0, NULL); ok(hr == S_OK, "URLOpenBlockingStreamW failed with error 0x%08x\n", hr); ok(pStream != NULL, "pStream is NULL\n"); if(pStream) { buffer[0] = 0; hr = IStream_Read(pStream, buffer, sizeof(buffer), NULL); ok(hr == S_OK, "IStream_Read failed with error 0x%08x\n", hr); ok(!memcmp(buffer, szHtmlDoc, sizeof(szHtmlDoc)-1), "read data differs from file\n"); IStream_Release(pStream); } }
static void test_protocol_fail(IInternetProtocol *protocol, LPCWSTR url, HRESULT expected_hres) { HRESULT hres; SET_EXPECT(GetBindInfo); SET_EXPECT(ReportResult); expect_hrResult = expected_hres; hres = IInternetProtocol_Start(protocol, url, &protocol_sink, &bind_info, 0, 0); ok(hres == expected_hres, "expected: %08x got: %08x\n", expected_hres, hres); CHECK_CALLED(GetBindInfo); CHECK_CALLED(ReportResult); }
static HRESULT _protocol_start(unsigned line, IInternetProtocol *protocol, LPCWSTR url, BOOL expect_mime) { HRESULT hres; SET_EXPECT(GetBindInfo); if(test_protocol == MK_PROTOCOL) SET_EXPECT(ReportProgress_DIRECTBIND); SET_EXPECT(ReportProgress_SENDINGREQUEST); if(expect_mime) SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE); if(test_protocol == MK_PROTOCOL) SET_EXPECT(ReportProgress_CACHEFILENAMEAVAIABLE); SET_EXPECT(ReportData); if(test_protocol == ITS_PROTOCOL) SET_EXPECT(ReportProgress_BEGINDOWNLOADDATA); SET_EXPECT(ReportResult); expect_hrResult = S_OK; hres = IInternetProtocol_Start(protocol, url, &protocol_sink, &bind_info, 0, 0); if(FAILED(hres)) { SET_CALLED(GetBindInfo); if(test_protocol == MK_PROTOCOL) SET_CALLED(ReportProgress_DIRECTBIND); SET_CALLED(ReportProgress_SENDINGREQUEST); if(expect_mime) SET_CALLED(ReportProgress_MIMETYPEAVAILABLE); if(test_protocol == MK_PROTOCOL) SET_EXPECT(ReportProgress_CACHEFILENAMEAVAIABLE); SET_CALLED(ReportData); if(test_protocol == ITS_PROTOCOL) SET_CALLED(ReportProgress_BEGINDOWNLOADDATA); SET_CALLED(ReportResult); }else { CHECK_CALLED(GetBindInfo); if(test_protocol == MK_PROTOCOL) SET_CALLED(ReportProgress_DIRECTBIND); CHECK_CALLED(ReportProgress_SENDINGREQUEST); if(expect_mime) CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE); if(test_protocol == MK_PROTOCOL) SET_EXPECT(ReportProgress_CACHEFILENAMEAVAIABLE); CHECK_CALLED(ReportData); if(test_protocol == ITS_PROTOCOL) CHECK_CALLED(ReportProgress_BEGINDOWNLOADDATA); CHECK_CALLED(ReportResult); } return hres; }
static void parse_script(IActiveScriptParse *parse, const char *src) { BSTR str; HRESULT hres; SET_EXPECT(OnEnterScript); SET_EXPECT(OnLeaveScript); str = a2bstr(src); hres = IActiveScriptParse_ParseScriptText(parse, str, NULL, NULL, NULL, 0, 0, 0, NULL, NULL); SysFreeString(str); ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres); CHECK_CALLED(OnEnterScript); CHECK_CALLED(OnLeaveScript); }
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 run_test(const char *file_name) { char command[MAX_PATH]; STARTUPINFOA si = {sizeof(si)}; PROCESS_INFORMATION pi; BOOL bres; script_name = file_name; sprintf(command, "wscript.exe %s arg1 2 ar3", file_name); SET_EXPECT(reportSuccess); bres = CreateProcessA(NULL, command, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); if(!bres) { win_skip("script.exe is not available\n"); CLEAR_CALLED(reportSuccess); return; } wscript_process = pi.hProcess; WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hThread); CloseHandle(pi.hProcess); CHECK_CALLED(reportSuccess); }
static void test_AviCo(void) { IPersistPropertyBag *persist_bag; IPin *pin, *in_pin, *out_pin; IEnumPins *enum_pins; IBaseFilter *avico; PIN_INFO pin_info; HRESULT hres; static const WCHAR inputW[] = {'I','n','p','u','t',0}; static const WCHAR outputW[] = {'O','u','t','p','u','t',0}; hres = CoCreateInstance(&CLSID_AVICo, NULL, CLSCTX_INPROC_SERVER, &IID_IBaseFilter, (void**)&avico); if(hres == REGDB_E_CLASSNOTREG) { win_skip("CLSID_AVICo not restered\n"); return; } ok(hres == S_OK, "Could not create CLSID_AVICo class: %08x\n", hres); hres = IBaseFilter_QueryInterface(avico, &IID_IPin, (void**)&pin); ok(hres == E_NOINTERFACE, "QueryInterface(IID_IPin) returned: %08x\n", hres); hres = IBaseFilter_QueryInterface(avico, &IID_IPersistPropertyBag, (void**)&persist_bag); ok(hres == S_OK, "QueryInterface(IID_IPersistPropertyBag) returned: %08x\n", hres); SET_EXPECT(Read_FccHandler); hres = IPersistPropertyBag_Load(persist_bag, &PropertyBag, NULL); ok(hres == S_OK, "Load failed: %08x\n", hres); CHECK_CALLED(Read_FccHandler); IPersistPropertyBag_Release(persist_bag); hres = IBaseFilter_EnumPins(avico, &enum_pins); ok(hres == S_OK, "EnumPins failed: %08x\n", hres); hres = IEnumPins_Next(enum_pins, 1, &in_pin, NULL); ok(hres == S_OK, "Next failed: %08x\n", hres); hres = IPin_QueryPinInfo(in_pin, &pin_info); ok(hres == S_OK, "QueryPinInfo failed: %08x\n", hres); ok(pin_info.pFilter == avico, "pin_info.pFilter != avico\n"); ok(pin_info.dir == PINDIR_INPUT, "pin_info.dir = %d\n", pin_info.dir); ok(!lstrcmpW(pin_info.achName, inputW), "pin_info.achName = %s\n", wine_dbgstr_w(pin_info.achName)); hres = IEnumPins_Next(enum_pins, 1, &out_pin, NULL); ok(hres == S_OK, "Next failed: %08x\n", hres); hres = IPin_QueryPinInfo(out_pin, &pin_info); ok(hres == S_OK, "QueryPinInfo failed: %08x\n", hres); ok(pin_info.pFilter == avico, "pin_info.pFilter != avico\n"); ok(pin_info.dir == PINDIR_OUTPUT, "pin_info.dir = %d\n", pin_info.dir); ok(!lstrcmpW(pin_info.achName, outputW), "pin_info.achName = %s\n", wine_dbgstr_w(pin_info.achName)); IEnumPins_Release(enum_pins); IPin_Release(in_pin); IPin_Release(out_pin); IBaseFilter_Release(avico); }
static void test_SHCreateQueryCancelAutoPlayMoniker(void) { IBindCtx *ctxt; IMoniker *mon; IUnknown *unk; CLSID clsid; HRESULT hr; DWORD sys; if (!pSHCreateQueryCancelAutoPlayMoniker) { win_skip("SHCreateQueryCancelAutoPlayMoniker is not available, skipping tests.\n"); return; } hr = pSHCreateQueryCancelAutoPlayMoniker(NULL); ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); hr = pSHCreateQueryCancelAutoPlayMoniker(&mon); ok(hr == S_OK, "got 0x%08x\n", hr); sys = -1; hr = IMoniker_IsSystemMoniker(mon, &sys); ok(hr == S_OK, "got 0x%08x\n", hr); ok(sys == MKSYS_CLASSMONIKER, "got %d\n", sys); memset(&clsid, 0, sizeof(clsid)); hr = IMoniker_GetClassID(mon, &clsid); ok(hr == S_OK, "got 0x%08x\n", hr); ok(IsEqualGUID(&clsid, &CLSID_ClassMoniker), "got %s\n", wine_dbgstr_guid(&clsid)); /* extract used CLSID that implements this hook */ SET_EXPECT(autoplay_BindToObject); SET_EXPECT(autoplay_GetClassObject); CreateBindCtx(0, &ctxt); hr = IMoniker_BindToObject(mon, ctxt, &test_moniker, &IID_IQueryCancelAutoPlay, (void**)&unk); ok(hr == E_NOTIMPL, "got 0x%08x\n", hr); IBindCtx_Release(ctxt); CHECK_CALLED(autoplay_BindToObject); CHECK_CALLED(autoplay_GetClassObject); IMoniker_Release(mon); }
static void protocol_start(IInternetProtocol *protocol, const WCHAR *url) { HRESULT hres; SET_EXPECT(GetBindInfo); SET_EXPECT(ReportResult); SET_EXPECT(ReportProgress); SET_EXPECT(ReportData); expect_hrResult = S_OK; expect_hr_win32err = FALSE; hres = IInternetProtocol_Start(protocol, url, &protocol_sink, &bind_info, 0, 0); ok(hres == S_OK, "Start failed: %08x\n", hres); CHECK_CALLED(GetBindInfo); CHECK_CALLED(ReportProgress); CHECK_CALLED(ReportData); CHECK_CALLED(ReportResult); }
static void test__memicmp_l(void) { static const char *s1 = "abc"; static const char *s2 = "aBd"; int ret; ok(p_set_invalid_parameter_handler(test_invalid_parameter_handler) == NULL, "Invalid parameter handler was already set\n"); ret = p__memicmp_l(NULL, NULL, 0, NULL); ok(!ret, "got %d\n", ret); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; ret = p__memicmp_l(NULL, NULL, 1, NULL); ok(ret == _NLSCMPERROR, "got %d\n", ret); ok(errno == 0xdeadbeef, "Unexpected errno = %d\n", errno); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; ret = p__memicmp_l(s1, NULL, 1, NULL); ok(ret == _NLSCMPERROR, "got %d\n", ret); ok(errno == 0xdeadbeef, "Unexpected errno = %d\n", errno); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; ret = p__memicmp_l(NULL, s2, 1, NULL); ok(ret == _NLSCMPERROR, "got %d\n", ret); ok(errno == 0xdeadbeef, "Unexpected errno = %d\n", errno); CHECK_CALLED(invalid_parameter_handler); ret = p__memicmp_l(s1, s2, 2, NULL); ok(!ret, "got %d\n", ret); ret = p__memicmp_l(s1, s2, 3, NULL); ok(ret == -1, "got %d\n", ret); ok(p_set_invalid_parameter_handler(NULL) == test_invalid_parameter_handler, "Cannot reset invalid parameter handler\n"); }
static void test_protocol_fail(IInternetProtocol *protocol, LPCWSTR url, HRESULT expected_hres, BOOL expect_win32err) { HRESULT hres; SET_EXPECT(GetBindInfo); SET_EXPECT(ReportResult); expect_hrResult = expected_hres; expect_hr_win32err = expect_win32err; hres = IInternetProtocol_Start(protocol, url, &protocol_sink, &bind_info, 0, 0); if(expect_win32err) ok((hres&0xffff0000) == ((FACILITY_WIN32 << 16)|0x80000000) || hres == expect_hrResult, "expected win32 err or %08x got: %08x\n", expected_hres, hres); else ok(hres == expect_hrResult, "expected: %08x got: %08x\n", expect_hrResult, hres); CHECK_CALLED(GetBindInfo); CHECK_CALLED(ReportResult); }
static void test_controlfp_s(void) { unsigned int cur; int ret; if (!p_controlfp_s) { win_skip("_controlfp_s not found\n"); return; } SET_EXPECT(invalid_parameter_handler); ret = p_controlfp_s( NULL, ~0, ~0 ); ok( ret == EINVAL, "wrong result %d\n", ret ); CHECK_CALLED(invalid_parameter_handler); cur = 0xdeadbeef; SET_EXPECT(invalid_parameter_handler); ret = p_controlfp_s( &cur, ~0, ~0 ); ok( ret == EINVAL, "wrong result %d\n", ret ); ok( cur != 0xdeadbeef, "value not set\n" ); CHECK_CALLED(invalid_parameter_handler); cur = 0xdeadbeef; ret = p_controlfp_s( &cur, 0, 0 ); ok( !ret, "wrong result %d\n", ret ); ok( cur != 0xdeadbeef, "value not set\n" ); SET_EXPECT(invalid_parameter_handler); cur = 0xdeadbeef; ret = p_controlfp_s( &cur, 0x80000000, 0x80000000 ); ok( ret == EINVAL, "wrong result %d\n", ret ); ok( cur != 0xdeadbeef, "value not set\n" ); CHECK_CALLED(invalid_parameter_handler); cur = 0xdeadbeef; /* mask is only checked when setting invalid bits */ ret = p_controlfp_s( &cur, 0, 0x80000000 ); ok( !ret, "wrong result %d\n", ret ); ok( cur != 0xdeadbeef, "value not set\n" ); }
static void test_HlinkResolveMonikerForData(void) { IBindCtx *bctx; HRESULT hres; CreateBindCtx(0, &bctx); _bctx = bctx; SET_EXPECT(IsSystemMoniker); SET_EXPECT(GetDisplayName); SET_EXPECT(BindToStorage); hres = HlinkResolveMonikerForData(&Moniker, 0, bctx, 0, NULL, &BindStatusCallback, NULL); ok(hres == S_OK, "HlinkResolveMonikerForData failed: %08x\n", hres); CHECK_CALLED(IsSystemMoniker); CHECK_CALLED(GetDisplayName); CHECK_CALLED(BindToStorage); IBindCtx_Release(bctx); }
static void test_protocol_fail(IInternetProtocol *protocol, LPCWSTR url, HRESULT expected_hres, BOOL expect_win32err) { HRESULT hres; SET_EXPECT(GetBindInfo); SET_EXPECT(ReportResult); expect_hrResult = expected_hres; expect_hr_win32err = expect_win32err; hres = IInternetProtocol_Start(protocol, url, &protocol_sink, &bind_info, 0, 0); if(expect_win32err) ok((hres&0xffff0000) == ((FACILITY_WIN32 << 16)|0x80000000) || hres == expect_hrResult, "expected win32 err or %08x got: %08x\n", expected_hres, hres); else ok(hres == expected_hres || ((expected_hres == E_INVALIDARG || expected_hres == HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND)) && hres == MK_E_SYNTAX), "expected: %08x got: %08x\n", expected_hres, hres); CHECK_CALLED(GetBindInfo); CHECK_CALLED(ReportResult); }
static void test_vbscript_initializing(void) { IActiveScriptParse *parse; IActiveScript *script; ULONG ref; HRESULT hres; script = create_vbscript(); hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse); ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres); test_state(script, SCRIPTSTATE_UNINITIALIZED); SET_EXPECT(GetLCID); hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite); ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres); CHECK_CALLED(GetLCID); SET_EXPECT(OnStateChange_INITIALIZED); hres = IActiveScriptParse_InitNew(parse); ok(hres == S_OK, "InitNew failed: %08x\n", hres); CHECK_CALLED(OnStateChange_INITIALIZED); hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite); ok(hres == E_UNEXPECTED, "SetScriptSite failed: %08x, expected E_UNEXPECTED\n", hres); SET_EXPECT(OnStateChange_CLOSED); hres = IActiveScript_Close(script); ok(hres == S_OK, "Close failed: %08x\n", hres); CHECK_CALLED(OnStateChange_CLOSED); test_state(script, SCRIPTSTATE_CLOSED); IActiveScriptParse_Release(parse); ref = IActiveScript_Release(script); ok(!ref, "ref = %d\n", ref); }
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__strtoi64(void) { __int64 res; unsigned __int64 ures; if(!p_strtoi64 || !p_strtoui64) { win_skip("_strtoi64 or _strtoui64 not found\n"); return; } if(!p_set_invalid_parameter_handler) { win_skip("_set_invalid_parameter_handler not found\n"); return; } errno = 0xdeadbeef; SET_EXPECT(invalid_parameter_handler); res = p_strtoi64(NULL, NULL, 10); ok(res == 0, "res != 0\n"); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); res = p_strtoi64("123", NULL, 1); ok(res == 0, "res != 0\n"); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); res = p_strtoi64("123", NULL, 37); ok(res == 0, "res != 0\n"); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); ures = p_strtoui64(NULL, NULL, 10); ok(ures == 0, "res = %d\n", (int)ures); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); ures = p_strtoui64("123", NULL, 1); ok(ures == 0, "res = %d\n", (int)ures); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); ures = p_strtoui64("123", NULL, 37); ok(ures == 0, "res = %d\n", (int)ures); CHECK_CALLED(invalid_parameter_handler); ok(errno == 0xdeadbeef, "errno = %x\n", errno); }
static void test_vbscript_release(void) { IActiveScriptParse *parser; IActiveScript *vbscript; ULONG ref; HRESULT hres; vbscript = create_vbscript(); hres = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParse, (void**)&parser); ok(hres == S_OK, "Could not get IActiveScriptParse iface: %08x\n", hres); test_state(vbscript, SCRIPTSTATE_UNINITIALIZED); test_safety(vbscript); SET_EXPECT(GetLCID); hres = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite); ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres); CHECK_CALLED(GetLCID); test_state(vbscript, SCRIPTSTATE_UNINITIALIZED); SET_EXPECT(OnStateChange_INITIALIZED); hres = IActiveScriptParse_InitNew(parser); ok(hres == S_OK, "InitNew failed: %08x\n", hres); CHECK_CALLED(OnStateChange_INITIALIZED); test_state(vbscript, SCRIPTSTATE_INITIALIZED); SET_EXPECT(OnStateChange_CONNECTED); hres = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED); ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres); CHECK_CALLED(OnStateChange_CONNECTED); test_state(vbscript, SCRIPTSTATE_CONNECTED); IActiveScriptParse_Release(parser); SET_EXPECT(OnStateChange_DISCONNECTED); SET_EXPECT(OnStateChange_INITIALIZED); SET_EXPECT(OnStateChange_CLOSED); ref = IActiveScript_Release(vbscript); ok(!ref, "ref = %d\n", ref); CHECK_CALLED(OnStateChange_DISCONNECTED); CHECK_CALLED(OnStateChange_INITIALIZED); CHECK_CALLED(OnStateChange_CLOSED); }
static void test_navigate(IWebBrowser2 *wb, const char *url) { VARIANT urlv, emptyv; MSG msg; HRESULT hres; SET_EXPECT(Invoke_NAVIGATECOMPLETE2); V_VT(&urlv) = VT_BSTR; V_BSTR(&urlv) = a2bstr(url); V_VT(&emptyv) = VT_EMPTY; hres = IWebBrowser2_Navigate2(wb, &urlv, &emptyv, &emptyv, &emptyv, &emptyv); ok(hres == S_OK, "Navigate2 failed: %08x\n", hres); SysFreeString(V_BSTR(&urlv)); while(!navigate_complete && GetMessageW(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } CHECK_CALLED(Invoke_NAVIGATECOMPLETE2); }
static void test_vbscript_uninitializing(void) { IActiveScriptParse *parse; IActiveScript *script; IDispatchEx *dispex; ULONG ref; HRESULT hres; static const WCHAR script_textW[] = {'F','u','n','c','t','i','o','n',' ','f','\n','E','n','d',' ','F','u','n','c','t','i','o','n','\n',0}; script = create_vbscript(); hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse); ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres); test_state(script, SCRIPTSTATE_UNINITIALIZED); hres = IActiveScriptParse_InitNew(parse); ok(hres == S_OK, "InitNew failed: %08x\n", hres); SET_EXPECT(GetLCID); SET_EXPECT(OnStateChange_INITIALIZED); hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite); ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres); CHECK_CALLED(GetLCID); CHECK_CALLED(OnStateChange_INITIALIZED); test_state(script, SCRIPTSTATE_INITIALIZED); hres = IActiveScriptParse_ParseScriptText(parse, script_textW, NULL, NULL, NULL, 0, 1, 0x42, NULL, NULL); ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres); hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite); ok(hres == E_UNEXPECTED, "SetScriptSite failed: %08x, expected E_UNEXPECTED\n", hres); SET_EXPECT(OnStateChange_UNINITIALIZED); hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED); ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres); CHECK_CALLED(OnStateChange_UNINITIALIZED); test_state(script, SCRIPTSTATE_UNINITIALIZED); hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED); ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres); SET_EXPECT(GetLCID); SET_EXPECT(OnStateChange_INITIALIZED); hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite); ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres); CHECK_CALLED(GetLCID); CHECK_CALLED(OnStateChange_INITIALIZED); SET_EXPECT(OnStateChange_CONNECTED); SET_EXPECT(OnEnterScript); SET_EXPECT(OnLeaveScript); hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED); ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres); CHECK_CALLED(OnStateChange_CONNECTED); CHECK_CALLED(OnEnterScript); CHECK_CALLED(OnLeaveScript); test_state(script, SCRIPTSTATE_CONNECTED); dispex = get_script_dispatch(script); ok(dispex != NULL, "dispex == NULL\n"); if(dispex) IDispatchEx_Release(dispex); SET_EXPECT(OnStateChange_DISCONNECTED); SET_EXPECT(OnStateChange_INITIALIZED); SET_EXPECT(OnStateChange_UNINITIALIZED); hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED); ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres); CHECK_CALLED(OnStateChange_DISCONNECTED); CHECK_CALLED(OnStateChange_INITIALIZED); CHECK_CALLED(OnStateChange_UNINITIALIZED); test_state(script, SCRIPTSTATE_UNINITIALIZED); hres = IActiveScript_Close(script); ok(hres == S_OK, "Close failed: %08x\n", hres); test_state(script, SCRIPTSTATE_CLOSED); hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED); ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x, expected E_UNEXPECTED\n", hres); test_state(script, SCRIPTSTATE_CLOSED); SET_EXPECT(GetLCID); SET_EXPECT(OnStateChange_INITIALIZED); hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite); ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres); CHECK_CALLED(GetLCID); CHECK_CALLED(OnStateChange_INITIALIZED); test_state(script, SCRIPTSTATE_INITIALIZED); SET_EXPECT(OnStateChange_CLOSED); hres = IActiveScript_Close(script); ok(hres == S_OK, "Close failed: %08x\n", hres); CHECK_CALLED(OnStateChange_CLOSED); test_state(script, SCRIPTSTATE_CLOSED); IActiveScriptParse_Release(parse); ref = IActiveScript_Release(script); ok(!ref, "ref = %d\n", ref); }
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); parse_script_a("x = 1\n Call ok(x = 1, \"x = \" & x)"); strict_dispid_check = FALSE; parse_script_a("Sub testsub\n" "x = 1\n" "Call ok(x = 1, \"x = \" & x)\n" "End Sub\n" "Call testsub()"); run_from_res("lang.vbs"); run_from_res("api.vbs"); test_gc(); }
static void test_simple_script(void) { IHTMLDocument2 *doc; SET_EXPECT(CreateInstance); SET_EXPECT(GetInterfaceSafetyOptions); SET_EXPECT(SetInterfaceSafetyOptions); SET_EXPECT(SetProperty); SET_EXPECT(InitNew); SET_EXPECT(SetScriptSite); SET_EXPECT(GetScriptState); SET_EXPECT(SetScriptState_STARTED); SET_EXPECT(AddNamedItem); SET_EXPECT(ParseScriptText); SET_EXPECT(SetScriptState_CONNECTED); doc = create_and_load_doc(simple_script_str); if(!doc) return; CHECK_CALLED(CreateInstance); CHECK_CALLED(GetInterfaceSafetyOptions); CHECK_CALLED(SetInterfaceSafetyOptions); CHECK_CALLED(SetProperty); CHECK_CALLED(InitNew); CHECK_CALLED(SetScriptSite); CHECK_CALLED(GetScriptState); CHECK_CALLED(SetScriptState_STARTED); CHECK_CALLED(AddNamedItem); CHECK_CALLED(ParseScriptText); CHECK_CALLED(SetScriptState_CONNECTED); if(site) IActiveScriptSite_Release(site); SET_EXPECT(SetScriptState_DISCONNECTED); SET_EXPECT(Close); IHTMLDocument2_Release(doc); CHECK_CALLED(SetScriptState_DISCONNECTED); CHECK_CALLED(Close); }
static void set_xhr_site(IXMLHttpRequest *xhr) { IObjectWithSite *obj_site; HRESULT hr; hr = IXMLHttpRequest_QueryInterface(xhr, &IID_IObjectWithSite, (void**)&obj_site); ok(hr == S_OK, "Could not get IObjectWithSite iface: %08x\n", hr); g_enablecallchecks = TRUE; SET_EXPECT(site_qi_IServiceProvider); SET_EXPECT(sp_queryservice_SID_SBindHost); SET_EXPECT(sp_queryservice_SID_SContainerDispatch_htmldoc2); SET_EXPECT(sp_queryservice_SID_secmgr_htmldoc2); SET_EXPECT(sp_queryservice_SID_secmgr_xmldomdoc); SET_EXPECT(sp_queryservice_SID_secmgr_secmgr); /* calls to IHTMLDocument2 */ SET_EXPECT(htmldoc2_get_all); SET_EXPECT(collection_get_length); SET_EXPECT(htmldoc2_get_url); SET_EXPECT(site_qi_IXMLDOMDocument); SET_EXPECT(site_qi_IOleClientSite); hr = IObjectWithSite_SetSite(obj_site, &testsite); EXPECT_HR(hr, S_OK); CHECK_CALLED(site_qi_IServiceProvider); todo_wine CHECK_CALLED(sp_queryservice_SID_SBindHost); CHECK_CALLED(sp_queryservice_SID_SContainerDispatch_htmldoc2); CHECK_CALLED(sp_queryservice_SID_secmgr_htmldoc2); todo_wine CHECK_CALLED(sp_queryservice_SID_secmgr_xmldomdoc); /* this one isn't very reliable CHECK_CALLED(sp_queryservice_SID_secmgr_secmgr); */ todo_wine { CHECK_CALLED(htmldoc2_get_all); CHECK_CALLED(collection_get_length); } CHECK_CALLED(htmldoc2_get_url); todo_wine { CHECK_CALLED(site_qi_IXMLDOMDocument); CHECK_CALLED(site_qi_IOleClientSite); } g_enablecallchecks = FALSE; IObjectWithSite_Release(obj_site); }
static void test_XMLHTTP(void) { static const char bodyA[] = "mode=Test"; static const char urlA[] = "http://crossover.codeweavers.com/posttest.php"; static const char xmltestA[] = "http://crossover.codeweavers.com/xmltest.xml"; static const WCHAR wszExpectedResponse[] = {'F','A','I','L','E','D',0}; static const CHAR xmltestbodyA[] = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<a>TEST</a>\n"; IXMLHttpRequest *xhr; IObjectWithSite *obj_site, *obj_site2; BSTR bstrResponse, str, str1; VARIANT varbody, varbody_ref; VARIANT dummy; LONG state, status, bound; IDispatch *event; void *ptr; HRESULT hr; HGLOBAL g; xhr = create_xhr(); VariantInit(&dummy); V_VT(&dummy) = VT_ERROR; V_ERROR(&dummy) = DISP_E_MEMBERNOTFOUND; hr = IXMLHttpRequest_put_onreadystatechange(xhr, NULL); EXPECT_HR(hr, S_OK); hr = IXMLHttpRequest_abort(xhr); EXPECT_HR(hr, S_OK); V_VT(&varbody) = VT_I2; V_I2(&varbody) = 1; hr = IXMLHttpRequest_get_responseBody(xhr, &varbody); EXPECT_HR(hr, E_PENDING); ok(V_VT(&varbody) == VT_EMPTY, "got type %d\n", V_VT(&varbody)); ok(V_I2(&varbody) == 1, "got %d\n", V_I2(&varbody)); V_VT(&varbody) = VT_I2; V_I2(&varbody) = 1; hr = IXMLHttpRequest_get_responseStream(xhr, &varbody); EXPECT_HR(hr, E_PENDING); ok(V_VT(&varbody) == VT_EMPTY, "got type %d\n", V_VT(&varbody)); ok(V_I2(&varbody) == 1, "got %d\n", V_I2(&varbody)); /* send before open */ hr = IXMLHttpRequest_send(xhr, dummy); ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr); /* initial status code */ hr = IXMLHttpRequest_get_status(xhr, NULL); ok(hr == E_POINTER || broken(hr == E_INVALIDARG) /* <win8 */, "got 0x%08x\n", hr); status = 0xdeadbeef; hr = IXMLHttpRequest_get_status(xhr, &status); ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr); ok(status == READYSTATE_UNINITIALIZED || broken(status == 0xdeadbeef) /* <win8 */, "got %d\n", status); hr = IXMLHttpRequest_get_statusText(xhr, &str); ok(hr == E_FAIL, "got 0x%08x\n", hr); /* invalid parameters */ test_open(xhr, NULL, NULL, E_INVALIDARG); test_open(xhr, "POST", NULL, E_INVALIDARG); test_open(xhr, NULL, urlA, E_INVALIDARG); hr = IXMLHttpRequest_setRequestHeader(xhr, NULL, NULL); EXPECT_HR(hr, E_INVALIDARG); hr = IXMLHttpRequest_setRequestHeader(xhr, _bstr_("header1"), NULL); ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr); hr = IXMLHttpRequest_setRequestHeader(xhr, NULL, _bstr_("value1")); EXPECT_HR(hr, E_INVALIDARG); hr = IXMLHttpRequest_setRequestHeader(xhr, _bstr_("header1"), _bstr_("value1")); ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr); hr = IXMLHttpRequest_get_readyState(xhr, NULL); ok(hr == E_POINTER || broken(hr == E_INVALIDARG) /* <win8 */, "got 0x%08x\n", hr); state = -1; hr = IXMLHttpRequest_get_readyState(xhr, &state); EXPECT_HR(hr, S_OK); ok(state == READYSTATE_UNINITIALIZED, "got %d, expected READYSTATE_UNINITIALIZED\n", state); httpreq = xhr; event = create_dispevent(); EXPECT_REF(event, 1); hr = IXMLHttpRequest_put_onreadystatechange(xhr, event); EXPECT_HR(hr, S_OK); EXPECT_REF(event, 2); g_unexpectedcall = g_expectedcall = 0; test_open(xhr, "POST", urlA, S_OK); ok(g_unexpectedcall == 0, "unexpected disp event call\n"); ok(g_expectedcall == 1 || broken(g_expectedcall == 0) /* win2k */, "no expected disp event call\n"); /* status code after ::open() */ status = 0xdeadbeef; hr = IXMLHttpRequest_get_status(xhr, &status); ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr); ok(status == READYSTATE_UNINITIALIZED || broken(status == 0xdeadbeef) /* <win8 */, "got %d\n", status); state = -1; hr = IXMLHttpRequest_get_readyState(xhr, &state); EXPECT_HR(hr, S_OK); ok(state == READYSTATE_LOADING, "got %d, expected READYSTATE_LOADING\n", state); hr = IXMLHttpRequest_abort(xhr); EXPECT_HR(hr, S_OK); state = -1; hr = IXMLHttpRequest_get_readyState(xhr, &state); EXPECT_HR(hr, S_OK); ok(state == READYSTATE_UNINITIALIZED || broken(state == READYSTATE_LOADING) /* win2k */, "got %d, expected READYSTATE_UNINITIALIZED\n", state); test_open(xhr, "POST", urlA, S_OK); hr = IXMLHttpRequest_setRequestHeader(xhr, _bstr_("header1"), _bstr_("value1")); EXPECT_HR(hr, S_OK); hr = IXMLHttpRequest_setRequestHeader(xhr, NULL, _bstr_("value1")); EXPECT_HR(hr, E_INVALIDARG); hr = IXMLHttpRequest_setRequestHeader(xhr, _bstr_(""), _bstr_("value1")); EXPECT_HR(hr, E_INVALIDARG); V_VT(&varbody) = VT_BSTR; V_BSTR(&varbody) = _bstr_(bodyA); hr = IXMLHttpRequest_send(xhr, varbody); if (hr == INET_E_RESOURCE_NOT_FOUND) { skip("No connection could be made with crossover.codeweavers.com\n"); IXMLHttpRequest_Release(xhr); return; } EXPECT_HR(hr, S_OK); /* response headers */ hr = IXMLHttpRequest_getAllResponseHeaders(xhr, NULL); ok(hr == E_POINTER || broken(hr == E_INVALIDARG) /* <win8 */, "got 0x%08x\n", hr); hr = IXMLHttpRequest_getAllResponseHeaders(xhr, &str); EXPECT_HR(hr, S_OK); /* status line is stripped already */ ok(memcmp(str, _bstr_("HTTP"), 4*sizeof(WCHAR)), "got response headers %s\n", wine_dbgstr_w(str)); ok(*str, "got empty headers\n"); hr = IXMLHttpRequest_getAllResponseHeaders(xhr, &str1); EXPECT_HR(hr, S_OK); ok(str1 != str, "got %p\n", str1); SysFreeString(str1); SysFreeString(str); hr = IXMLHttpRequest_getResponseHeader(xhr, NULL, NULL); EXPECT_HR(hr, E_INVALIDARG); hr = IXMLHttpRequest_getResponseHeader(xhr, _bstr_("Date"), NULL); ok(hr == E_POINTER || broken(hr == E_INVALIDARG) /* <win8 */, "got 0x%08x\n", hr); hr = IXMLHttpRequest_getResponseHeader(xhr, _bstr_("Date"), &str); EXPECT_HR(hr, S_OK); ok(*str != ' ', "got leading space in header %s\n", wine_dbgstr_w(str)); SysFreeString(str); /* status code after ::send() */ status = 0xdeadbeef; hr = IXMLHttpRequest_get_status(xhr, &status); EXPECT_HR(hr, S_OK); ok(status == 200, "got %d\n", status); hr = IXMLHttpRequest_get_statusText(xhr, NULL); ok(hr == E_POINTER || broken(hr == E_INVALIDARG) /* <win8 */, "got 0x%08x\n", hr); hr = IXMLHttpRequest_get_statusText(xhr, &str); EXPECT_HR(hr, S_OK); ok(!lstrcmpW(str, _bstr_("OK")), "got status %s\n", wine_dbgstr_w(str)); SysFreeString(str); /* another ::send() after completed request */ V_VT(&varbody) = VT_BSTR; V_BSTR(&varbody) = _bstr_(bodyA); hr = IXMLHttpRequest_send(xhr, varbody); ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr); hr = IXMLHttpRequest_get_responseText(xhr, &bstrResponse); EXPECT_HR(hr, S_OK); /* the server currently returns "FAILED" because the Content-Type header is * not what the server expects */ if(hr == S_OK) { ok(!memcmp(bstrResponse, wszExpectedResponse, sizeof(wszExpectedResponse)), "expected %s, got %s\n", wine_dbgstr_w(wszExpectedResponse), wine_dbgstr_w(bstrResponse)); SysFreeString(bstrResponse); } /* POST: VT_VARIANT|VT_BYREF body */ test_open(xhr, "POST", urlA, S_OK); V_VT(&varbody_ref) = VT_VARIANT|VT_BYREF; V_VARIANTREF(&varbody_ref) = &varbody; hr = IXMLHttpRequest_send(xhr, varbody_ref); EXPECT_HR(hr, S_OK); /* GET request */ test_open(xhr, "GET", xmltestA, S_OK); V_VT(&varbody) = VT_EMPTY; hr = IXMLHttpRequest_send(xhr, varbody); if (hr == INET_E_RESOURCE_NOT_FOUND) { skip("No connection could be made with crossover.codeweavers.com\n"); IXMLHttpRequest_Release(xhr); return; } EXPECT_HR(hr, S_OK); hr = IXMLHttpRequest_get_responseText(xhr, NULL); ok(hr == E_POINTER || broken(hr == E_INVALIDARG) /* <win8 */, "got 0x%08x\n", hr); hr = IXMLHttpRequest_get_responseText(xhr, &bstrResponse); EXPECT_HR(hr, S_OK); ok(!memcmp(bstrResponse, _bstr_(xmltestbodyA), sizeof(xmltestbodyA)*sizeof(WCHAR)), "expected %s, got %s\n", xmltestbodyA, wine_dbgstr_w(bstrResponse)); SysFreeString(bstrResponse); hr = IXMLHttpRequest_get_responseBody(xhr, NULL); EXPECT_HR(hr, E_INVALIDARG); V_VT(&varbody) = VT_EMPTY; hr = IXMLHttpRequest_get_responseBody(xhr, &varbody); EXPECT_HR(hr, S_OK); ok(V_VT(&varbody) == (VT_ARRAY|VT_UI1), "got type %d, expected %d\n", V_VT(&varbody), VT_ARRAY|VT_UI1); ok(SafeArrayGetDim(V_ARRAY(&varbody)) == 1, "got %d, expected one dimension\n", SafeArrayGetDim(V_ARRAY(&varbody))); bound = -1; hr = SafeArrayGetLBound(V_ARRAY(&varbody), 1, &bound); EXPECT_HR(hr, S_OK); ok(bound == 0, "got %d, expected zero bound\n", bound); hr = SafeArrayAccessData(V_ARRAY(&varbody), &ptr); EXPECT_HR(hr, S_OK); ok(memcmp(ptr, xmltestbodyA, sizeof(xmltestbodyA)-1) == 0, "got wrong body data\n"); SafeArrayUnaccessData(V_ARRAY(&varbody)); VariantClear(&varbody); /* get_responseStream */ hr = IXMLHttpRequest_get_responseStream(xhr, NULL); EXPECT_HR(hr, E_INVALIDARG); V_VT(&varbody) = VT_EMPTY; hr = IXMLHttpRequest_get_responseStream(xhr, &varbody); ok(V_VT(&varbody) == VT_UNKNOWN, "got type %d\n", V_VT(&varbody)); EXPECT_HR(hr, S_OK); EXPECT_REF(V_UNKNOWN(&varbody), 1); g = NULL; hr = GetHGlobalFromStream((IStream*)V_UNKNOWN(&varbody), &g); EXPECT_HR(hr, S_OK); ok(g != NULL, "got %p\n", g); IDispatch_Release(event); /* interaction with object site */ EXPECT_REF(xhr, 1); hr = IXMLHttpRequest_QueryInterface(xhr, &IID_IObjectWithSite, (void**)&obj_site); EXPECT_HR(hr, S_OK); todo_wine { EXPECT_REF(xhr, 1); EXPECT_REF(obj_site, 1); } hr = IObjectWithSite_SetSite(obj_site, NULL); ok(hr == S_OK, "got 0x%08x\n", hr); IObjectWithSite_AddRef(obj_site); todo_wine { EXPECT_REF(obj_site, 2); EXPECT_REF(xhr, 1); } IObjectWithSite_Release(obj_site); hr = IXMLHttpRequest_QueryInterface(xhr, &IID_IObjectWithSite, (void**)&obj_site2); EXPECT_HR(hr, S_OK); todo_wine { EXPECT_REF(xhr, 1); EXPECT_REF(obj_site, 1); EXPECT_REF(obj_site2, 1); ok(obj_site != obj_site2, "expected new instance\n"); } IObjectWithSite_Release(obj_site); set_xhr_site(xhr); /* try to set site another time */ /* to be removed once IObjectWithSite is properly separated */ SET_EXPECT(site_qi_IServiceProvider); SET_EXPECT(sp_queryservice_SID_SContainerDispatch_htmldoc2); hr = IObjectWithSite_SetSite(obj_site2, &testsite); EXPECT_HR(hr, S_OK); todo_wine EXPECT_REF(xhr, 1); IXMLHttpRequest_Release(xhr); /* still works after request is released */ /* to be removed once IObjectWithSite is properly separated */ SET_EXPECT(site_qi_IServiceProvider); SET_EXPECT(sp_queryservice_SID_SContainerDispatch_htmldoc2); hr = IObjectWithSite_SetSite(obj_site2, &testsite); EXPECT_HR(hr, S_OK); IObjectWithSite_Release(obj_site2); free_bstrs(); }
static void test_vbscript(void) { IActiveScriptParseProcedure2 *parse_proc; IActiveScriptParse *parser; IActiveScript *vbscript; ULONG ref; HRESULT hres; vbscript = create_vbscript(); hres = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParse, (void**)&parser); ok(hres == S_OK, "Could not get IActiveScriptParse iface: %08x\n", hres); test_state(vbscript, SCRIPTSTATE_UNINITIALIZED); test_safety(vbscript); SET_EXPECT(GetLCID); hres = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite); ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres); CHECK_CALLED(GetLCID); test_state(vbscript, SCRIPTSTATE_UNINITIALIZED); SET_EXPECT(OnStateChange_INITIALIZED); hres = IActiveScriptParse_InitNew(parser); ok(hres == S_OK, "InitNew failed: %08x\n", hres); CHECK_CALLED(OnStateChange_INITIALIZED); test_state(vbscript, SCRIPTSTATE_INITIALIZED); hres = IActiveScriptParse_InitNew(parser); ok(hres == E_UNEXPECTED, "InitNew failed: %08x, expected E_UNEXPECTED\n", hres); SET_EXPECT(OnStateChange_CONNECTED); hres = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED); ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres); CHECK_CALLED(OnStateChange_CONNECTED); test_state(vbscript, SCRIPTSTATE_CONNECTED); SET_EXPECT(OnStateChange_DISCONNECTED); SET_EXPECT(OnStateChange_INITIALIZED); SET_EXPECT(OnStateChange_CLOSED); hres = IActiveScript_Close(vbscript); ok(hres == S_OK, "Close failed: %08x\n", hres); CHECK_CALLED(OnStateChange_DISCONNECTED); CHECK_CALLED(OnStateChange_INITIALIZED); CHECK_CALLED(OnStateChange_CLOSED); test_state(vbscript, SCRIPTSTATE_CLOSED); test_no_script_dispatch(vbscript); IActiveScriptParse_Release(parser); hres = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParseProcedure, (void**)&parse_proc); ok(hres == E_NOINTERFACE, "Got IActiveScriptParseProcedure interface, expected E_NOTIMPL\n"); hres = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParseProcedure2, (void**)&parse_proc); ok(hres == S_OK, "Could not get IActiveScriptParseProcedure2 interface\n"); IActiveScriptParseProcedure2_Release(parse_proc); ref = IActiveScript_Release(vbscript); ok(!ref, "ref = %d\n", ref); }