Paul Vriens : gdi32/tests: Make sure we can run on win9x and NT again.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Mar 5 13:10:28 CST 2007


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

Author: Paul Vriens <paul.vriens.wine at gmail.com>
Date:   Mon Mar  5 17:29:04 2007 +0100

gdi32/tests: Make sure we can run on win9x and NT again.

---

 dlls/gdi32/tests/font.c |   60 +++++++++++++++++++++++++++++------------------
 1 files changed, 37 insertions(+), 23 deletions(-)

diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c
index 405d4bd..44586bc 100644
--- a/dlls/gdi32/tests/font.c
+++ b/dlls/gdi32/tests/font.c
@@ -30,9 +30,25 @@
 
 #include "wine/test.h"
 
+LONG  (WINAPI *pGdiGetCharDimensions)(HDC hdc, LPTEXTMETRICW lptm, LONG *height);
+BOOL  (WINAPI *pGetCharABCWidthsW)(HDC hdc, UINT first, UINT last, LPABC abc);
+DWORD (WINAPI *pGetFontUnicodeRanges)(HDC hdc, LPGLYPHSET lpgs);
 DWORD (WINAPI *pGetGlyphIndicesA)(HDC hdc, LPCSTR lpstr, INT count, LPWORD pgi, DWORD flags);
 DWORD (WINAPI *pGetGlyphIndicesW)(HDC hdc, LPCWSTR lpstr, INT count, LPWORD pgi, DWORD flags);
 
