Piotr Caban : urlmon/tests: Added CopyBindInfo tests.

Alexandre Julliard julliard at winehq.org
Thu Mar 8 14:26:24 CST 2012


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Mar  8 13:45:29 2012 +0100

urlmon/tests: Added CopyBindInfo tests.

---

 dlls/urlmon/tests/misc.c |  114 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 114 insertions(+), 0 deletions(-)

diff --git a/dlls/urlmon/tests/misc.c b/dlls/urlmon/tests/misc.c
index bbb657f..ad0edf6 100644
--- a/dlls/urlmon/tests/misc.c
+++ b/dlls/urlmon/tests/misc.c
@@ -69,6 +69,7 @@ static HRESULT (WINAPI *pCoInternetGetSession)(DWORD, IInternetSession **, DWORD
 static HRESULT (WINAPI *pCoInternetParseUrl)(LPCWSTR, PARSEACTION, DWORD, LPWSTR, DWORD, DWORD *, DWORD);
 static HRESULT (WINAPI *pCoInternetQueryInfo)(LPCWSTR, QUERYOPTION, DWORD, LPVOID, DWORD, DWORD *, DWORD);
 static HRESULT (WINAPI *pCopyStgMedium)(const STGMEDIUM *, STGMEDIUM *);
+static HRESULT (WINAPI *pCopyBindInfo)(const BINDINFO *, BINDINFO *);
 static HRESULT (WINAPI *pFindMimeFromData)(LPBC, LPCWSTR, LPVOID, DWORD, LPCWSTR,
                         DWORD, LPWSTR*, DWORD);
 static HRESULT (WINAPI *pObtainUserAgentString)(DWORD, LPSTR, DWORD*);
@@ -1238,6 +1239,117 @@ static void test_CopyStgMedium(void)
     ok(hres == E_POINTER, "CopyStgMedium failed: %08x, expected E_POINTER\n", hres);
 }
 
