Rob Shearman : ole32: Add some tests for OleGetClipboard.

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


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

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

ole32: Add some tests for OleGetClipboard.

Test the IDataObject_QueryGetData function of the returned object.

---

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

diff --git a/dlls/ole32/tests/clipboard.c b/dlls/ole32/tests/clipboard.c
index 0127ce5..aa2f622 100644
--- a/dlls/ole32/tests/clipboard.c
+++ b/dlls/ole32/tests/clipboard.c
@@ -57,6 +57,8 @@ typedef struct EnumFormatImpl {
     UINT cur;
 } EnumFormatImpl;
 
+static BOOL expect_DataObjectImpl_QueryGetData = TRUE;
+
 static HRESULT EnumFormatImpl_Create(FORMATETC *fmtetc, UINT size, LPENUMFORMATETC *lplpformatetc);
 
 static HRESULT WINAPI EnumFormatImpl_QueryInterface(IEnumFORMATETC *iface, REFIID riid, LPVOID *ppvObj)
@@ -223,6 +225,9 @@ static HRESULT WINAPI DataObjectImpl_QueryGetData(IDataObject* iface, FORMATETC
     UINT i;
     BOOL foundFormat = FALSE;
 
+    if (!expect_DataObjectImpl_QueryGetData)
+        todo_wine ok(0, "unexpected call to DataObjectImpl_QueryGetData\n");
+
     if(pformatetc->lindex != -1)
         return DV_E_LINDEX;
 
@@ -316,6 +321,54 @@ static HRESULT DataObjectImpl_CreateText(LPCSTR text, LPDATAOBJECT *lplpdataobj)
     return S_OK;
 }
 
+static void test_get_clipboard(void)
+{
+    HRESULT hr;
+    IDataObject *data_obj;
+    FORMATETC fmtetc;
+
+    hr = OleGetClipboard(NULL);
+    ok(hr == E_INVALIDARG, "OleGetClipboard(NULL) should return E_INVALIDARG instead of 0x%08x\n", hr);
+
+    hr = OleGetClipboard(&data_obj);
+    ok(hr == S_OK, "OleGetClipboard failed with error 0x%08x\n", hr);
+
+    /* clipboard's IDataObject_QueryGetData shouldn't defer to our IDataObject_QueryGetData */
+    expect_DataObjectImpl_QueryGetData = FALSE;
+
+    InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
+    hr = IDataObject_QueryGetData(data_obj, &fmtetc);
+    ok(hr == S_OK, "IDataObject_QueryGetData failed with error 0x%08x\n", hr);
+
+    InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
+    fmtetc.dwAspect = 0xdeadbeef;
+    hr = IDataObject_QueryGetData(data_obj, &fmtetc);
+    todo_wine
+    ok(hr == DV_E_FORMATETC, "IDataObject_QueryGetData should have failed with DV_E_FORMATETC instead of 0x%08x\n", hr);
+
+    InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
+    fmtetc.lindex = 256;
+    hr = IDataObject_QueryGetData(data_obj, &fmtetc);
+    todo_wine
+    ok(hr == DV_E_FORMATETC, "IDataObject_QueryGetData 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_QueryGetData(data_obj, &fmtetc);
+    todo_wine
+    ok(hr == DV_E_CLIPFORMAT, "IDataObject_QueryGetData should have failed with DV_E_CLIPFORMAT instead of 0x%08x\n", hr);
+
+    InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
+    fmtetc.tymed = TYMED_FILE;
+    hr = IDataObject_QueryGetData(data_obj, &fmtetc);
+    todo_wine
+    ok(hr == S_OK, "IDataObject_QueryGetData failed with error 0x%08x\n", hr);
+
+    expect_DataObjectImpl_QueryGetData = TRUE;
+
+    IDataObject_Release(data_obj);
+}
+
 static void test_set_clipboard(void)
 {
     HRESULT hr;
@@ -350,6 +403,8 @@ static void test_set_clipboard(void)
     hr = OleIsCurrentClipboard(data2);
     ok(hr == S_FALSE, "did not expect current clipboard to be data2, hr = 0x%08x\n", hr);
 
+    test_get_clipboard();
+
     hr = OleSetClipboard(data2);
     ok(hr == S_OK, "failed to set clipboard to data2, hr = 0x%08x\n", hr);
     hr = OleIsCurrentClipboard(data1);




More information about the wine-cvs mailing list