2 * Unit test suite for comdlg32 API functions: font dialogs
4 * Copyright 2009 Vincent Povirk for CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #define WIN32_NO_STATUS
24 #include <wine/test.h>
29 //#include "winbase.h"
30 //#include "winerror.h"
34 //#include "objbase.h"
38 static int get_dpiy(void)
44 result
= GetDeviceCaps(hdc
, LOGPIXELSY
);
50 static HDC
get_printer_ic(void)
52 PRINTER_INFO_2A
*info
;
53 DWORD info_size
, num_printers
=0;
57 EnumPrintersA(PRINTER_ENUM_LOCAL
, NULL
, 2, NULL
, 0, &info_size
, &num_printers
);
62 info
= HeapAlloc(GetProcessHeap(), 0, info_size
);
64 ret
= EnumPrintersA(PRINTER_ENUM_LOCAL
, NULL
, 2, (LPBYTE
)info
, info_size
, &info_size
, &num_printers
);
67 result
= CreateICA(info
->pDriverName
, info
->pPrinterName
, NULL
, NULL
);
69 HeapFree(GetProcessHeap(), 0, info
);
74 static UINT_PTR CALLBACK
CFHookProcOK(HWND hdlg
, UINT msg
, WPARAM wparam
, LPARAM lparam
)
79 PostMessageA(hdlg
, WM_COMMAND
, IDOK
, FALSE
);
86 static void test_ChooseFontA(void)
91 int dpiy
= get_dpiy();
92 int expected_pointsize
, expected_lfheight
;
95 memset(&lfa
, 0, sizeof(LOGFONTA
));
97 lfa
.lfWeight
= FW_NORMAL
;
98 strcpy(lfa
.lfFaceName
, "Symbol");
100 memset(&cfa
, 0, sizeof(CHOOSEFONTA
));
101 cfa
.lStructSize
= sizeof(cfa
);
102 cfa
.lpLogFont
= &lfa
;
103 cfa
.Flags
= CF_ENABLEHOOK
|CF_INITTOLOGFONTSTRUCT
|CF_SCREENFONTS
;
104 cfa
.lpfnHook
= CFHookProcOK
;
106 ret
= ChooseFontA(&cfa
);
108 expected_pointsize
= MulDiv(16, 72, dpiy
) * 10;
109 expected_lfheight
= -MulDiv(expected_pointsize
, dpiy
, 720);
111 ok(ret
== TRUE
, "ChooseFontA returned FALSE\n");
112 ok(cfa
.iPointSize
== expected_pointsize
, "Expected %i, got %i\n", expected_pointsize
, cfa
.iPointSize
);
113 ok(lfa
.lfHeight
== expected_lfheight
, "Expected %i, got %i\n", expected_lfheight
, lfa
.lfHeight
);
114 ok(lfa
.lfWeight
== FW_NORMAL
, "Expected FW_NORMAL, got %i\n", lfa
.lfWeight
);
115 ok(strcmp(lfa
.lfFaceName
, "Symbol") == 0, "Expected Symbol, got %s\n", lfa
.lfFaceName
);
117 printer_ic
= get_printer_ic();
119 skip("can't get a DC for a local printer\n");
122 memset(&lfa
, 0, sizeof(LOGFONTA
));
124 lfa
.lfWeight
= FW_NORMAL
;
125 strcpy(lfa
.lfFaceName
, "Symbol");
127 memset(&cfa
, 0, sizeof(CHOOSEFONTA
));
128 cfa
.lStructSize
= sizeof(cfa
);
129 cfa
.lpLogFont
= &lfa
;
130 cfa
.Flags
= CF_ENABLEHOOK
|CF_INITTOLOGFONTSTRUCT
|CF_PRINTERFONTS
;
131 cfa
.hDC
= printer_ic
;
132 cfa
.lpfnHook
= CFHookProcOK
;
134 ret
= ChooseFontA(&cfa
);
136 expected_pointsize
= MulDiv(16, 72, dpiy
) * 10;
137 expected_lfheight
= -MulDiv(expected_pointsize
, dpiy
, 720);
139 ok(ret
== TRUE
, "ChooseFontA returned FALSE\n");
140 ok(cfa
.iPointSize
== expected_pointsize
, "Expected %i, got %i\n", expected_pointsize
, cfa
.iPointSize
);
141 ok(lfa
.lfHeight
== expected_lfheight
, "Expected %i, got %i\n", expected_lfheight
, lfa
.lfHeight
);
142 ok(lfa
.lfWeight
== FW_NORMAL
, "Expected FW_NORMAL, got %i\n", lfa
.lfWeight
);
143 ok((strcmp(lfa
.lfFaceName
, "Symbol") == 0) ||
144 broken(*lfa
.lfFaceName
== 0), "Expected Symbol, got %s\n", lfa
.lfFaceName
);
146 DeleteDC(printer_ic
);