2 * Unit test suite for string format
4 * Copyright (C) 2007 Google (Evan Stade)
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
21 #define WIN32_NO_STATUS
23 #define COM_NO_WINDOWS_H
25 //#include "windows.h"
26 #include <wine/test.h>
31 #define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got)
32 #define expectf(expected, got) ok(got == expected, "Expected %.2f, got %.2f\n", expected, got)
34 static void test_constructor(void)
36 GpStringFormat
*format
;
39 StringAlignment align
, valign
;
40 StringTrimming trimming
;
41 StringDigitSubstitute digitsub
;
44 stat
= GdipCreateStringFormat(0, LANG_NEUTRAL
, &format
);
47 GdipGetStringFormatAlign(format
, &align
);
48 GdipGetStringFormatLineAlign(format
, &valign
);
49 GdipGetStringFormatHotkeyPrefix(format
, &n
);
50 GdipGetStringFormatTrimming(format
, &trimming
);
51 GdipGetStringFormatDigitSubstitution(format
, &digitlang
, &digitsub
);
52 GdipGetStringFormatMeasurableCharacterRangeCount(format
, &count
);
54 expect(HotkeyPrefixNone
, n
);
55 expect(StringAlignmentNear
, align
);
56 expect(StringAlignmentNear
, align
);
57 expect(StringTrimmingCharacter
, trimming
);
58 expect(StringDigitSubstituteUser
, digitsub
);
59 expect(LANG_NEUTRAL
, digitlang
);
62 stat
= GdipDeleteStringFormat(format
);
66 static void test_characterrange(void)
68 CharacterRange ranges
[3];
70 GpStringFormat
* format
;
73 stat
= GdipCreateStringFormat(0, LANG_NEUTRAL
, &format
);
75 stat
= GdipSetStringFormatMeasurableCharacterRanges(NULL
, 3, ranges
);
76 expect(InvalidParameter
, stat
);
77 stat
= GdipSetStringFormatMeasurableCharacterRanges(format
, 0, ranges
);
79 stat
= GdipSetStringFormatMeasurableCharacterRanges(format
, 3, NULL
);
80 expect(InvalidParameter
, stat
);
82 stat
= GdipSetStringFormatMeasurableCharacterRanges(format
, 3, ranges
);
84 stat
= GdipGetStringFormatMeasurableCharacterRangeCount(format
, &count
);
86 if (stat
== Ok
) expect(3, count
);
88 stat
= GdipDeleteStringFormat(format
);
92 static void test_digitsubstitution(void)
94 GpStringFormat
*format
;
96 StringDigitSubstitute digitsub
;
99 stat
= GdipCreateStringFormat(0, LANG_RUSSIAN
, &format
);
103 stat
= GdipGetStringFormatDigitSubstitution(NULL
, NULL
, NULL
);
104 expect(InvalidParameter
, stat
);
105 stat
= GdipGetStringFormatDigitSubstitution(format
, NULL
, NULL
);
107 stat
= GdipGetStringFormatDigitSubstitution(NULL
, &digitlang
, NULL
);
108 expect(InvalidParameter
, stat
);
109 stat
= GdipGetStringFormatDigitSubstitution(NULL
, NULL
, &digitsub
);
110 expect(InvalidParameter
, stat
);
111 stat
= GdipGetStringFormatDigitSubstitution(NULL
, &digitlang
, &digitsub
);
112 expect(InvalidParameter
, stat
);
113 stat
= GdipSetStringFormatDigitSubstitution(NULL
, LANG_NEUTRAL
, StringDigitSubstituteNone
);
114 expect(InvalidParameter
, stat
);
116 /* try to get both and one by one */
117 stat
= GdipGetStringFormatDigitSubstitution(format
, &digitlang
, &digitsub
);
119 expect(StringDigitSubstituteUser
, digitsub
);
120 expect(LANG_NEUTRAL
, digitlang
);
122 digitsub
= StringDigitSubstituteNone
;
123 stat
= GdipGetStringFormatDigitSubstitution(format
, NULL
, &digitsub
);
125 expect(StringDigitSubstituteUser
, digitsub
);
127 digitlang
= LANG_RUSSIAN
;
128 stat
= GdipGetStringFormatDigitSubstitution(format
, &digitlang
, NULL
);
130 expect(LANG_NEUTRAL
, digitlang
);
133 stat
= GdipSetStringFormatDigitSubstitution(format
, MAKELANGID(LANG_CHINESE
, SUBLANG_CHINESE_TRADITIONAL
),
134 StringDigitSubstituteUser
);
136 digitsub
= StringDigitSubstituteNone
;
137 digitlang
= LANG_RUSSIAN
;
138 stat
= GdipGetStringFormatDigitSubstitution(format
, &digitlang
, &digitsub
);
140 expect(StringDigitSubstituteUser
, digitsub
);
141 expect(MAKELANGID(LANG_CHINESE
, SUBLANG_CHINESE_TRADITIONAL
), digitlang
);
143 stat
= GdipDeleteStringFormat(format
);
147 static void test_getgenerictypographic(void)
149 GpStringFormat
*format
;
153 StringAlignment align
, valign
;
154 StringTrimming trimming
;
155 StringDigitSubstitute digitsub
;
160 stat
= GdipStringFormatGetGenericTypographic(NULL
);
161 expect(InvalidParameter
, stat
);
163 stat
= GdipStringFormatGetGenericTypographic(&format
);
166 GdipGetStringFormatFlags(format
, &flags
);
167 GdipGetStringFormatAlign(format
, &align
);
168 GdipGetStringFormatLineAlign(format
, &valign
);
169 GdipGetStringFormatHotkeyPrefix(format
, &n
);
170 GdipGetStringFormatTrimming(format
, &trimming
);
171 GdipGetStringFormatDigitSubstitution(format
, &digitlang
, &digitsub
);
172 GdipGetStringFormatTabStopCount(format
, &tabcount
);
174 expect((StringFormatFlagsNoFitBlackBox
|StringFormatFlagsLineLimit
| StringFormatFlagsNoClip
),
176 expect(HotkeyPrefixNone
, n
);
177 expect(StringAlignmentNear
, align
);
178 expect(StringAlignmentNear
, align
);
179 expect(StringTrimmingNone
, trimming
);
180 expect(StringDigitSubstituteUser
, digitsub
);
181 expect(LANG_NEUTRAL
, digitlang
);
184 stat
= GdipDeleteStringFormat(format
);
188 static REAL tabstops
[] = {0.0, 10.0, 2.0};
189 static void test_tabstops(void)
191 GpStringFormat
*format
;
197 stat
= GdipCreateStringFormat(0, LANG_NEUTRAL
, &format
);
201 stat
= GdipGetStringFormatTabStopCount(NULL
, NULL
);
202 expect(InvalidParameter
, stat
);
203 stat
= GdipGetStringFormatTabStopCount(NULL
, &count
);
204 expect(InvalidParameter
, stat
);
205 stat
= GdipGetStringFormatTabStopCount(format
, NULL
);
206 expect(InvalidParameter
, stat
);
208 stat
= GdipSetStringFormatTabStops(NULL
, 0.0, 0, NULL
);
209 expect(InvalidParameter
, stat
);
210 stat
= GdipSetStringFormatTabStops(format
, 0.0, 0, NULL
);
211 expect(InvalidParameter
, stat
);
212 stat
= GdipSetStringFormatTabStops(NULL
, 0.0, 0, tabstops
);
213 expect(InvalidParameter
, stat
);
215 stat
= GdipGetStringFormatTabStops(NULL
, 0, NULL
, NULL
);
216 expect(InvalidParameter
, stat
);
217 stat
= GdipGetStringFormatTabStops(format
, 0, NULL
, NULL
);
218 expect(InvalidParameter
, stat
);
219 stat
= GdipGetStringFormatTabStops(NULL
, 0, &firsttab
, NULL
);
220 expect(InvalidParameter
, stat
);
221 stat
= GdipGetStringFormatTabStops(NULL
, 0, NULL
, tabs
);
222 expect(InvalidParameter
, stat
);
223 stat
= GdipGetStringFormatTabStops(format
, 0, &firsttab
, NULL
);
224 expect(InvalidParameter
, stat
);
225 stat
= GdipGetStringFormatTabStops(format
, 0, NULL
, tabs
);
226 expect(InvalidParameter
, stat
);
229 stat
= GdipGetStringFormatTabStopCount(format
, &count
);
232 /* negative tabcount */
233 stat
= GdipSetStringFormatTabStops(format
, 0.0, -1, tabstops
);
236 stat
= GdipGetStringFormatTabStopCount(format
, &count
);
240 stat
= GdipSetStringFormatTabStops(format
, -10.0, 0, tabstops
);
242 stat
= GdipSetStringFormatTabStops(format
, -10.0, 1, tabstops
);
243 expect(NotImplemented
, stat
);
246 tabs
[0] = tabs
[1] = tabs
[2] = -1.0;
247 stat
= GdipGetStringFormatTabStops(format
, 0, &firsttab
, tabs
);
249 expectf(-1.0, tabs
[0]);
250 expectf(-1.0, tabs
[1]);
251 expectf(-1.0, tabs
[2]);
252 expectf(0.0, firsttab
);
254 stat
= GdipSetStringFormatTabStops(format
, +0.0, 3, tabstops
);
257 stat
= GdipGetStringFormatTabStopCount(format
, &count
);
262 tabs
[0] = tabs
[1] = tabs
[2] = -1.0;
263 stat
= GdipGetStringFormatTabStops(format
, 3, &firsttab
, tabs
);
265 expectf(0.0, tabs
[0]);
266 expectf(10.0, tabs
[1]);
267 expectf(2.0, tabs
[2]);
268 expectf(0.0, firsttab
);
270 stat
= GdipSetStringFormatTabStops(format
, 10.0, 3, tabstops
);
273 tabs
[0] = tabs
[1] = tabs
[2] = -1.0;
274 stat
= GdipGetStringFormatTabStops(format
, 0, &firsttab
, tabs
);
276 expectf(-1.0, tabs
[0]);
277 expectf(-1.0, tabs
[1]);
278 expectf(-1.0, tabs
[2]);
279 expectf(10.0, firsttab
);
281 /* zero tabcount, after valid setting to 3 */
282 stat
= GdipSetStringFormatTabStops(format
, 0.0, 0, tabstops
);
285 stat
= GdipGetStringFormatTabStopCount(format
, &count
);
289 stat
= GdipDeleteStringFormat(format
);
293 static void test_getgenericdefault(void)
295 GpStringFormat
*format
;
300 StringAlignment align
, valign
;
301 StringTrimming trimming
;
302 StringDigitSubstitute digitsub
;
307 stat
= GdipStringFormatGetGenericDefault(NULL
);
308 expect(InvalidParameter
, stat
);
310 stat
= GdipStringFormatGetGenericDefault(&format
);
313 GdipGetStringFormatFlags(format
, &flags
);
314 GdipGetStringFormatAlign(format
, &align
);
315 GdipGetStringFormatLineAlign(format
, &valign
);
316 GdipGetStringFormatHotkeyPrefix(format
, &n
);
317 GdipGetStringFormatTrimming(format
, &trimming
);
318 GdipGetStringFormatDigitSubstitution(format
, &digitlang
, &digitsub
);
319 GdipGetStringFormatTabStopCount(format
, &tabcount
);
322 expect(HotkeyPrefixNone
, n
);
323 expect(StringAlignmentNear
, align
);
324 expect(StringAlignmentNear
, align
);
325 expect(StringTrimmingCharacter
, trimming
);
326 expect(StringDigitSubstituteUser
, digitsub
);
327 expect(LANG_NEUTRAL
, digitlang
);
330 stat
= GdipDeleteStringFormat(format
);
334 static void test_stringformatflags(void)
336 GpStringFormat
*format
;
341 stat
= GdipCreateStringFormat(0, LANG_NEUTRAL
, &format
);
345 stat
= GdipSetStringFormatFlags(NULL
, 0);
346 expect(InvalidParameter
, stat
);
348 stat
= GdipSetStringFormatFlags(format
, 0);
350 stat
= GdipGetStringFormatFlags(format
, &flags
);
354 /* Check some valid flags */
355 stat
= GdipSetStringFormatFlags(format
, StringFormatFlagsDirectionRightToLeft
);
357 stat
= GdipGetStringFormatFlags(format
, &flags
);
359 expect(StringFormatFlagsDirectionRightToLeft
, flags
);
361 stat
= GdipSetStringFormatFlags(format
, StringFormatFlagsNoFontFallback
);
363 stat
= GdipGetStringFormatFlags(format
, &flags
);
365 expect(StringFormatFlagsNoFontFallback
, flags
);
367 /* Check some flag combinations */
368 stat
= GdipSetStringFormatFlags(format
, StringFormatFlagsDirectionVertical
369 | StringFormatFlagsNoFitBlackBox
);
371 stat
= GdipGetStringFormatFlags(format
, &flags
);
373 expect((StringFormatFlagsDirectionVertical
374 | StringFormatFlagsNoFitBlackBox
), flags
);
376 stat
= GdipSetStringFormatFlags(format
, StringFormatFlagsDisplayFormatControl
377 | StringFormatFlagsMeasureTrailingSpaces
);
379 stat
= GdipGetStringFormatFlags(format
, &flags
);
381 expect((StringFormatFlagsDisplayFormatControl
382 | StringFormatFlagsMeasureTrailingSpaces
), flags
);
384 /* Check invalid flags */
385 stat
= GdipSetStringFormatFlags(format
, 0xdeadbeef);
387 stat
= GdipGetStringFormatFlags(format
, &flags
);
389 expect(0xdeadbeef, flags
);
391 stat
= GdipDeleteStringFormat(format
);
395 START_TEST(stringformat
)
397 struct GdiplusStartupInput gdiplusStartupInput
;
398 ULONG_PTR gdiplusToken
;
400 gdiplusStartupInput
.GdiplusVersion
= 1;
401 gdiplusStartupInput
.DebugEventCallback
= NULL
;
402 gdiplusStartupInput
.SuppressBackgroundThread
= 0;
403 gdiplusStartupInput
.SuppressExternalCodecs
= 0;
405 GdiplusStartup(&gdiplusToken
, &gdiplusStartupInput
, NULL
);
408 test_characterrange();
409 test_digitsubstitution();
410 test_getgenerictypographic();
412 test_getgenericdefault();
413 test_stringformatflags();
415 GdiplusShutdown(gdiplusToken
);