Ziqing Hui : windowscodecs: Add tests for DDS encoder.

Alexandre Julliard julliard at winehq.org
Mon May 3 16:37:04 CDT 2021


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

Author: Ziqing Hui <zhui at codeweavers.com>
Date:   Sat May  1 11:14:34 2021 +0800

windowscodecs: Add tests for DDS encoder.

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/ddsformat.c | 89 ++++++++++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)

diff --git a/dlls/windowscodecs/tests/ddsformat.c b/dlls/windowscodecs/tests/ddsformat.c
index 28554e77c9b..492416c0ce4 100644
--- a/dlls/windowscodecs/tests/ddsformat.c
+++ b/dlls/windowscodecs/tests/ddsformat.c
@@ -500,6 +500,31 @@ static IWICBitmapDecoder *create_decoder(void)
     return decoder;
 }
 
+static IWICBitmapEncoder *create_encoder(void)
+{
+    IWICBitmapEncoder *encoder = NULL;
+    GUID guidresult;
+    HRESULT hr;
+
+    hr = CoCreateInstance(&CLSID_WICDdsEncoder, NULL, CLSCTX_INPROC_SERVER,
+                          &IID_IWICBitmapEncoder, (void **)&encoder);
+    if (hr != S_OK)
+    {
+        win_skip("DDS encoder is not supported\n");
+        return NULL;
+    }
+
+    memset(&guidresult, 0, sizeof(guidresult));
+
+    hr = IWICBitmapEncoder_GetContainerFormat(encoder, &guidresult);
+    ok(hr == S_OK, "GetContainerFormat failed, hr %#x\n", hr);
+
+    ok(IsEqualGUID(&guidresult, &GUID_ContainerFormatDds),
+       "Got unexpected container format %s\n", debugstr_guid(&guidresult));
+
+    return encoder;
+}
+
 static HRESULT init_decoder(IWICBitmapDecoder *decoder, IWICStream *stream, HRESULT expected, int index, BOOL wine_init)
 {
     HRESULT hr;
@@ -1231,6 +1256,69 @@ static void test_dds_decoder(void)
     }
 }
 
+static void test_dds_encoder_initialize(void)
+{
+    IWICBitmapEncoder *encoder = NULL;
+    IWICStream *stream = NULL;
+    BYTE buffer[1];
+    HRESULT hr;
+
+    encoder = create_encoder();
+    if (!encoder) goto end;
+
+    stream = create_stream(buffer, sizeof(buffer));
+    if (!stream) goto end;
+
+    /* initialize with invalid cache option */
+
+    hr = IWICBitmapEncoder_Initialize(encoder, (IStream *)stream, 0xdeadbeef);
+    todo_wine
+    ok(hr == WINCODEC_ERR_UNSUPPORTEDOPERATION, "Initialize got unexpected hr %#x\n", hr);
+
+    hr = IWICBitmapEncoder_Initialize(encoder, (IStream *)stream, WICBitmapEncoderNoCache);
+    todo_wine
+    ok(hr == E_INVALIDARG, "Initialize got unexpected hr %#x\n", hr);
+
+    IWICBitmapEncoder_Release(encoder);
+
+    /* initialize with null stream */
+
+    encoder = create_encoder();
+    if (!encoder) goto end;
+
+    hr = IWICBitmapEncoder_Initialize(encoder, NULL, WICBitmapEncoderNoCache);
+    todo_wine
+    ok(hr == E_INVALIDARG, "Initialize got unexpected hr %#x\n", hr);
+
+    hr = IWICBitmapEncoder_Initialize(encoder, (IStream *)stream, WICBitmapEncoderNoCache);
+    todo_wine
+    ok(hr == S_OK, "Initialize failed, hr %#x\n", hr);
+
+    IWICBitmapEncoder_Release(encoder);
+
+    /* regularly initialize */
+
+    encoder = create_encoder();
+    if (!encoder) goto end;
+
+    hr = IWICBitmapEncoder_Initialize(encoder, (IStream *)stream, WICBitmapEncoderNoCache);
+    todo_wine
+    ok(hr == S_OK, "Initialize failed, hr %#x\n", hr);
+
+    hr = IWICBitmapEncoder_Initialize(encoder, (IStream *)stream, WICBitmapEncoderNoCache);
+    todo_wine
+    ok(hr == WINCODEC_ERR_WRONGSTATE, "Initialize got unexpected hr %#x\n", hr);
+
+end:
+    if (stream) IWICStream_Release(stream);
+    if (encoder) IWICBitmapEncoder_Release(encoder);
+}
+
+static void test_dds_encoder(void)
+{
+    test_dds_encoder_initialize();
+}
+
 START_TEST(ddsformat)
 {
     HRESULT hr;
@@ -1242,6 +1330,7 @@ START_TEST(ddsformat)
     if (hr != S_OK) goto end;
 
     test_dds_decoder();
+    test_dds_encoder();
 
 end:
     if (factory) IWICImagingFactory_Release(factory);




More information about the wine-cvs mailing list