+static HMODULE hgdi32 = 0;
+
+static void init(void)
+{
+    hgdi32 = GetModuleHandleA("gdi32.dll");
+
+    pGdiGetCharDimensions = (void *)GetProcAddress(hgdi32, "GdiGetCharDimensions");
+    pGetCharABCWidthsW = (void *)GetProcAddress(hgdi32, "GetCharABCWidthsW");
+    pGetFontUnicodeRanges = (void *)GetProcAddress(hgdi32, "GetFontUnicodeRanges");
+    pGetGlyphIndicesA = (void *)GetProcAddress(hgdi32, "GetGlyphIndicesA");
+    pGetGlyphIndicesW = (void *)GetProcAddress(hgdi32, "GetGlyphIndicesW");
+}
+
 static INT CALLBACK is_font_installed_proc(const LOGFONT *elf, const TEXTMETRIC *ntm, DWORD type, LPARAM lParam)
 {
     return 0;
@@ -370,27 +386,25 @@ static void test_GdiGetCharDimensions(void)
     SIZE size;
     LONG avgwidth, height;
     static const char szAlphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-    typedef LONG (WINAPI *fnGdiGetCharDimensions)(HDC hdc, LPTEXTMETRICW lptm, LONG *height);
-    fnGdiGetCharDimensions GdiGetCharDimensions = (fnGdiGetCharDimensions)GetProcAddress(LoadLibrary("gdi32"), "GdiGetCharDimensions");
-    if (!GdiGetCharDimensions) return;
+    if (!pGdiGetCharDimensions) return;
 
     hdc = CreateCompatibleDC(NULL);
 
     GetTextExtentPoint(hdc, szAlphabet, strlen(szAlphabet), &size);
     avgwidth = ((size.cx / 26) + 1) / 2;
 
-    ret = GdiGetCharDimensions(hdc, &tm, &height);
+    ret = pGdiGetCharDimensions(hdc, &tm, &height);
     ok(ret == avgwidth, "GdiGetCharDimensions should have returned width of %d instead of %d\n", avgwidth, ret);
     ok(height == tm.tmHeight, "GdiGetCharDimensions should have set height to %d instead of %d\n", tm.tmHeight, height);
 
-    ret = GdiGetCharDimensions(hdc, &tm, NULL);
+    ret = pGdiGetCharDimensions(hdc, &tm, NULL);
     ok(ret == avgwidth, "GdiGetCharDimensions should have returned width of %d instead of %d\n", avgwidth, ret);
 
-    ret = GdiGetCharDimensions(hdc, NULL, NULL);
+    ret = pGdiGetCharDimensions(hdc, NULL, NULL);
     ok(ret == avgwidth, "GdiGetCharDimensions should have returned width of %d instead of %d\n", avgwidth, ret);
 
     height = 0;
-    ret = GdiGetCharDimensions(hdc, NULL, &height);
+    ret = pGdiGetCharDimensions(hdc, NULL, &height);
     ok(ret == avgwidth, "GdiGetCharDimensions should have returned width of %d instead of %d\n", avgwidth, ret);
     ok(height == size.cy, "GdiGetCharDimensions should have set height to %d instead of %d\n", size.cy, height);
 
@@ -401,11 +415,9 @@ static void test_GetCharABCWidthsW(void)
 {
     BOOL ret;
     ABC abc[1];
-    typedef BOOL (WINAPI *fnGetCharABCWidthsW)(HDC hdc, UINT first, UINT last, LPABC abc);
-    fnGetCharABCWidthsW GetCharABCWidthsW = (fnGetCharABCWidthsW)GetProcAddress(LoadLibrary("gdi32"), "GetCharABCWidthsW");
-    if (!GetCharABCWidthsW) return;
+    if (!pGetCharABCWidthsW) return;
 
-    ret = GetCharABCWidthsW(NULL, 'a', 'a', abc);
+    ret = pGetCharABCWidthsW(NULL, 'a', 'a', abc);
     ok(!ret, "GetCharABCWidthsW should have returned FALSE\n");
 }
 
@@ -493,10 +505,7 @@ static void test_GetGlyphIndices()
     WORD     glyphs[(sizeof(testtext)/2)-1];
     TEXTMETRIC textm;
 
-    typedef BOOL (WINAPI *fnGetGlyphIndicesW)(HDC hdc, LPCWSTR lpstr, INT count, LPWORD pgi, DWORD flags);
-    fnGetGlyphIndicesW GetGlyphIndicesW = (fnGetGlyphIndicesW)GetProcAddress(LoadLibrary("gdi32"), 
-                                           "GetGlyphIndicesW");
-    if (!GetGlyphIndicesW) {
+    if (!pGetGlyphIndicesW) {
         trace("GetGlyphIndices not available on platform\n");
         return;
     }
@@ -516,11 +525,11 @@ static void test_GetGlyphIndices()
 
     ok(GetTextMetrics(hdc, &textm), "GetTextMetric failed\n");
     flags |= GGI_MARK_NONEXISTING_GLYPHS;
-    charcount = GetGlyphIndicesW(hdc, testtext, (sizeof(testtext)/2)-1, glyphs, flags);
+    charcount = pGetGlyphIndicesW(hdc, testtext, (sizeof(testtext)/2)-1, glyphs, flags);
     ok(charcount == 5, "GetGlyphIndices count of glyphs should = 5 not %d\n", charcount);
     ok(glyphs[4] == 0x001f, "GetGlyphIndices should have returned a nonexistent char not %04x\n", glyphs[4]);
     flags = 0;
-    charcount = GetGlyphIndicesW(hdc, testtext, (sizeof(testtext)/2)-1, glyphs, flags);
+    charcount = pGetGlyphIndicesW(hdc, testtext, (sizeof(testtext)/2)-1, glyphs, flags);
     ok(charcount == 5, "GetGlyphIndices count of glyphs should = 5 not %d\n", charcount);
     ok(glyphs[4] == textm.tmDefaultChar, "GetGlyphIndices should have returned a %04x not %04x\n", 
                     textm.tmDefaultChar, glyphs[4]);
@@ -1048,9 +1057,6 @@ static void test_font_charset(void)
     };
     int i;
 
-    pGetGlyphIndicesA = (void *)GetProcAddress(GetModuleHandle("gdi32.dll"), "GetGlyphIndicesA");
-    pGetGlyphIndicesW = (void *)GetProcAddress(GetModuleHandle("gdi32.dll"), "GetGlyphIndicesW");
-
     if (!pGetGlyphIndicesA || !pGetGlyphIndicesW)
     {
         skip("Skipping the font charset test on a Win9x platform\n");
@@ -1096,6 +1102,12 @@ static void test_GetFontUnicodeRanges(void)
     DWORD size, i;
     GLYPHSET *gs;
 
+    if (!pGetFontUnicodeRanges)
+    {
+        skip("GetFontUnicodeRanges not available before W2K\n");
+        return;
+    }
+
     memset(&lf, 0, sizeof(lf));
     lstrcpyA(lf.lfFaceName, "Arial");
     hfont = create_font("Arial", &lf);
@@ -1103,15 +1115,15 @@ static void test_GetFontUnicodeRanges(void)
     hdc = GetDC(0);
     hfont_old = SelectObject(hdc, hfont);
 
-    size = GetFontUnicodeRanges(NULL, NULL);
+    size = pGetFontUnicodeRanges(NULL, NULL);
     ok(!size, "GetFontUnicodeRanges succeeded unexpectedly\n");
 
-    size = GetFontUnicodeRanges(hdc, NULL);
+    size = pGetFontUnicodeRanges(hdc, NULL);
     ok(size, "GetFontUnicodeRanges failed unexpectedly\n");
 
     gs = HeapAlloc(GetProcessHeap(), 0, size);
 
-    size = GetFontUnicodeRanges(hdc, gs);
+    size = pGetFontUnicodeRanges(hdc, gs);
     ok(size, "GetFontUnicodeRanges failed\n");
 
     for (i = 0; i < gs->cRanges; i++)
@@ -1127,6 +1139,8 @@ static void test_GetFontUnicodeRanges(void)
 
 START_TEST(font)
 {
+    init();
+
     test_logfont();
     test_bitmap_font();
     test_bitmap_font_metrics();




More information about the wine-cvs mailing list