Rob Shearman : ole32: Add tests for clipboard' s implementation of IDataObject_GetData.

Alexandre Julliard julliard at winehq.org
Wed Apr 16 08:09:46 CDT 2008


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

Author: Rob Shearman <rob at codeweavers.com>
Date:   Tue Apr 15 18:29:41 2008 +0100

ole32: Add tests for clipboard's implementation of IDataObject_GetData.

---

 dlls/ole32/tests/clipboard.c |   45 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/dlls/ole32/tests/clipboard.c b/dlls/ole32/tests/clipboard.c
index c6371cd..e365ee8 100644
--- a/dlls/ole32/tests/clipboard.c
+++ b/dlls/ole32/tests/clipboard.c
@@ -58,6 +58,7 @@ typedef struct EnumFormatImpl {
 } EnumFormatImpl;
 
 static BOOL expect_DataObjectImpl_QueryGetData = TRUE;
+static ULONG DataObjectImpl_GetData_calls = 0;
 
 static HRESULT EnumFormatImpl_Create(FORMATETC *fmtetc, UINT size, LPENUMFORMATETC *lplpformatetc);
 
@@ -196,6 +197,8 @@ static HRESULT WINAPI DataObjectImpl_GetData(IDataObject* iface, FORMATETC *pfor
 {
     DataObjectImpl *This = (DataObjectImpl*)iface;
 
+    DataObjectImpl_GetData_calls++;
+
     if(pformatetc->lindex != -1)
         return DV_E_LINDEX;
 
@@ -326,6 +329,7 @@ static void test_get_clipboard(void)
     HRESULT hr;
     IDataObject *data_obj;
     FORMATETC fmtetc;
+    STGMEDIUM stgmedium;
 
     hr = OleGetClipboard(NULL);
     ok(hr == E_INVALIDARG, "OleGetClipboard(NULL) should return E_INVALIDARG instead of 0x%08x\n", hr);
@@ -333,6 +337,8 @@ static void test_get_clipboard(void)
     hr = OleGetClipboard(&data_obj);
     ok(hr == S_OK, "OleGetClipboard failed with error 0x%08x\n", hr);
 
+    /* test IDataObject_QueryGetData */
+
     /* clipboard's IDataObject_QueryGetData shouldn't defer to our IDataObject_QueryGetData */
     expect_DataObjectImpl_QueryGetData = FALSE;
 
@@ -367,6 +373,45 @@ static void test_get_clipboard(void)
 
     expect_DataObjectImpl_QueryGetData = TRUE;
 
+    /* test IDataObject_GetData */
+
+    DataObjectImpl_GetData_calls = 0;
+
+    InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
+    hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
+    ok(hr == S_OK, "IDataObject_GetData failed with error 0x%08x\n", hr);
+    ReleaseStgMedium(&stgmedium);
+
+    InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
+    fmtetc.dwAspect = 0xdeadbeef;
+    hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
+    ok(hr == S_OK, "IDataObject_GetData failed with error 0x%08x\n", hr);
+    ReleaseStgMedium(&stgmedium);
+
+    InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
+    fmtetc.dwAspect = DVASPECT_THUMBNAIL;
+    hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
+    ok(hr == S_OK, "IDataObject_GetData failed with error 0x%08x\n", hr);
+    ReleaseStgMedium(&stgmedium);
+
+    InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
+    fmtetc.lindex = 256;
+    hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
+    todo_wine
+    ok(hr == DV_E_FORMATETC, "IDataObject_GetData should have failed with DV_E_FORMATETC instead of 0x%08x\n", hr);
+
+    InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
+    fmtetc.cfFormat = CF_RIFF;
+    hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
+    ok(hr == DV_E_FORMATETC, "IDataObject_GetData should have failed with DV_E_FORMATETC instead of 0x%08x\n", hr);
+
+    InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
+    fmtetc.tymed = TYMED_FILE;
+    hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
+    ok(hr == DV_E_TYMED, "IDataObject_GetData should have failed with DV_E_TYMED instead of 0x%08x\n", hr);
+
+    ok(DataObjectImpl_GetData_calls == 6, "DataObjectImpl_GetData should have been called 6 times instead of %d times\n", DataObjectImpl_GetData_calls);
+
     IDataObject_Release(data_obj);
 }
 




More information about the wine-cvs mailing list