Nikolay Sivov : dwrite/tests: Basic test for GetPaletteEntries().

Alexandre Julliard julliard at wine.codeweavers.com
Fri Aug 7 10:57:42 CDT 2015


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Aug  6 19:43:58 2015 +0300

dwrite/tests: Basic test for GetPaletteEntries().

---

 dlls/dwrite/tests/font.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 107 insertions(+)

diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 9a75abc..6c5cb82 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -39,6 +39,7 @@
 #define MS_CMAP_TAG MS_MAKE_TAG('c','m','a','p')
 #define MS_VDMX_TAG MS_MAKE_TAG('V','D','M','X')
 #define MS_GASP_TAG MS_MAKE_TAG('g','a','s','p')
+#define MS_CPAL_TAG MS_MAKE_TAG('C','P','A','L')
 
 #define EXPECT_HR(hr,hr_exp) \
     ok(hr == hr_exp, "got 0x%08x, expected 0x%08x\n", hr, hr_exp)
@@ -4754,6 +4755,111 @@ static void test_IsSymbolFont(void)
     IDWriteFactory_Release(factory);
 }
 
+struct CPAL_Header_0
+{
+    USHORT version;
+    USHORT numPaletteEntries;
+    USHORT numPalette;
+    USHORT numColorRecords;
+    ULONG  offsetFirstColorRecord;
+    USHORT colorRecordIndices[1];
+};
+
+static void test_GetPaletteEntries(void)
+{
+    static const WCHAR emojiW[] = {'S','e','g','o','e',' ','U','I',' ','E','m','o','j','i',0};
+    IDWriteFontFace2 *fontface2;
+    IDWriteFontFace *fontface;
+    IDWriteFactory *factory;
+    IDWriteFont *font;
+    DWRITE_COLOR_F color;
+    UINT32 palettecount, entrycount, size, colorrecords;
+    void *ctxt;
+    const struct CPAL_Header_0 *cpal_header;
+    HRESULT hr;
+    BOOL exists;
+
+    factory = create_factory();
+
+    /* Tahoma, no color support */
+    fontface = create_fontface(factory);
+    hr = IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace2, (void**)&fontface2);
+    IDWriteFontFace_Release(fontface);
+    if (hr != S_OK) {
+        IDWriteFactory_Release(factory);
+        win_skip("GetPaletteEntries() is not supported.\n");
+        return;
+    }
+
+    hr = IDWriteFontFace2_GetPaletteEntries(fontface2, 0, 0, 1, &color);
+todo_wine
+    ok(hr == DWRITE_E_NOCOLOR, "got 0x%08x\n", hr);
+    IDWriteFontFace2_Release(fontface2);
+
+    /* Segoe UI Emoji, with color support */
+    font = get_font(factory, emojiW, DWRITE_FONT_STYLE_NORMAL);
+    if (!font) {
+        IDWriteFactory_Release(factory);
+        skip("Segoe UI Emoji font not found.\n");
+        return;
+    }
+
+    hr = IDWriteFont_CreateFontFace(font, &fontface);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    IDWriteFont_Release(font);
+
+    hr = IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace2, (void**)&fontface2);
+    IDWriteFontFace_Release(fontface);
+
+    palettecount = IDWriteFontFace2_GetColorPaletteCount(fontface2);
+    ok(palettecount >= 1, "got %u\n", palettecount);
+
+    entrycount = IDWriteFontFace2_GetPaletteEntryCount(fontface2);
+    ok(entrycount >= 1, "got %u\n", entrycount);
+
+    exists = FALSE;
+    hr = IDWriteFontFace2_TryGetFontTable(fontface2, MS_CPAL_TAG, (const void**)&cpal_header, &size, &ctxt, &exists);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(exists, "got %d\n", exists);
+    colorrecords = GET_BE_WORD(cpal_header->numColorRecords);
+    ok(colorrecords >= 1, "got %u\n", colorrecords);
+
+    /* invalid palette index */
+    color.r = color.g = color.b = color.a = 123.0;
+    hr = IDWriteFontFace2_GetPaletteEntries(fontface2, palettecount, 0, 1, &color);
+todo_wine
+    ok(hr == DWRITE_E_NOCOLOR, "got 0x%08x\n", hr);
+    ok(color.r == 123.0 && color.g == 123.0 && color.b == 123.0 && color.a == 123.0,
+        "got wrong color %.2fx%.2fx%.2fx%.2f\n", color.r, color.g, color.b, color.a);
+
+    /* invalid entry index */
+    color.r = color.g = color.b = color.a = 123.0;
+    hr = IDWriteFontFace2_GetPaletteEntries(fontface2, 0, entrycount, 1, &color);
+todo_wine
+    ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+    ok(color.r == 123.0 && color.g == 123.0 && color.b == 123.0 && color.a == 123.0,
+        "got wrong color %.2fx%.2fx%.2fx%.2f\n", color.r, color.g, color.b, color.a);
+
+    color.r = color.g = color.b = color.a = 123.0;
+    hr = IDWriteFontFace2_GetPaletteEntries(fontface2, 0, entrycount - 1, 1, &color);
+todo_wine {
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(color.r != 123.0 && color.g != 123.0 && color.b != 123.0 && color.a != 123.0,
+        "got wrong color %.2fx%.2fx%.2fx%.2f\n", color.r, color.g, color.b, color.a);
+}
+
+    /* zero return length */
+    color.r = color.g = color.b = color.a = 123.0;
+    hr = IDWriteFontFace2_GetPaletteEntries(fontface2, 0, 0, 0, &color);
+todo_wine
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(color.r == 123.0 && color.g == 123.0 && color.b == 123.0 && color.a == 123.0,
+        "got wrong color %.2fx%.2fx%.2fx%.2f\n", color.r, color.g, color.b, color.a);
+
+    IDWriteFontFace2_Release(fontface2);
+    IDWriteFactory_Release(factory);
+}
+
 START_TEST(font)
 {
     IDWriteFactory *factory;
@@ -4804,6 +4910,7 @@ START_TEST(font)
     test_GetAlphaBlendParams();
     test_CreateAlphaTexture();
     test_IsSymbolFont();
+    test_GetPaletteEntries();
 
     IDWriteFactory_Release(factory);
 }




More information about the wine-cvs mailing list