Ziqing Hui : windowscodecs/tests: Add tests for calling WriteSource() without calling SetSize() prior to it.

Alexandre Julliard julliard at winehq.org
Wed Sep 9 15:42:28 CDT 2020


Module: wine
Branch: master
Commit: 0ceb07b75bedcf073e8995efc22cbe38fac4e137
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0ceb07b75bedcf073e8995efc22cbe38fac4e137

Author: Ziqing Hui <zhui at codeweavers.com>
Date:   Wed Sep  9 14:14:19 2020 +0800

windowscodecs/tests: Add tests for calling WriteSource() without calling SetSize() prior to it.

Signed-off-by: Ziqing Hui <zhui at codeweavers.com>
Signed-off-by: Esme Povirk <esme at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/windowscodecs/tests/converter.c | 48 ++++++++++++++++++++++--------------
 1 file changed, 30 insertions(+), 18 deletions(-)

diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c
index 7936c5e653..852f677482 100644
--- a/dlls/windowscodecs/tests/converter.c
+++ b/dlls/windowscodecs/tests/converter.c
@@ -1241,9 +1241,9 @@ todo_wine
     IWICComponentFactory_Release(factory);
 }
 
-static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* clsid_encoder,
+static void test_multi_encoder_impl(const struct bitmap_data **srcs, const CLSID* clsid_encoder,
     const struct bitmap_data **dsts, const CLSID *clsid_decoder, WICRect *rc,
-    const struct setting *settings, const char *name, IWICPalette *palette)
+    const struct setting *settings, const char *name, IWICPalette *palette, BOOL set_size)
 {
     const GUID *container_format = NULL;
     HRESULT hr;
@@ -1385,49 +1385,53 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
                        (IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && srcs[i]->bpp == 2 && IsEqualGUID(&pixelformat, &GUID_WICPixelFormat4bppIndexed)),
                         "SetPixelFormat changed the format to %s (%s)\n", wine_dbgstr_guid(&pixelformat), name);
 
-                    hr = IWICBitmapFrameEncode_SetSize(frameencode, srcs[i]->width, srcs[i]->height);
-                    ok(SUCCEEDED(hr), "SetSize failed, hr=%x\n", hr);
+                    if (set_size)
+                    {
+                        hr = IWICBitmapFrameEncode_SetSize(frameencode, srcs[i]->width, srcs[i]->height);
+                        ok(hr == S_OK, "SetSize failed, hr=%x\n", hr);
+                    }
 
                     if (IsEqualGUID(clsid_encoder, &CLSID_WICPngEncoder))
                         test_set_frame_palette(frameencode);
 
                     if (palette)
                     {
-                        WICColor colors[256];
-
                         hr = IWICBitmapFrameEncode_SetPalette(frameencode, palette);
                         ok(SUCCEEDED(hr), "SetPalette failed, hr=%x (%s)\n", hr, name);
-
-                        /* trash the assigned palette */
-                        memset(colors, 0, sizeof(colors));
-                        hr = IWICPalette_InitializeCustom(palette, colors, 256);
-                        ok(hr == S_OK, "InitializeCustom error %#x\n", hr);
                     }
 
                     hr = IWICBitmapFrameEncode_WriteSource(frameencode, &src_obj->IWICBitmapSource_iface, rc);
+                    todo_wine_if(!set_size) {
                     if (rc && (rc->Width <= 0 || rc->Height <= 0))
                     {
                         /* WriteSource fails but WriteSource_Proxy succeeds. */
                         ok(hr == E_INVALIDARG, "WriteSource should fail, hr=%x (%s)\n", hr, name);
                         hr = IWICBitmapFrameEncode_WriteSource_Proxy(frameencode, &src_obj->IWICBitmapSource_iface, rc);
-                        ok(SUCCEEDED(hr), "WriteSource_Proxy failed, %dx%d, hr=%x (%s)\n", rc->Width, rc->Height, hr, name);
+                        if (!set_size && rc->Width < 0)
+                            ok(hr == WINCODEC_ERR_SOURCERECTDOESNOTMATCHDIMENSIONS,
+                               "WriteSource_Proxy(%dx%d) got unexpected hr %x (%s)\n", rc->Width, rc->Height, hr, name);
+                        else
+                            ok(hr == S_OK, "WriteSource_Proxy failed, %dx%d, hr=%x (%s)\n", rc->Width, rc->Height, hr, name);
                     }
                     else
                     {
                         if (rc)
                             ok(SUCCEEDED(hr), "WriteSource(%dx%d) failed, hr=%x (%s)\n", rc->Width, rc->Height, hr, name);
                         else
-                            ok(hr == S_OK ||
-                               (FAILED(hr) && IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && srcs[i]->bpp == 2) /* XP */ ||
-                               (FAILED(hr) && IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2) /* XP */ ||
-                               broken(hr == E_INVALIDARG && IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && IsEqualGUID(srcs[i]->format, &GUID_WICPixelFormatBlackWhite)) /* XP */,
-                               "WriteSource(NULL) failed, hr=%x (%s)\n", hr, name);
+                            todo_wine_if((IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2) ||
+                                         (IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder)  && srcs[i]->bpp == 2))
+                            ok(hr == S_OK, "WriteSource(NULL) failed, hr=%x (%s)\n", hr, name);
+
+                    }
                     }
 
                     if (SUCCEEDED(hr))
                     {
                         hr = IWICBitmapFrameEncode_Commit(frameencode);
-                        ok(SUCCEEDED(hr), "Commit failed, hr=%x (%s)\n", hr, name);
+                        if (!set_size && rc && rc->Height < 0)
+                            ok(hr == WINCODEC_ERR_UNEXPECTEDSIZE, "Commit got unexpected hr %x (%s)\n", hr, name);
+                        else
+                            ok(hr == S_OK, "Commit failed, hr=%x (%s)\n", hr, name);
                     }
 
                     IWICBitmapFrameEncode_Release(frameencode);
@@ -1602,6 +1606,14 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
     }
 }
 
+static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* clsid_encoder,
+    const struct bitmap_data **dsts, const CLSID *clsid_decoder, WICRect *rc,
+    const struct setting *settings, const char *name, IWICPalette *palette)
+{
+    test_multi_encoder_impl(srcs, clsid_encoder, dsts, clsid_decoder, rc, settings, name, palette, TRUE);
+    test_multi_encoder_impl(srcs, clsid_encoder, dsts, clsid_decoder, rc, settings, name, palette, FALSE);
+}
+
 static void test_encoder(const struct bitmap_data *src, const CLSID* clsid_encoder,
     const struct bitmap_data *dst, const CLSID *clsid_decoder, const char *name)
 {




More information about the wine-cvs mailing list