[PATCH 4/4] oleaut32/tests: Add tests for IPicture::get_hPal() and IPicture::set_hPal().

Dmitry Timoshkov dmitry at baikal.ru
Fri Jul 6 03:10:37 CDT 2018


Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
 dlls/oleaut32/tests/olepicture.c | 109 +++++++++++++++++++++++++++----
 1 file changed, 97 insertions(+), 12 deletions(-)

diff --git a/dlls/oleaut32/tests/olepicture.c b/dlls/oleaut32/tests/olepicture.c
index 50ba7652d8..f3bef5850d 100644
--- a/dlls/oleaut32/tests/olepicture.c
+++ b/dlls/oleaut32/tests/olepicture.c
@@ -539,12 +539,61 @@ static void test_Invoke(void)
     IPictureDisp_Release(picdisp);
 }
 
+static HRESULT create_picture(short type, IPicture **pict)
+{
+    PICTDESC desc;
+
+    desc.cbSizeofstruct = sizeof(desc);
+    desc.picType = type;
+
+    switch (type)
+    {
+    case PICTYPE_UNINITIALIZED:
+        return OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (void **)pict);
+
+    case PICTYPE_NONE:
+        break;
+
+    case PICTYPE_BITMAP:
+        desc.u.bmp.hbitmap = CreateBitmap(1, 1, 1, 1, NULL);
+        desc.u.bmp.hpal = (HPALETTE)0xbeefdead;
+        break;
+
+    case PICTYPE_ICON:
+        desc.u.icon.hicon = LoadIconA(NULL, (LPCSTR)IDI_APPLICATION);
+        break;
+
+    case PICTYPE_METAFILE:
+    {
+        HDC hdc = CreateMetaFileA(NULL);
+        desc.u.wmf.hmeta = CloseMetaFile(hdc);
+        desc.u.wmf.xExt = 1;
+        desc.u.wmf.yExt = 1;
+        break;
+    }
+
+    case PICTYPE_ENHMETAFILE:
+    {
+        HDC hdc = CreateEnhMetaFileA(0, NULL, NULL, NULL);
+        desc.u.emf.hemf = CloseEnhMetaFile(hdc);
+        break;
+    }
+
+    default:
+        ok(0, "picture type %d is not supported\n", type);
+        return E_NOTIMPL;
+    }
+
+    return OleCreatePictureIndirect(&desc, &IID_IPicture, TRUE, (void **)pict);
+}
+
 static void test_OleCreatePictureIndirect(void)
 {
+    PICTDESC desc;
     OLE_HANDLE handle;
     IPicture *pict;
     HRESULT hr;
-    short type;
+    short type, i;
 
 if (0)
 {
@@ -552,20 +601,56 @@ if (0)
     OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, NULL);
 }
 
-    hr = OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (void**)&pict);
-    ok(hr == S_OK, "hr %08x\n", hr);
+    desc.cbSizeofstruct = sizeof(desc);
+    desc.picType = PICTYPE_UNINITIALIZED;
+    pict = (void *)0xdeadbeef;
+    hr = OleCreatePictureIndirect(&desc, &IID_IPicture, TRUE, (void **)&pict);
+    ok(hr == E_UNEXPECTED, "got %#x\n", hr);
+    ok(pict == NULL, "got %p\n", pict);
 
-    type = PICTYPE_NONE;
-    hr = IPicture_get_Type(pict, &type);
-    ok(hr == S_OK, "hr %08x\n", hr);
-    ok(type == PICTYPE_UNINITIALIZED, "type %d\n", type);
+    for (i = PICTYPE_UNINITIALIZED; i <= PICTYPE_ENHMETAFILE; i++)
+    {
+        hr = create_picture(i, &pict);
+        ok(hr == S_OK, "%d: got %#x\n", i, hr);
+
+        type = 0xdead;
+        hr = IPicture_get_Type(pict, &type);
+        ok(hr == S_OK, "%d: got %#x\n", i, hr);
+        ok(type == i, "%d: got %d\n", i, type);
+
+        handle = 0xdeadbeef;
+        hr = IPicture_get_Handle(pict, &handle);
+        ok(hr == S_OK, "%d: got %#x\n", i, hr);
+        if (type == PICTYPE_UNINITIALIZED || type == PICTYPE_NONE)
+            ok(handle == 0, "%d: got %#x\n", i, handle);
+        else
+            ok(handle != 0 && handle != 0xdeadbeef, "%d: got %#x\n", i, handle);
+
+        handle = 0xdeadbeef;
+        hr = IPicture_get_hPal(pict, &handle);
+        if (type == PICTYPE_BITMAP)
+        {
+            ok(hr == S_OK, "%d: got %#x\n", i, hr);
+            ok(handle == 0xbeefdead, "%d: got %#x\n", i, handle);
+        }
+        else
+        {
+            ok(hr == E_FAIL, "%d: got %#x\n", i, hr);
+#ifdef _WIN64
+            ok(handle == 0, "%d: got %#x\n", i, handle);
+#else
+            ok(handle == 0xdeadbeef, "%d: got %#x\n", i, handle);
+#endif
+        }
 
-    handle = 0xdeadbeef;
-    hr = IPicture_get_Handle(pict, &handle);
-    ok(hr == S_OK, "hr %08x\n", hr);
-    ok(handle == 0, "handle %08x\n", handle);
+        hr = IPicture_set_hPal(pict, (OLE_HANDLE)GetStockObject(DEFAULT_PALETTE));
+        if (type == PICTYPE_BITMAP)
+            ok(hr == S_OK, "%d: got %#x\n", i, hr);
+        else
+            ok(hr == E_FAIL, "%d: got %#x\n", i, hr);
 
-    IPicture_Release(pict);
+        IPicture_Release(pict);
+    }
 }
 
 static void test_apm(void)
-- 
2.17.1




More information about the wine-devel mailing list