Jacek Caban : shdocvw: Make tests stricter and fix GetUrl problem found by the change.

Alexandre Julliard julliard at winehq.org
Fri Apr 8 10:51:00 CDT 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Apr  8 11:59:43 2011 +0200

shdocvw: Make tests stricter and fix GetUrl problem found by the change.

---

 dlls/shdocvw/intshcut.c       |   37 ++++++++++++---------
 dlls/shdocvw/tests/intshcut.c |   68 +++++++++++++++++++++--------------------
 2 files changed, 56 insertions(+), 49 deletions(-)

diff --git a/dlls/shdocvw/intshcut.c b/dlls/shdocvw/intshcut.c
index f86f122..4a2dd6a 100644
--- a/dlls/shdocvw/intshcut.c
+++ b/dlls/shdocvw/intshcut.c
@@ -238,18 +238,20 @@ static HRESULT WINAPI UniformResourceLocatorW_SetUrl(IUniformResourceLocatorW *u
 
 static HRESULT WINAPI UniformResourceLocatorW_GetUrl(IUniformResourceLocatorW *url, LPWSTR *ppszURL)
 {
-    HRESULT hr = S_OK;
     InternetShortcut *This = impl_from_IUniformResourceLocatorW(url);
+
     TRACE("(%p, %p)\n", url, ppszURL);
-    if (This->url == NULL)
+
+    if (!This->url) {
         *ppszURL = NULL;
-    else
-    {
-        *ppszURL = co_strdupW(This->url);
-        if (*ppszURL == NULL)
-            hr = E_OUTOFMEMORY;
+        return S_FALSE;
     }
-    return hr;
+
+    *ppszURL = co_strdupW(This->url);
+    if (!*ppszURL)
+        return E_OUTOFMEMORY;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI UniformResourceLocatorW_InvokeCommand(IUniformResourceLocatorW *url, PURLINVOKECOMMANDINFOW pCommandInfo)
@@ -339,18 +341,21 @@ static HRESULT WINAPI UniformResourceLocatorA_SetUrl(IUniformResourceLocatorA *u
 
 static HRESULT WINAPI UniformResourceLocatorA_GetUrl(IUniformResourceLocatorA *url, LPSTR *ppszURL)
 {
-    HRESULT hr = S_OK;
     InternetShortcut *This = impl_from_IUniformResourceLocatorA(url);
+
     TRACE("(%p, %p)\n", url, ppszURL);
-    if (This->url == NULL)
+
+    if (!This->url) {
         *ppszURL = NULL;
-    else
-    {
-        *ppszURL = co_strdupWtoA(This->url);
-        if (*ppszURL == NULL)
-            hr = E_OUTOFMEMORY;
+        return S_FALSE;
+
     }
-    return hr;
+
+    *ppszURL = co_strdupWtoA(This->url);
+    if (!*ppszURL)
+        return E_OUTOFMEMORY;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI UniformResourceLocatorA_InvokeCommand(IUniformResourceLocatorA *url, PURLINVOKECOMMANDINFOA pCommandInfo)
diff --git a/dlls/shdocvw/tests/intshcut.c b/dlls/shdocvw/tests/intshcut.c
index 023df4d..108e4f5 100644
--- a/dlls/shdocvw/tests/intshcut.c
+++ b/dlls/shdocvw/tests/intshcut.c
@@ -89,17 +89,17 @@ static void test_Aggregability(void)
     IUnknown *pUnknown = NULL;
 
     hr = CoCreateInstance(&CLSID_InternetShortcut, NULL, CLSCTX_ALL, &IID_IUnknown, (void**)&pUnknown);
-    ok(SUCCEEDED(hr), "could not create instance of CLSID_InternetShortcut with IID_IUnknown, hr = 0x%x\n", hr);
+    ok(hr == S_OK, "could not create instance of CLSID_InternetShortcut with IID_IUnknown, hr = 0x%x\n", hr);
     if (pUnknown)
         IUnknown_Release(pUnknown);
 
     hr = CoCreateInstance(&CLSID_InternetShortcut, NULL, CLSCTX_ALL, &IID_IUniformResourceLocatorA, (void**)&pUnknown);
-    ok(SUCCEEDED(hr), "could not create instance of CLSID_InternetShortcut with IID_IUniformResourceLocatorA, hr = 0x%x\n", hr);
+    ok(hr == S_OK, "could not create instance of CLSID_InternetShortcut with IID_IUniformResourceLocatorA, hr = 0x%x\n", hr);
     if (pUnknown)
         IUnknown_Release(pUnknown);
 
     hr = CoCreateInstance(&CLSID_InternetShortcut, &unknown, CLSCTX_ALL, &IID_IUnknown, (void**)&pUnknown);
-    ok(FAILED(hr), "aggregation didn't fail like it should, hr = 0x%x\n", hr);
+    ok(hr == CLASS_E_NOAGGREGATION, "aggregation didn't fail like it should, hr = 0x%x\n", hr);
     if (pUnknown)
         IUnknown_Release(pUnknown);
 }
@@ -109,7 +109,7 @@ static void can_query_interface(IUnknown *pUnknown, REFIID riid)
     HRESULT hr;
     IUnknown *newInterface;
     hr = IUnknown_QueryInterface(pUnknown, riid, (void**)&newInterface);
-    ok(SUCCEEDED(hr), "interface %s could not be queried\n", printGUID(riid));
+    ok(hr == S_OK, "interface %s could not be queried\n", printGUID(riid));
     if (SUCCEEDED(hr))
         IUnknown_Release(newInterface);
 }
@@ -128,32 +128,36 @@ static void test_QueryInterface(void)
     IUnknown_Release(pUnknown);
 }
 
-static CHAR *set_and_get_url(IUniformResourceLocatorA *urlA, LPCSTR input, DWORD flags)
+#define check_string_transform(a,b,c,d,e) _check_string_transform(__LINE__,a,b,c,d,e)
+static void _check_string_transform(unsigned line, IUniformResourceLocatorA *urlA, LPCSTR input, DWORD flags,
+        LPCSTR expectedOutput, BOOL is_todo)
 {
+    CHAR *output;
     HRESULT hr;
+
     hr = urlA->lpVtbl->SetURL(urlA, input, flags);
-    if (SUCCEEDED(hr))
-    {
-        CHAR *output;
-        hr = urlA->lpVtbl->GetURL(urlA, &output);
-        if (SUCCEEDED(hr))
-            return output;
-        else
-            skip("GetUrl failed, hr=0x%x\n", hr);
-    }
-    else
-        skip("SetUrl (%s, 0x%x) failed, hr=0x%x\n", input, flags, hr);
-    return NULL;
-}
+    ok_(__FILE__,line)(hr == S_OK, "SetUrl failed, hr=0x%x\n", hr);
+    if (FAILED(hr))
+        return;
 
-static void check_string_transform(IUniformResourceLocatorA *urlA, LPCSTR input, DWORD flags, LPCSTR expectedOutput)
-{
-    CHAR *output = set_and_get_url(urlA, input, flags);
-    if (output != NULL)
-    {
-        ok(lstrcmpA(output, expectedOutput) == 0, "unexpected URL change %s -> %s (expected %s)\n",
+    output = (void*)0xdeadbeef;
+    hr = urlA->lpVtbl->GetURL(urlA, &output);
+    if(expectedOutput) {
+        if(is_todo) {
+            todo_wine
+            ok_(__FILE__,line)(hr == S_OK, "GetUrl failed, hr=0x%x\n", hr);
+        }else {
+            ok_(__FILE__,line)(hr == S_OK, "GetUrl failed, hr=0x%x\n", hr);
+        }
+        todo_wine
+        ok_(__FILE__,line)(!lstrcmpA(output, expectedOutput), "unexpected URL change %s -> %s (expected %s)\n",
             input, output, expectedOutput);
         CoTaskMemFree(output);
+    }else {
+        todo_wine
+        ok_(__FILE__,line)(hr == S_FALSE, "GetUrl failed, hr=0x%x\n", hr);
+        todo_wine
+        ok_(__FILE__,line)(!output, "GetUrl returned %s\n", output);
     }
 }
 
@@ -297,14 +301,14 @@ static void test_NullURLs(void)
     ok(hr == S_OK, "Could not create InternetShortcut object: %08x\n", hr);
 
     hr = urlA->lpVtbl->GetURL(urlA, &url);
-    ok(SUCCEEDED(hr), "getting uninitialized URL unexpectedly failed, hr=0x%x\n", hr);
+    ok(hr == S_FALSE, "getting uninitialized URL unexpectedly failed, hr=0x%x\n", hr);
     ok(url == NULL, "uninitialized URL is not NULL but %s\n", url);
 
     hr = urlA->lpVtbl->SetURL(urlA, NULL, 0);
-    ok(SUCCEEDED(hr), "setting NULL URL unexpectedly failed, hr=0x%x\n", hr);
+    ok(hr == S_OK, "setting NULL URL unexpectedly failed, hr=0x%x\n", hr);
 
     hr = urlA->lpVtbl->GetURL(urlA, &url);
-    ok(SUCCEEDED(hr), "getting NULL URL unexpectedly failed, hr=0x%x\n", hr);
+    ok(hr == S_FALSE, "getting NULL URL unexpectedly failed, hr=0x%x\n", hr);
     ok(url == NULL, "URL unexpectedly not NULL but %s\n", url);
 
     urlA->lpVtbl->Release(urlA);
@@ -318,13 +322,11 @@ static void test_SetURLFlags(void)
     hr = CoCreateInstance(&CLSID_InternetShortcut, NULL, CLSCTX_ALL, &IID_IUniformResourceLocatorA, (void**)&urlA);
     ok(hr == S_OK, "Could not create InternetShortcut object: %08x\n", hr);
 
-    check_string_transform(urlA, "somerandomstring", 0, "somerandomstring");
-    check_string_transform(urlA, "www.winehq.org", 0, "www.winehq.org");
+    check_string_transform(urlA, "somerandomstring", 0, NULL, TRUE);
+    check_string_transform(urlA, "www.winehq.org", 0, NULL, TRUE);
 
-    todo_wine
-    check_string_transform(urlA, "www.winehq.org", IURL_SETURL_FL_GUESS_PROTOCOL, "http://www.winehq.org/");
-    todo_wine
-    check_string_transform(urlA, "ftp.winehq.org", IURL_SETURL_FL_GUESS_PROTOCOL, "ftp://ftp.winehq.org/");
+    check_string_transform(urlA, "www.winehq.org", IURL_SETURL_FL_GUESS_PROTOCOL, "http://www.winehq.org/", FALSE);
+    check_string_transform(urlA, "ftp.winehq.org", IURL_SETURL_FL_GUESS_PROTOCOL, "ftp://ftp.winehq.org/", FALSE);
 
     urlA->lpVtbl->Release(urlA);
 }




More information about the wine-cvs mailing list