Thomas Mullaly : urlmon/tests: Added tests for IUri_IsEqual.
Alexandre Julliard
julliard at winehq.org
Mon Jun 7 10:02:29 CDT 2010
Module: wine
Branch: master
Commit: 68db56d305cfbe821175d351c334b3737acb4b5a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=68db56d305cfbe821175d351c334b3737acb4b5a
Author: Thomas Mullaly <thomas.mullaly at gmail.com>
Date: Tue Jun 1 16:43:58 2010 -0400
urlmon/tests: Added tests for IUri_IsEqual.
---
dlls/urlmon/tests/uri.c | 123 +++++++++++++++++++++++++++++++++++++++++++++++
dlls/urlmon/uri.c | 12 +++++
2 files changed, 135 insertions(+), 0 deletions(-)
diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c
index 9e8b32e..2351174 100644
--- a/dlls/urlmon/tests/uri.c
+++ b/dlls/urlmon/tests/uri.c
@@ -435,6 +435,46 @@ static const uri_properties uri_tests[] = {
}
};
+typedef struct _uri_equality {
+ const char* a;
+ DWORD create_flags_a;
+ BOOL create_todo_a;
+ const char* b;
+ DWORD create_flags_b;
+ BOOL create_todo_b;
+ BOOL equal;
+ BOOL todo;
+} uri_equality;
+
+static const uri_equality equality_tests[] = {
+ {
+ "HTTP://www.winehq.org/test dir/./",0,FALSE,
+ "http://www.winehq.org/test dir/../test dir/",0,FALSE,
+ TRUE, TRUE
+ },
+ {
+ /* http://www.winehq.org/test%20dir */
+ "http://%77%77%77%2E%77%69%6E%65%68%71%2E%6F%72%67/%74%65%73%74%20%64%69%72",0,FALSE,
+ "http://www.winehq.org/test dir",0,FALSE,
+ TRUE, TRUE,
+ },
+ {
+ "c:\\test.mp3",Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME,FALSE,
+ "file:///c:/test.mp3",0,FALSE,
+ TRUE,TRUE
+ },
+ {
+ "ftp://ftp.winehq.org/",0,FALSE,
+ "ftp://ftp.winehq.org",0,FALSE,
+ TRUE, TRUE
+ },
+ {
+ "ftp://ftp.winehq.org/test/test2/../../testB/",0,FALSE,
+ "ftp://ftp.winehq.org/t%45stB/",0,FALSE,
+ FALSE, TRUE
+ }
+};
+
static inline LPWSTR a2w(LPCSTR str) {
LPWSTR ret = NULL;
@@ -1356,6 +1396,86 @@ static void test_IUri_HasProperty(void) {
}
}
+static void test_IUri_IsEqual(void) {
+ IUri *uriA, *uriB;
+ HRESULT hrA, hrB;
+ DWORD i;
+
+ uriA = uriB = NULL;
+
+ /* Make sure IsEqual handles invalid args correctly. */
+ hrA = pCreateUri(http_urlW, 0, 0, &uriA);
+ hrB = pCreateUri(http_urlW, 0, 0, &uriB);
+ ok(hrA == S_OK, "Error: CreateUri returned 0x%08x, expected 0x%08x.\n", hrA, S_OK);
+ ok(hrB == S_OK, "Error: CreateUri returned 0x%08x, expected 0x%08x.\n", hrB, S_OK);
+ if(SUCCEEDED(hrA) && SUCCEEDED(hrB)) {
+ BOOL equal = -1;
+ hrA = IUri_IsEqual(uriA, NULL, &equal);
+ ok(hrA == S_OK, "Error: IsEqual returned 0x%08x, expected 0x%08x.\n", hrA, S_OK);
+ ok(equal == FALSE, "Error: Expected equal to be FALSE, but was %d instead.\n", equal);
+
+ hrA = IUri_IsEqual(uriA, uriB, NULL);
+ ok(hrA == E_POINTER, "Error: IsEqual returned 0x%08x, expected 0x%08x.\n", hrA, E_POINTER);
+ }
+ if(uriA) IUri_Release(uriA);
+ if(uriB) IUri_Release(uriB);
+
+ for(i = 0; i < sizeof(equality_tests)/sizeof(equality_tests[0]); ++i) {
+ uri_equality test = equality_tests[i];
+ LPWSTR uriA_W, uriB_W;
+
+ uriA = uriB = NULL;
+
+ uriA_W = a2w(test.a);
+ uriB_W = a2w(test.b);
+
+ hrA = pCreateUri(uriA_W, test.create_flags_a, 0, &uriA);
+ if(test.create_todo_a) {
+ todo_wine {
+ ok(hrA == S_OK, "Error: CreateUri returned 0x%08x, expected 0x%08x on equality_tests[%d].a\n",
+ hrA, S_OK, i);
+ }
+ } else {
+ ok(hrA == S_OK, "Error: CreateUri returned 0x%08x, expected 0x%08x on equality_tests[%d].a\n",
+ hrA, S_OK, i);
+ }
+
+ hrB = pCreateUri(uriB_W, test.create_flags_b, 0, &uriB);
+ if(test.create_todo_b) {
+ todo_wine {
+ ok(hrB == S_OK, "Error: CreateUri returned 0x%08x, expected 0x%08x on equality_tests[%d].b\n",
+ hrB, S_OK, i);
+ }
+ } else {
+ ok(hrB == S_OK, "Error: CreateUri returned 0x%08x, expected 0x%08x on equality_tests[%d].b\n",
+ hrB, S_OK, i);
+ }
+
+ if(SUCCEEDED(hrA) && SUCCEEDED(hrB)) {
+ BOOL equal = -1;
+
+ hrA = IUri_IsEqual(uriA, uriB, &equal);
+ if(test.todo) {
+ todo_wine {
+ ok(hrA == S_OK, "Error: IsEqual returned 0x%08x, expected 0x%08x on equality_tests[%d].\n",
+ hrA, S_OK, i);
+ }
+ todo_wine {
+ ok(equal == test.equal, "Error: Expected the comparison to be %d on equality_tests[%d].\n", test.equal, i);
+ }
+ } else {
+ ok(hrA == S_OK, "Error: IsEqual returned 0x%08x, expected 0x%08x on equality_tests[%d].\n", hrA, S_OK, i);
+ ok(equal == test.equal, "Error: Expected the comparison to be %d on equality_tests[%d].\n", test.equal, i);
+ }
+ }
+ if(uriA) IUri_Release(uriA);
+ if(uriB) IUri_Release(uriB);
+
+ heap_free(uriA_W);
+ heap_free(uriB_W);
+ }
+}
+
START_TEST(uri) {
HMODULE hurlmon;
@@ -1393,4 +1513,7 @@ START_TEST(uri) {
trace("test IUri_HasProperty...\n");
test_IUri_HasProperty();
+
+ trace("test IUri_IsEqual...\n");
+ test_IUri_IsEqual();
}
diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c
index a46770b..b0adb35 100644
--- a/dlls/urlmon/uri.c
+++ b/dlls/urlmon/uri.c
@@ -377,6 +377,18 @@ static HRESULT WINAPI Uri_GetProperties(IUri *iface, DWORD *pdwProperties)
static HRESULT WINAPI Uri_IsEqual(IUri *iface, IUri *pUri, BOOL *pfEqual)
{
Uri *This = URI_THIS(iface);
+ TRACE("(%p)->(%p %p)\n", This, pUri, pfEqual);
+
+ if(!pfEqual)
+ return E_POINTER;
+
+ if(!pUri) {
+ *pfEqual = FALSE;
+
+ /* For some reason Windows returns S_OK here... */
+ return S_OK;
+ }
+
FIXME("(%p)->(%p %p)\n", This, pUri, pfEqual);
return E_NOTIMPL;
}
More information about the wine-cvs
mailing list