Module: wine Branch: master Commit: b23ccb1303485b3df3932b30e7665c5a0f9ed887 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b23ccb1303485b3df3932b30e7...
Author: Jacek Caban jacek@codeweavers.com Date: Thu May 14 00:49:21 2009 +0200
urlmon: Added PI_MIMEVERIFICATION tests.
---
dlls/urlmon/tests/protocol.c | 100 ++++++++++++++++++++++++++++++----------- 1 files changed, 73 insertions(+), 27 deletions(-)
diff --git a/dlls/urlmon/tests/protocol.c b/dlls/urlmon/tests/protocol.c index a973211..725c3cc 100644 --- a/dlls/urlmon/tests/protocol.c +++ b/dlls/urlmon/tests/protocol.c @@ -115,7 +115,7 @@ static IInternetProtocol *async_protocol = NULL; static BOOL first_data_notif = FALSE, http_is_first = FALSE, http_post_test = FALSE; static int state = 0, prot_state; -static DWORD bindf = 0, ex_priority = 0; +static DWORD bindf, ex_priority , pi; static IInternetProtocol *binding_protocol; static IInternetBindInfo *prot_bind_info; static IInternetProtocolSink *binding_sink; @@ -125,6 +125,7 @@ static BOOL binding_test; static PROTOCOLDATA protocoldata, *pdata; static DWORD prot_read; static BOOL security_problem = FALSE; +static BOOL async_read_pending;
static enum { FILE_TEST, @@ -1088,7 +1089,7 @@ static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl, static HRESULT WINAPI Protocol_Continue(IInternetProtocol *iface, PROTOCOLDATA *pProtocolData) { - DWORD bscf = 0; + DWORD bscf = 0, pr; HRESULT hres;
CHECK_EXPECT(Continue); @@ -1121,10 +1122,12 @@ static HRESULT WINAPI Protocol_Continue(IInternetProtocol *iface, IHttpNegotiate_Release(http_negotiate); ok(hres == S_OK, "OnResponse failed: %08x\n", hres);
- SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE); + if(!(pi & PI_MIMEVERIFICATION)) + SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE); hres = IInternetProtocolSink_ReportProgress(binding_sink, BINDSTATUS_MIMETYPEAVAILABLE, text_htmlW); - CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE); + if(!(pi & PI_MIMEVERIFICATION)) + CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE); ok(hres == S_OK, "ReportProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08x\n", hres);
@@ -1137,11 +1140,32 @@ static HRESULT WINAPI Protocol_Continue(IInternetProtocol *iface, break; }
- SET_EXPECT(ReportData); + pr = prot_read; + if(pi & PI_MIMEVERIFICATION) { + if(pr < 200) + SET_EXPECT(Read); + if(pr == 200) { + SET_EXPECT(Read); + SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE); + } + } + if(!(pi & PI_MIMEVERIFICATION) || pr >= 200) + SET_EXPECT(ReportData); + hres = IInternetProtocolSink_ReportData(binding_sink, bscf, 100, 400); - CHECK_CALLED(ReportData); ok(hres == S_OK, "ReportData failed: %08x\n", hres);
+ if(pi & PI_MIMEVERIFICATION) { + if(pr < 200) + CHECK_CALLED(Read); + if(pr == 200) { + CLEAR_CALLED(Read); + CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE); + } + } + if(!(pi & PI_MIMEVERIFICATION) || pr >= 200) + CHECK_CALLED(ReportData); + if(prot_state == 3) prot_state = 4;
@@ -1177,14 +1201,26 @@ static HRESULT WINAPI Protocol_Resume(IInternetProtocol *iface) static HRESULT WINAPI Protocol_Read(IInternetProtocol *iface, void *pv, ULONG cb, ULONG *pcbRead) { - static BOOL b = TRUE; + if(pi & PI_MIMEVERIFICATION) { + CHECK_EXPECT2(Read);
- CHECK_EXPECT(Read); + if(prot_read < 300) { + ok(pv != expect_pv, "pv == expect_pv\n"); + if(prot_read < 300) + ok(cb == 2048-prot_read, "cb=%d\n", cb); + else + ok(cb == 700, "cb=%d\n", cb); + }else { + ok(expect_pv <= pv && (BYTE*)pv < (BYTE*)expect_pv + cb, "pv != expect_pv\n"); + } + }else { + CHECK_EXPECT(Read);
- ok(pv == expect_pv, "pv != expect_pv\n"); - ok(cb == 1000, "cb=%d\n", cb); + ok(pv == expect_pv, "pv != expect_pv\n"); + ok(cb == 1000, "cb=%d\n", cb); + ok(!*pcbRead, "*pcbRead = %d\n", *pcbRead); + } ok(pcbRead != NULL, "pcbRead == NULL\n"); - ok(!*pcbRead, "*pcbRead = %d\n", *pcbRead);
if(prot_state == 3) { HRESULT hres; @@ -1196,8 +1232,10 @@ static HRESULT WINAPI Protocol_Read(IInternetProtocol *iface, void *pv, return S_FALSE; }
- if((b = !b)) + if((async_read_pending = !async_read_pending)) { + *pcbRead = 0; return tested_protocol == HTTP_TEST || tested_protocol == HTTPS_TEST ? E_PENDING : S_FALSE; + }
memset(pv, 'x', 100); prot_read += *pcbRead = 100; @@ -1287,6 +1325,16 @@ static const IClassFactoryVtbl ClassFactoryVtbl = {
static IClassFactory ClassFactory = { &ClassFactoryVtbl };
+static void init_test(int prot, BOOL is_binding) +{ + tested_protocol = prot; + binding_test = is_binding; + first_data_notif = TRUE; + prot_read = 0; + prot_state = 0; + async_read_pending = TRUE; +} + static void test_priority(IInternetProtocol *protocol) { IInternetPriority *priority; @@ -1540,7 +1588,7 @@ static void test_file_protocol(void) { static const char html_doc[] = "<HTML></HTML>";
trace("Testing file protocol...\n"); - tested_protocol = FILE_TEST; + init_test(FILE_TEST, FALSE);
SetLastError(0xdeadbeef); file = CreateFileW(wszIndexHtml, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, @@ -1849,7 +1897,7 @@ static void test_https_protocol(void) '.','c','o','m','/','t','e','s','t','.','h','t','m','l',0};
trace("Testing https protocol (from urlmon)...\n"); - tested_protocol = HTTPS_TEST; + init_test(HTTPS_TEST, FALSE); bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON | BINDF_NOWRITECACHE; test_http_protocol_url(codeweavers_url, TRUE, TRUE); } @@ -1986,7 +2034,7 @@ static void test_mk_protocol(void) static const WCHAR wrong_url2[] = {'m','k',':','/','t','e','s','t','.','h','t','m','l',0};
trace("Testing mk protocol...\n"); - tested_protocol = MK_TEST; + init_test(MK_TEST, FALSE);
hres = CoGetClassObject(&CLSID_MkProtocol, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void**)&unk); @@ -2059,8 +2107,7 @@ static void test_CreateBinding(void) static const WCHAR wsz_test[] = {'t','e','s','t',0};
trace("Testing CreateBinding...\n"); - tested_protocol = BIND_TEST; - binding_test = TRUE; + init_test(BIND_TEST, TRUE);
hres = CoInternetGetSession(0, &session, 0); ok(hres == S_OK, "CoInternetGetSession failed: %08x\n", hres); @@ -2168,19 +2215,16 @@ static void test_CreateBinding(void) IInternetSession_Release(session); }
-static void test_binding(int prot) +static void test_binding(int prot, DWORD grf_pi) { IInternetProtocol *protocol; IInternetSession *session; ULONG ref; HRESULT hres;
- trace("Testing %s binding...\n", debugstr_w(protocol_names[prot])); - - tested_protocol = prot; - binding_test = TRUE; - first_data_notif = TRUE; - prot_read = 0; + trace("Testing %s binding (grfPI %x)...\n", debugstr_w(protocol_names[prot]), grf_pi); + init_test(prot, TRUE); + pi = grf_pi;
hres = CoInternetGetSession(0, &session, 0); ok(hres == S_OK, "CoInternetGetSession failed: %08x\n", hres); @@ -2208,7 +2252,7 @@ static void test_binding(int prot) SET_EXPECT(Start);
expect_hrResult = S_OK; - hres = IInternetProtocol_Start(protocol, binding_urls[prot], &protocol_sink, &bind_info, 0, 0); + hres = IInternetProtocol_Start(protocol, binding_urls[prot], &protocol_sink, &bind_info, pi, 0); ok(hres == S_OK, "Start failed: %08x\n", hres);
CHECK_CALLED(QueryService_InternetProtocol); @@ -2264,8 +2308,10 @@ START_TEST(protocol) test_gopher_protocol(); test_mk_protocol(); test_CreateBinding(); - test_binding(FILE_TEST); - test_binding(HTTP_TEST); + test_binding(FILE_TEST, 0); + test_binding(HTTP_TEST, 0); + test_binding(FILE_TEST, PI_MIMEVERIFICATION); + test_binding(HTTP_TEST, PI_MIMEVERIFICATION);
CloseHandle(event_complete); CloseHandle(event_complete2);