Thomas Mullaly : urlmon/tests: Added tests for IUriBuilder_GetFragment.

Alexandre Julliard julliard at winehq.org
Thu Aug 19 11:44:04 CDT 2010


Module: wine
Branch: master
Commit: 9816ec856f969cd8589dc0785d6ac65b8b65502e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9816ec856f969cd8589dc0785d6ac65b8b65502e

Author: Thomas Mullaly <thomas.mullaly at gmail.com>
Date:   Wed Aug 18 20:31:29 2010 -0400

urlmon/tests: Added tests for IUriBuilder_GetFragment.

---

 dlls/urlmon/tests/uri.c |  135 +++++++++++++++++++++++++++++++++++++++++++++++
 dlls/urlmon/uri.c       |   13 +++++
 2 files changed, 148 insertions(+), 0 deletions(-)

diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c
index 743c42c..fb105f7 100644
--- a/dlls/urlmon/tests/uri.c
+++ b/dlls/urlmon/tests/uri.c
@@ -5314,6 +5314,135 @@ static void test_IUriBuilder_CreateInvalidArgs(void) {
     if(builder) IUriBuilder_Release(builder);
 }
 
+/* Tests invalid args to the "Get*" functions. */
+static void test_IUriBuilder_GetInvalidArgs(void) {
+    IUriBuilder *builder = NULL;
+    HRESULT hr;
+
+    hr = pCreateIUriBuilder(NULL, 0, 0, &builder);
+    ok(hr == S_OK, "Error: CreateIUriBuilder returned 0x%08x, expected 0x%08x.\n", hr, S_OK);
+    if(SUCCEEDED(hr)) {
+        LPCWSTR received = (void*) 0xdeadbeef;
+        DWORD len = -1;
+
+        hr = IUriBuilder_GetFragment(builder, NULL, NULL);
+        ok(hr == E_POINTER, "Error: IUriBuilder_GetFragment returned 0x%08x, expected 0x%08x.\n",
+            hr, E_POINTER);
+        hr = IUriBuilder_GetFragment(builder, NULL, &received);
+        ok(hr == E_POINTER, "Error: IUriBuilder_GetFragment returned 0x%08x, expected 0x%08x.\n",
+            hr, E_POINTER);
+        ok(!received, "Error: Expected received to be NULL, but was %p instead.\n", received);
+        hr = IUriBuilder_GetFragment(builder, &len, NULL);
+        ok(hr == E_POINTER, "Error: IUriBuilder_GetFragment returned 0x%08x, expected 0x%08x.\n",
+            hr, E_POINTER);
+        ok(!len, "Error: Expected len to be 0, but was %d instead.\n", len);
+    }
+    if(builder) IUriBuilder_Release(builder);
+}
+
+static void test_IUriBuilder_GetFragment(IUriBuilder *builder, const uri_builder_test *test,
+                                         DWORD test_index) {
+    HRESULT hr;
+    DWORD i;
+    LPCWSTR received = NULL;
+    DWORD len = -1;
+    const uri_builder_property *prop = NULL;
+
+    /* Check if the property was set earlier. */
+    for(i = 0; i < sizeof(test->properties)/sizeof(test->properties[0]); ++i) {
+        if(test->properties[i].change && test->properties[i].property == Uri_PROPERTY_FRAGMENT)
+            prop = &(test->properties[i]);
+    }
+
+    if(prop) {
+        /* Use expected_value unless it's NULL, then use value. */
+        LPCSTR expected = prop->expected_value ? prop->expected_value : prop->value;
+        hr = IUriBuilder_GetFragment(builder, &len, &received);
+        if(prop->todo) {
+            todo_wine {
+                ok(hr == (expected ? S_OK : S_FALSE),
+                    "Error: IUriBuilder_GetFragment returned 0x%08x, expected 0x%08x on uri_builder_tests[%d].\n",
+                    hr, (expected ? S_OK : S_FALSE), test_index);
+            }
+            todo_wine {
+                ok(!strcmp_aw(expected, received), "Error: Expected %s but got %s on uri_builder_tests[%d].\n",
+                    expected, wine_dbgstr_w(received), test_index);
+            }
+            todo_wine {
+                ok(lstrlen(expected) == len,
+                    "Error: Expected the length to be %d, but was %d instead on uri_builder_tests[%d].\n",
+                    lstrlen(expected), len, test_index);
+            }
+        } else {
+            ok(hr == (expected ? S_OK : S_FALSE),
+                "Error: IUriBuilder_GetFragment returned 0x%08x, expected 0x%08x on uri_builder_tests[%d].\n",
+                hr, (expected ? S_OK : S_FALSE), test_index);
+            ok(!strcmp_aw(expected, received), "Error: Expected %s but got %s on uri_builder_tests[%d].\n",
+                expected, wine_dbgstr_w(received), test_index);
+            ok(lstrlen(expected) == len,
+                "Error: Expected the length to be %d, but was %d instead on uri_builder_tests[%d].\n",
+                lstrlen(expected), len, test_index);
+        }
+    } else {
+        /* The property wasn't set earlier, so it should return whatever
+         * the base IUri contains (if anything).
+         */
+        IUri *uri = NULL;
+        hr = IUriBuilder_GetIUri(builder, &uri);
+        todo_wine {
+            ok(hr == S_OK,
+                "Error: IUriBuilder_GetIUri returned 0x%08x, expected 0x%08x on uri_builder_tests[%d].\n",
+                hr, S_OK, test_index);
+        }
+        if(SUCCEEDED(hr)) {
+            BOOL has_prop = FALSE;
+            BSTR expected = NULL;
+
+            hr = IUri_GetFragment(uri, &expected);
+            ok(SUCCEEDED(hr),
+                "Error: Expected IUri_GetFragment to succeed, but got 0x%08x instead on uri_builder_tests[%d].\n",
+                hr, test_index);
+            has_prop = hr == S_OK;
+
+            hr = IUriBuilder_GetFragment(builder, &len, &received);
+            if(has_prop) {
+                todo_wine {
+                    ok(hr == S_OK,
+                        "Error: IUriBuilder_GetFragment returned 0x%08x, expected 0x%08x on uri_builder_tests[%d].\n",
+                        hr, S_OK, test_index);
+                }
+                if(SUCCEEDED(hr)) {
+                    todo_wine {
+                        ok(!lstrcmpW(expected, received),
+                            "Error: Expected %s but got %s instead on uri_builder_tests[%d].\n",
+                            wine_dbgstr_w(expected), wine_dbgstr_w(received), test_index);
+                    }
+                    todo_wine {
+                        ok(lstrlenW(expected) == len,
+                            "Error: Expected the length to be %d, but was %d instead on uri_builder_tests[%d].\n",
+                            lstrlenW(expected), len, test_index);
+                    }
+                }
+            } else {
+                todo_wine {
+                    ok(hr == S_FALSE,
+                        "Error: IUriBuilder_GetFragment returned 0x%08x, expected 0x%08x on uri_builder_tests[%d].\n",
+                        hr, S_FALSE, test_index);
+                }
+                todo_wine {
+                    ok(!received, "Error: Expected received to be NULL on uri_builder_tests[%d].\n", test_index);
+                }
+                todo_wine {
+                    ok(!len, "Error: Expected the length to be 0, but was %d instead on uri_builder_tests[%d].\n",
+                        len, test_index);
+                }
+            }
+            SysFreeString(expected);
+        }
+        if(uri) IUri_Release(uri);
+    }
+}
+
 /* Tests IUriBuilder functions. */
 static void test_IUriBuilder(void) {
     HRESULT hr;
@@ -5367,6 +5496,9 @@ static void test_IUriBuilder(void) {
                     }
                 }
 