+static void test_CopyBindInfo(void)
+{
+    BINDINFO src[2], dest[2];
+    SECURITY_DESCRIPTOR sec_desc;
+    HRESULT hres;
+    int i;
+
+    hres = pCopyBindInfo(NULL, NULL);
+    ok(hres == E_POINTER, "CopyBindInfo returned %08x, expected E_POINTER\n", hres);
+
+    memset(src, 0, sizeof(BINDINFO[2]));
+    memset(dest, 0xde, sizeof(BINDINFO[2]));
+    hres = pCopyBindInfo(src, dest);
+    ok(hres == E_INVALIDARG, "CopyBindInfo retuned: %08x, expected E_INVALIDARG\n", hres);
+
+    memset(src, 0, sizeof(BINDINFO[2]));
+    memset(dest, 0xde, sizeof(BINDINFO[2]));
+    src[0].cbSize = sizeof(BINDINFO);
+    dest[0].cbSize = 0;
+    hres = pCopyBindInfo(src, dest);
+    ok(hres == E_INVALIDARG, "CopyBindInfo retuned: %08x, expected E_INVALIDARG\n", hres);
+
+    memset(src, 0, sizeof(BINDINFO[2]));
+    memset(dest, 0xde, sizeof(BINDINFO[2]));
+    src[0].cbSize = 1;
+    dest[0].cbSize = sizeof(BINDINFO)+sizeof(DWORD);
+    hres = pCopyBindInfo(src, dest);
+    ok(hres == S_OK, "CopyBindInfo failed: %08x\n", hres);
+    ok(dest[0].cbSize == sizeof(BINDINFO)+sizeof(DWORD), "incorrect cbSize: %d\n", dest[0].cbSize);
+    for(i=1; i<dest[0].cbSize/sizeof(int); i++)
+        ok(((int*)dest)[i] == 0, "unset values should be set to 0, got %d on %d\n", ((int*)dest)[i], i);
+
+    memset(src, 0, sizeof(BINDINFO[2]));
+    memset(dest, 0xde, sizeof(BINDINFO[2]));
+    src[0].cbSize = sizeof(BINDINFO)+2*sizeof(DWORD);
+    dest[0].cbSize = sizeof(BINDINFO)+sizeof(DWORD);
+    hres = pCopyBindInfo(src, dest);
+    ok(hres == S_OK, "CopyBindInfo failed: %08x\n", hres);
+    ok(dest[1].cbSize == src[1].cbSize, "additional data should be copied\n");
+    ok(dest[1].szExtraInfo != src[1].szExtraInfo,
+            "data not fitting in destination buffer should not be copied\n");
+
+    memset(src, 0xf0, sizeof(BINDINFO[2]));
+    memset(dest, 0xde, sizeof(BINDINFO[2]));
+    src[0].cbSize = sizeof(BINDINFO);
+    src[0].szExtraInfo = CoTaskMemAlloc(sizeof(WCHAR));
+    src[0].szExtraInfo[0] = 0;
+    src[0].szCustomVerb = NULL;
+    src[0].pUnk = NULL;
+    src[0].stgmedData.tymed = TYMED_NULL;
+    src[0].stgmedData.pUnkForRelease = NULL;
+    dest[0].cbSize = sizeof(BINDINFO);
+    hres = pCopyBindInfo(src, dest);
+    ok(hres == S_OK, "CopyBindInfo failed: %08x\n", hres);
+
+    ok(dest[0].cbSize == sizeof(BINDINFO), "incorrect cbSize: %d\n", dest[0].cbSize);
+    ok(dest[0].szExtraInfo && !dest[0].szExtraInfo[0] && dest[0].szExtraInfo!=src[0].szExtraInfo,
+            "incorrect szExtraInfo: (%p!=%p) %d\n", dest[0].szExtraInfo,
+            src[0].szExtraInfo, dest[0].szExtraInfo[0]);
+    ok(!memcmp(&dest[0].stgmedData, &src[0].stgmedData, sizeof(STGMEDIUM)),
+            "incorrect stgmedData value\n");
+    ok(src[0].grfBindInfoF == dest[0].grfBindInfoF, "grfBindInfoF = %x, expected %x\n",
+            dest[0].grfBindInfoF, src[0].grfBindInfoF);
+    ok(src[0].dwBindVerb == dest[0].dwBindVerb, "dwBindVerb = %x, expected %x\n",
+            dest[0].dwBindVerb, src[0].dwBindVerb);
+    ok(!dest[0].szCustomVerb, "szCustmoVerb != NULL\n");
+    ok(src[0].cbstgmedData == dest[0].cbstgmedData, "cbstgmedData = %x, expected %x\n",
+            dest[0].cbstgmedData, src[0].cbstgmedData);
+    ok(src[0].dwOptions == dest[0].dwOptions, "dwOptions = %x, expected %x\n",
+            dest[0].dwOptions, src[0].dwOptions);
+    ok(src[0].dwOptionsFlags == dest[0].dwOptionsFlags, "dwOptionsFlags = %x, expected %x\n",
+            dest[0].dwOptionsFlags, src[0].dwOptionsFlags);
+    ok(src[0].dwCodePage == dest[0].dwCodePage, "dwCodePage = %x, expected %x\n",
+            dest[0].dwCodePage, src[0].dwCodePage);
+    ok(!dest[0].securityAttributes.nLength,
+            "unexpected securityAttributes.nLength value: %d\n",
+            dest[0].securityAttributes.nLength);
+    ok(!dest[0].securityAttributes.lpSecurityDescriptor,
+            "unexpected securityAttributes.lpSecurityDescriptor value: %p\n",
+            dest[0].securityAttributes.lpSecurityDescriptor);
+    ok(!dest[0].securityAttributes.bInheritHandle,
+            "unexpected securityAttributes.bInheritHandle value: %d\n",
+            dest[0].securityAttributes.bInheritHandle);
+    ok(!memcmp(&dest[0].iid, &src[0].iid, sizeof(IID)),
+            "incorrect iid value\n");
+    ok(!dest[0].pUnk, "pUnk != NULL\n");
+    ok(src[0].dwReserved == dest[0].dwReserved, "dwReserved = %x, expected %x\n",
+            dest[0].dwReserved, src[0].dwReserved);
+
+    CoTaskMemFree(src[0].szExtraInfo);
+    CoTaskMemFree(dest[0].szExtraInfo);
+
+    src[0].szExtraInfo = NULL;
+    src[0].securityAttributes.nLength = sizeof(SECURITY_ATTRIBUTES);
+    ok(InitializeSecurityDescriptor(&sec_desc, SECURITY_DESCRIPTOR_REVISION),
+            "InitializeSecurityDescriptor failed\n");
+    src[0].securityAttributes.lpSecurityDescriptor = (void*)&sec_desc;
+    src[0].securityAttributes.bInheritHandle = TRUE;
+    hres = pCopyBindInfo(src, dest);
+    ok(hres == S_OK, "CopyBindInfo failed: %08x\n", hres);
+    ok(!dest[0].securityAttributes.nLength,
+            "unexpected securityAttributes.nLength value: %d\n",
+            dest[0].securityAttributes.nLength);
+    ok(!dest[0].securityAttributes.lpSecurityDescriptor,
+            "unexpected securityAttributes.lpSecurityDescriptor value: %p\n",
+            dest[0].securityAttributes.lpSecurityDescriptor);
+    ok(!dest[0].securityAttributes.bInheritHandle,
+            "unexpected securityAttributes.bInheritHandle value: %d\n",
+            dest[0].securityAttributes.bInheritHandle);
+}
+
 static void test_UrlMkGetSessionOption(void)
 {
     DWORD encoding, size;
@@ -1760,6 +1872,7 @@ START_TEST(misc)
     pCoInternetParseUrl = (void*) GetProcAddress(hurlmon, "CoInternetParseUrl");
     pCoInternetQueryInfo = (void*) GetProcAddress(hurlmon, "CoInternetQueryInfo");
     pCopyStgMedium = (void*) GetProcAddress(hurlmon, "CopyStgMedium");
+    pCopyBindInfo = (void*) GetProcAddress(hurlmon, "CopyBindInfo");
     pFindMimeFromData = (void*) GetProcAddress(hurlmon, "FindMimeFromData");
     pObtainUserAgentString = (void*) GetProcAddress(hurlmon, "ObtainUserAgentString");
     pReleaseBindInfo = (void*) GetProcAddress(hurlmon, "ReleaseBindInfo");
@@ -1789,6 +1902,7 @@ START_TEST(misc)
     test_MimeFilter();
     test_ReleaseBindInfo();
     test_CopyStgMedium();
+    test_CopyBindInfo();
     test_UrlMkGetSessionOption();
     test_user_agent();
     test_MkParseDisplayNameEx();




More information about the wine-cvs mailing list