2 * Unit test suite for pathiterator
4 * Copyright (C) 2008 Nikolay Sivov
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)
33 static void test_constructor_destructor(void)
39 GdipCreatePath(FillModeAlternate
, &path
);
40 GdipAddPathRectangle(path
, 5.0, 5.0, 100.0, 50.0);
43 stat
= GdipCreatePathIter(NULL
, NULL
);
44 expect(InvalidParameter
, stat
);
46 stat
= GdipCreatePathIter(&iter
, NULL
);
48 ok(iter
!= NULL
, "Expected iterator to be created\n");
49 GdipDeletePathIter(iter
);
50 stat
= GdipCreatePathIter(NULL
, path
);
51 expect(InvalidParameter
, stat
);
52 stat
= GdipDeletePathIter(NULL
);
53 expect(InvalidParameter
, stat
);
56 stat
= GdipCreatePathIter(&iter
, path
);
59 GdipDeletePathIter(iter
);
63 static void test_hascurve(void)
70 GdipCreatePath(FillModeAlternate
, &path
);
71 GdipAddPathRectangle(path
, 5.0, 5.0, 100.0, 50.0);
73 stat
= GdipCreatePathIter(&iter
, path
);
77 BOOL out argument is local in wrapper class method,
78 so it always has not-NULL address */
79 stat
= GdipPathIterHasCurve(NULL
, &hasCurve
);
80 expect(InvalidParameter
, stat
);
83 stat
= GdipPathIterHasCurve(iter
, &hasCurve
);
85 expect(FALSE
, hasCurve
);
87 GdipDeletePathIter(iter
);
89 GdipAddPathEllipse(path
, 0.0, 0.0, 35.0, 70.0);
91 stat
= GdipCreatePathIter(&iter
, path
);
94 stat
= GdipPathIterHasCurve(iter
, &hasCurve
);
96 expect(TRUE
, hasCurve
);
98 GdipDeletePathIter(iter
);
102 static void test_nextmarker(void)
105 GpPathIterator
*iter
;
111 BOOL out argument is local in wrapper class method,
112 so it always has not-NULL address */
113 stat
= GdipPathIterNextMarker(NULL
, &result
, NULL
, NULL
);
114 expect(InvalidParameter
, stat
);
115 stat
= GdipPathIterNextMarker(NULL
, &result
, &start
, NULL
);
116 expect(InvalidParameter
, stat
);
117 stat
= GdipPathIterNextMarker(NULL
, &result
, NULL
, &end
);
118 expect(InvalidParameter
, stat
);
120 GdipCreatePath(FillModeAlternate
, &path
);
121 GdipAddPathRectangle(path
, 5.0, 5.0, 100.0, 50.0);
124 GdipCreatePathIter(&iter
, path
);
125 start
= end
= result
= (INT
)0xdeadbeef;
126 stat
= GdipPathIterNextMarker(iter
, &result
, &start
, &end
);
131 start
= end
= result
= (INT
)0xdeadbeef;
132 stat
= GdipPathIterNextMarker(iter
, &result
, &start
, &end
);
134 /* start/end remain unchanged */
135 expect((INT
)0xdeadbeef, start
);
136 expect((INT
)0xdeadbeef, end
);
138 GdipDeletePathIter(iter
);
141 GdipSetPathMarker(path
);
142 GdipCreatePathIter(&iter
, path
);
143 start
= end
= result
= (INT
)0xdeadbeef;
144 stat
= GdipPathIterNextMarker(iter
, &result
, &start
, &end
);
149 start
= end
= result
= (INT
)0xdeadbeef;
150 stat
= GdipPathIterNextMarker(iter
, &result
, &start
, &end
);
152 expect((INT
)0xdeadbeef, start
);
153 expect((INT
)0xdeadbeef, end
);
155 GdipDeletePathIter(iter
);
158 GdipAddPathLine(path
, 0.0, 0.0, 10.0, 30.0);
159 GdipSetPathMarker(path
);
160 GdipCreatePathIter(&iter
, path
);
161 start
= end
= result
= (INT
)0xdeadbeef;
162 stat
= GdipPathIterNextMarker(iter
, &result
, &start
, &end
);
167 start
= end
= result
= (INT
)0xdeadbeef;
168 stat
= GdipPathIterNextMarker(iter
, &result
, &start
, &end
);
173 start
= end
= result
= (INT
)0xdeadbeef;
174 stat
= GdipPathIterNextMarker(iter
, &result
, &start
, &end
);
176 expect((INT
)0xdeadbeef, start
);
177 expect((INT
)0xdeadbeef, end
);
179 GdipDeletePathIter(iter
);
181 GdipDeletePath(path
);
184 static void test_nextmarkerpath(void)
186 GpPath
*path
, *retpath
;
187 GpPathIterator
*iter
;
191 GdipCreatePath(FillModeAlternate
, &path
);
194 stat
= GdipPathIterNextMarkerPath(NULL
, NULL
, NULL
);
195 expect(InvalidParameter
, stat
);
196 stat
= GdipPathIterNextMarkerPath(NULL
, &result
, NULL
);
197 expect(InvalidParameter
, stat
);
198 stat
= GdipPathIterNextMarkerPath(NULL
, &result
, path
);
199 expect(InvalidParameter
, stat
);
201 GdipAddPathRectangle(path
, 5.0, 5.0, 100.0, 50.0);
204 GdipCreatePath(FillModeAlternate
, &retpath
);
205 GdipCreatePathIter(&iter
, path
);
207 stat
= GdipPathIterNextMarkerPath(iter
, &result
, retpath
);
211 GdipGetPointCount(retpath
, &count
);
214 stat
= GdipPathIterNextMarkerPath(iter
, &result
, retpath
);
218 GdipGetPointCount(retpath
, &count
);
220 GdipDeletePathIter(iter
);
221 GdipDeletePath(retpath
);
224 GdipSetPathMarker(path
);
225 GdipCreatePath(FillModeAlternate
, &retpath
);
226 GdipCreatePathIter(&iter
, path
);
228 stat
= GdipPathIterNextMarkerPath(iter
, &result
, retpath
);
232 GdipGetPointCount(retpath
, &count
);
235 stat
= GdipPathIterNextMarkerPath(iter
, &result
, retpath
);
239 GdipGetPointCount(retpath
, &count
);
241 GdipDeletePathIter(iter
);
242 GdipDeletePath(retpath
);
245 GdipAddPathLine(path
, 0.0, 0.0, 10.0, 30.0);
246 GdipSetPathMarker(path
);
247 GdipCreatePath(FillModeAlternate
, &retpath
);
248 GdipCreatePathIter(&iter
, path
);
250 stat
= GdipPathIterNextMarkerPath(iter
, &result
, retpath
);
254 stat
= GdipPathIterNextMarkerPath(iter
, &result
, retpath
);
258 stat
= GdipPathIterNextMarkerPath(iter
, &result
, retpath
);
261 GdipDeletePathIter(iter
);
262 GdipDeletePath(retpath
);
264 GdipDeletePath(path
);
267 static void test_getsubpathcount(void)
270 GpPathIterator
*iter
;
275 stat
= GdipPathIterGetSubpathCount(NULL
, NULL
);
276 expect(InvalidParameter
, stat
);
277 stat
= GdipPathIterGetSubpathCount(NULL
, &count
);
278 expect(InvalidParameter
, stat
);
280 GdipCreatePath(FillModeAlternate
, &path
);
283 GdipCreatePathIter(&iter
, path
);
284 stat
= GdipPathIterGetSubpathCount(iter
, &count
);
287 GdipDeletePathIter(iter
);
289 GdipAddPathLine(path
, 5.0, 5.0, 100.0, 50.0);
292 GdipCreatePathIter(&iter
, path
);
293 stat
= GdipPathIterGetSubpathCount(iter
, &count
);
296 GdipDeletePathIter(iter
);
298 /* manually start new figure */
299 GdipStartPathFigure(path
);
300 GdipAddPathLine(path
, 50.0, 50.0, 110.0, 40.0);
301 GdipCreatePathIter(&iter
, path
);
302 stat
= GdipPathIterGetSubpathCount(iter
, &count
);
305 GdipDeletePathIter(iter
);
307 GdipDeletePath(path
);
310 static void test_isvalid(void)
313 GpPathIterator
*iter
;
316 INT start
, end
, result
;
318 GdipCreatePath(FillModeAlternate
, &path
);
321 GdipCreatePathIter(&iter
, path
);
322 stat
= GdipPathIterIsValid(NULL
, NULL
);
323 expect(InvalidParameter
, stat
);
324 stat
= GdipPathIterIsValid(iter
, NULL
);
325 expect(InvalidParameter
, stat
);
326 stat
= GdipPathIterIsValid(NULL
, &isvalid
);
327 expect(InvalidParameter
, stat
);
328 GdipDeletePathIter(iter
);
331 GdipCreatePathIter(&iter
, path
);
333 stat
= GdipPathIterIsValid(iter
, &isvalid
);
335 expect(TRUE
, isvalid
);
336 GdipDeletePathIter(iter
);
339 GdipAddPathLine(path
, 50.0, 50.0, 110.0, 40.0);
340 GdipCreatePathIter(&iter
, path
);
341 GdipPathIterNextMarker(iter
, &result
, &start
, &end
);
343 stat
= GdipPathIterIsValid(iter
, &isvalid
);
345 expect(TRUE
, isvalid
);
346 GdipDeletePathIter(iter
);
348 GdipDeletePath(path
);
351 static void test_nextsubpathpath(void)
353 GpPath
*path
, *retpath
;
354 GpPathIterator
*iter
;
359 GdipCreatePath(FillModeAlternate
, &path
);
362 GdipCreatePath(FillModeAlternate
, &retpath
);
363 GdipCreatePathIter(&iter
, path
);
364 stat
= GdipPathIterNextSubpathPath(NULL
, NULL
, NULL
, NULL
);
365 expect(InvalidParameter
, stat
);
366 stat
= GdipPathIterNextSubpathPath(iter
, NULL
, NULL
, NULL
);
367 expect(InvalidParameter
, stat
);
368 stat
= GdipPathIterNextSubpathPath(NULL
, &result
, NULL
, NULL
);
369 expect(InvalidParameter
, stat
);
370 stat
= GdipPathIterNextSubpathPath(iter
, &result
, NULL
, &closed
);
372 stat
= GdipPathIterNextSubpathPath(iter
, NULL
, NULL
, &closed
);
373 expect(InvalidParameter
, stat
);
374 stat
= GdipPathIterNextSubpathPath(iter
, NULL
, retpath
, NULL
);
375 expect(InvalidParameter
, stat
);
376 stat
= GdipPathIterNextSubpathPath(iter
, &result
, retpath
, NULL
);
377 expect(InvalidParameter
, stat
);
378 GdipDeletePathIter(iter
);
379 GdipDeletePath(retpath
);
382 GdipCreatePath(FillModeAlternate
, &retpath
);
383 GdipCreatePathIter(&iter
, path
);
386 stat
= GdipPathIterNextSubpathPath(iter
, &result
, retpath
, &closed
);
389 expect(TRUE
, closed
);
391 GdipGetPointCount(retpath
, &count
);
393 GdipDeletePathIter(iter
);
394 GdipDeletePath(retpath
);
397 GdipAddPathLine(path
, 5.0, 5.0, 100.0, 50.0);
399 GdipCreatePath(FillModeAlternate
, &retpath
);
400 GdipCreatePathIter(&iter
, path
);
403 stat
= GdipPathIterNextSubpathPath(iter
, &result
, retpath
, &closed
);
406 expect(FALSE
, closed
);
408 GdipGetPointCount(retpath
, &count
);
410 /* subsequent call */
413 stat
= GdipPathIterNextSubpathPath(iter
, &result
, retpath
, &closed
);
416 expect(TRUE
, closed
);
418 GdipGetPointCount(retpath
, &count
);
420 GdipDeletePathIter(iter
);
422 /* closed figure, check does it extend retpath or reset it */
423 GdipAddPathLine(retpath
, 50.0, 55.0, 200.0, 150.0);
425 GdipClosePathFigure(path
);
426 GdipAddPathLine(path
, 50.0, 55.0, 200.0, 150.0);
427 GdipClosePathFigure(path
);
429 GdipCreatePathIter(&iter
, path
);
432 stat
= GdipPathIterNextSubpathPath(iter
, &result
, retpath
, &closed
);
435 expect(TRUE
, closed
);
437 GdipGetPointCount(retpath
, &count
);
439 /* subsequent call */
442 stat
= GdipPathIterNextSubpathPath(iter
, &result
, retpath
, &closed
);
445 expect(TRUE
, closed
);
447 GdipGetPointCount(retpath
, &count
);
451 stat
= GdipPathIterNextSubpathPath(iter
, &result
, retpath
, &closed
);
454 expect(TRUE
, closed
);
456 GdipGetPointCount(retpath
, &count
);
458 GdipDeletePathIter(iter
);
460 GdipDeletePath(retpath
);
461 GdipDeletePath(path
);
464 static void test_nextsubpath(void)
467 GpPathIterator
*iter
;
469 INT start
, end
, result
;
473 GdipCreatePath(FillModeAlternate
, &path
);
474 GdipCreatePathIter(&iter
, path
);
478 stat
= GdipPathIterNextSubpath(iter
, &result
, &start
, &end
, &closed
);
481 expect(TRUE
, closed
);
483 GdipDeletePathIter(iter
);
484 GdipDeletePath(path
);
487 static void test_nextpathtype(void)
490 GpPathIterator
*iter
;
492 INT start
, end
, result
;
495 GdipCreatePath(FillModeAlternate
, &path
);
496 GdipCreatePathIter(&iter
, path
);
499 stat
= GdipPathIterNextPathType(NULL
, NULL
, NULL
, NULL
, NULL
);
500 expect(InvalidParameter
, stat
);
501 stat
= GdipPathIterNextPathType(iter
, NULL
, NULL
, NULL
, NULL
);
502 expect(InvalidParameter
, stat
);
503 stat
= GdipPathIterNextPathType(iter
, &result
, NULL
, NULL
, NULL
);
504 expect(InvalidParameter
, stat
);
505 stat
= GdipPathIterNextPathType(iter
, NULL
, &type
, NULL
, NULL
);
506 expect(InvalidParameter
, stat
);
507 stat
= GdipPathIterNextPathType(iter
, NULL
, NULL
, &start
, &end
);
508 expect(InvalidParameter
, stat
);
509 stat
= GdipPathIterNextPathType(iter
, NULL
, &type
, &start
, &end
);
510 expect(InvalidParameter
, stat
);
511 stat
= GdipPathIterNextPathType(iter
, &result
, &type
, NULL
, NULL
);
512 expect(InvalidParameter
, stat
);
515 start
= end
= result
= (INT
)0xdeadbeef;
516 stat
= GdipPathIterNextPathType(iter
, &result
, &type
, &start
, &end
);
517 todo_wine
expect(Ok
, stat
);
518 expect((INT
)0xdeadbeef, start
);
519 expect((INT
)0xdeadbeef, end
);
520 todo_wine
expect(0, result
);
521 GdipDeletePathIter(iter
);
524 GdipAddPathLine(path
, 0.0, 0.0, 10.0, 30.0);
525 GdipCreatePathIter(&iter
, path
);
526 start
= end
= result
= (INT
)0xdeadbeef;
527 type
= 255; /* out of range */
528 stat
= GdipPathIterNextPathType(iter
, &result
, &type
, &start
, &end
);
529 todo_wine
expect(Ok
, stat
);
530 expect((INT
)0xdeadbeef, start
);
531 expect((INT
)0xdeadbeef, end
);
533 todo_wine
expect(0, result
);
534 GdipDeletePathIter(iter
);
536 GdipAddPathEllipse(path
, 0.0, 0.0, 35.0, 70.0);
537 GdipCreatePathIter(&iter
, path
);
538 start
= end
= result
= (INT
)0xdeadbeef;
539 type
= 255; /* out of range */
540 stat
= GdipPathIterNextPathType(iter
, &result
, &type
, &start
, &end
);
541 todo_wine
expect(Ok
, stat
);
542 expect((INT
)0xdeadbeef, start
);
543 expect((INT
)0xdeadbeef, end
);
545 todo_wine
expect(0, result
);
546 GdipDeletePathIter(iter
);
549 GdipClosePathFigure(path
);
550 GdipCreatePathIter(&iter
, path
);
551 start
= end
= result
= (INT
)0xdeadbeef;
552 type
= 255; /* out of range */
553 stat
= GdipPathIterNextPathType(iter
, &result
, &type
, &start
, &end
);
554 todo_wine
expect(Ok
, stat
);
555 expect((INT
)0xdeadbeef, start
);
556 expect((INT
)0xdeadbeef, end
);
558 todo_wine
expect(0, result
);
559 GdipDeletePathIter(iter
);
561 GdipDeletePath(path
);
564 START_TEST(pathiterator
)
566 struct GdiplusStartupInput gdiplusStartupInput
;
567 ULONG_PTR gdiplusToken
;
569 gdiplusStartupInput
.GdiplusVersion
= 1;
570 gdiplusStartupInput
.DebugEventCallback
= NULL
;
571 gdiplusStartupInput
.SuppressBackgroundThread
= 0;
572 gdiplusStartupInput
.SuppressExternalCodecs
= 0;
574 GdiplusStartup(&gdiplusToken
, &gdiplusStartupInput
, NULL
);
576 test_constructor_destructor();
579 test_nextmarkerpath();
580 test_getsubpathcount();
582 test_nextsubpathpath();
586 GdiplusShutdown(gdiplusToken
);