+                /* Test the "Get*" functions. */
+                test_IUriBuilder_GetFragment(builder, &test, i);
+
                 test_IUriBuilder_CreateUri(builder, &test, i);
                 test_IUriBuilder_CreateUriSimple(builder, &test, i);
                 test_IUriBuilder_CreateUriWithFlags(builder, &test, i);
@@ -5440,4 +5572,7 @@ START_TEST(uri) {
 
     trace("test IUriBuilder...\n");
     test_IUriBuilder();
+
+    trace("test IUriBuilder_GetInvalidArgs...\n");
+    test_IUriBuilder_GetInvalidArgs();
 }
diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c
index 8aa130a..52b4271 100644
--- a/dlls/urlmon/uri.c
+++ b/dlls/urlmon/uri.c
@@ -4195,6 +4195,19 @@ static HRESULT WINAPI UriBuilder_SetIUri(IUriBuilder *iface, IUri *pIUri)
 static HRESULT WINAPI UriBuilder_GetFragment(IUriBuilder *iface, DWORD *pcchFragment, LPCWSTR *ppwzFragment)
 {
     UriBuilder *This = URIBUILDER_THIS(iface);
+    TRACE("(%p)->(%p %p)\n", This, pcchFragment, ppwzFragment);
+
+    if(!pcchFragment) {
+        if(ppwzFragment)
+            *ppwzFragment = NULL;
+        return E_POINTER;
+    }
+
+    if(!ppwzFragment) {
+        *pcchFragment = 0;
+        return E_POINTER;
+    }
+
     FIXME("(%p)->(%p %p)\n", This, pcchFragment, ppwzFragment);
     return E_NOTIMPL;
 }




More information about the wine-cvs mailing list