urlmon: Implemented IUriBuilder_{Get/Set}Port.

This commit is contained in:
Thomas Mullaly 2010-09-06 16:34:21 -04:00 committed by Alexandre Julliard
parent 23e312e324
commit a4eee68818
2 changed files with 152 additions and 5 deletions

View file

@ -4315,7 +4315,7 @@ static const uri_builder_test uri_builder_tests[] = {
{
{TRUE,"test",NULL,Uri_PROPERTY_SCHEME_NAME,S_OK,TRUE}
},
{TRUE,TRUE,120,S_OK,TRUE},
{TRUE,TRUE,120,S_OK,FALSE},
0,S_OK,TRUE,
0,S_OK,TRUE,
0,0,0,S_OK,TRUE,
@ -4568,6 +4568,109 @@ static const uri_builder_test uri_builder_tests[] = {
{URL_SCHEME_UNKNOWN,S_OK},
{URLZONE_INVALID,E_NOTIMPL}
}
},
{ "http://google.com/",0,S_OK,FALSE,
{
{FALSE},
},
/* 555 will be returned from GetPort even though FALSE was passed as the hasPort parameter. */
{TRUE,FALSE,555,S_OK,FALSE},
0,S_OK,TRUE,
0,S_OK,TRUE,
0,0,0,S_OK,TRUE,
{
{"http://google.com/",S_OK},
{"google.com",S_OK},
{"http://google.com/",S_OK},
{"google.com",S_OK},
{"",S_FALSE},
{"",S_FALSE},
{"google.com",S_OK},
{"",S_FALSE},
{"/",S_OK},
{"/",S_OK},
{"",S_FALSE},
{"http://google.com/",S_OK},
{"http",S_OK},
{"",S_FALSE},
{"",S_FALSE}
},
{
{Uri_HOST_DNS,S_OK},
/* Still returns 80, even though earlier the port was disabled. */
{80,S_OK},
{URL_SCHEME_HTTP,S_OK},
{URLZONE_INVALID,E_NOTIMPL}
}
},
{ "http://google.com/",0,S_OK,FALSE,
{
{FALSE},
},
/* Instead of getting "TRUE" back as the "hasPort" parameter in GetPort,
* you'll get 122345 instead.
*/
{TRUE,122345,222,S_OK,FALSE},
0,S_OK,TRUE,
0,S_OK,TRUE,
0,0,0,S_OK,TRUE,
{
{"http://google.com:222/",S_OK},
{"google.com:222",S_OK},
{"http://google.com:222/",S_OK},
{"google.com",S_OK},
{"",S_FALSE},
{"",S_FALSE},
{"google.com",S_OK},
{"",S_FALSE},
{"/",S_OK},
{"/",S_OK},
{"",S_FALSE},
{"http://google.com:222/",S_OK},
{"http",S_OK},
{"",S_FALSE},
{"",S_FALSE}
},
{
{Uri_HOST_DNS,S_OK},
{222,S_OK},
{URL_SCHEME_HTTP,S_OK},
{URLZONE_INVALID,E_NOTIMPL}
}
},
/* IUri's created with the IUriBuilder can have ports that exceed USHORT_MAX. */
{ "http://google.com/",0,S_OK,FALSE,
{
{FALSE},
},
{TRUE,TRUE,999999,S_OK,FALSE},
0,S_OK,TRUE,
0,S_OK,TRUE,
0,0,0,S_OK,TRUE,
{
{"http://google.com:999999/",S_OK},
{"google.com:999999",S_OK},
{"http://google.com:999999/",S_OK},
{"google.com",S_OK},
{"",S_FALSE},
{"",S_FALSE},
{"google.com",S_OK},
{"",S_FALSE},
{"/",S_OK},
{"/",S_OK},
{"",S_FALSE},
{"http://google.com:999999/",S_OK},
{"http",S_OK},
{"",S_FALSE},
{"",S_FALSE}
},
{
{Uri_HOST_DNS,S_OK},
{999999,S_OK},
{URL_SCHEME_HTTP,S_OK},
{URLZONE_INVALID,E_NOTIMPL}
}
}
};
@ -7516,6 +7619,34 @@ static void test_IUriBuilder_RemoveProperties(void) {
}
}
static void test_IUriBuilder_Misc(void) {
HRESULT hr;
IUri *uri;
hr = pCreateUri(http_urlW, 0, 0, &uri);
if(SUCCEEDED(hr)) {
IUriBuilder *builder;
hr = pCreateIUriBuilder(uri, 0, 0, &builder);
ok(hr == S_OK, "Error: CreateIUriBuilder returned 0x%08x, expected 0x%08x.\n", hr, S_OK);
if(SUCCEEDED(hr)) {
BOOL has = -1;
DWORD port = -1;
hr = IUriBuilder_GetPort(builder, &has, &port);
ok(hr == S_OK, "Error: IUriBuilder_GetPort returned 0x%08x, expected 0x%08x.\n", hr, S_OK);
if(SUCCEEDED(hr)) {
/* 'has' will be set to FALSE, even though uri had a port. */
ok(has == FALSE, "Error: Expected 'has' to be FALSE, was %d instead.\n", has);
/* Still sets 'port' to 80. */
ok(port == 80, "Error: Expected the port to be 80, but, was %d instead.\n", port);
}
}
if(builder) IUriBuilder_Release(builder);
}
if(uri) IUri_Release(uri);
}
START_TEST(uri) {
HMODULE hurlmon;
@ -7591,4 +7722,7 @@ START_TEST(uri) {
trace("test IUriBuilder_RemoveProperties...\n");
test_IUriBuilder_RemoveProperties();
trace("test IUriBuilder miscellaneous...\n");
test_IUriBuilder_Misc();
}

View file

@ -91,6 +91,9 @@ typedef struct {
WCHAR *path;
DWORD path_len;
BOOL has_port;
DWORD port;
} UriBuilder;
typedef struct {
@ -4506,8 +4509,9 @@ static HRESULT WINAPI UriBuilder_GetPort(IUriBuilder *iface, BOOL *pfHasPort, DW
return E_POINTER;
}
FIXME("(%p)->(%p %p)\n", This, pfHasPort, pdwPort);
return E_NOTIMPL;
*pfHasPort = This->has_port;
*pdwPort = This->port;
return S_OK;
}
static HRESULT WINAPI UriBuilder_GetQuery(IUriBuilder *iface, DWORD *pcchQuery, LPCWSTR *ppwzQuery)
@ -4605,8 +4609,12 @@ static HRESULT WINAPI UriBuilder_SetPath(IUriBuilder *iface, LPCWSTR pwzNewValue
static HRESULT WINAPI UriBuilder_SetPort(IUriBuilder *iface, BOOL fHasPort, DWORD dwNewValue)
{
UriBuilder *This = URIBUILDER_THIS(iface);
FIXME("(%p)->(%d %d)\n", This, fHasPort, dwNewValue);
return E_NOTIMPL;
TRACE("(%p)->(%d %d)\n", This, fHasPort, dwNewValue);
This->has_port = fHasPort;
This->port = dwNewValue;
This->modified_props |= Uri_HAS_PORT;
return S_OK;
}
static HRESULT WINAPI UriBuilder_SetQuery(IUriBuilder *iface, LPCWSTR pwzNewValue)
@ -4705,6 +4713,11 @@ HRESULT WINAPI CreateIUriBuilder(IUri *pIUri, DWORD dwFlags, DWORD_PTR dwReserve
if((uri = get_uri_obj(pIUri))) {
IUri_AddRef(pIUri);
ret->uri = uri;
if(uri->has_port)
/* Windows doesn't set 'has_port' to TRUE in this case. */
ret->port = uri->port;
} else {
heap_free(ret);
*ppIUriBuilder = NULL;