Module: wine Branch: master Commit: 119e9af74a47a7e0a7565f1d379c6fb1fb7649bf URL: http://source.winehq.org/git/wine.git/?a=commit;h=119e9af74a47a7e0a7565f1d37...
Author: Andrew Eikum andrew@brightnightgames.com Date: Sat Jun 6 12:02:29 2009 -0500
gdiplus: Test cases and parameter checks for GdipDrawCurve.
---
dlls/gdiplus/graphics.c | 6 ++++ dlls/gdiplus/tests/graphics.c | 62 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 0 deletions(-)
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 2698159..c7fa0be 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -1459,7 +1459,13 @@ GpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics *graphics, GpPen *pen, if(graphics->busy) return ObjectBusy;
+ if(count < 2) + return InvalidParameter; + pt = GdipAlloc(len_pt * sizeof(GpPointF)); + if(!pt) + return OutOfMemory; + tension = tension * TENSION_CONST;
calc_curve_bezier_endp(points[0].X, points[0].Y, points[1].X, points[1].Y, diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c index 61143c6..668d261 100644 --- a/dlls/gdiplus/tests/graphics.c +++ b/dlls/gdiplus/tests/graphics.c @@ -367,6 +367,67 @@ static void test_GdipDrawBezierI(void) ReleaseDC(0, hdc); }
+static void test_GdipDrawCurve(void) +{ + GpStatus status; + GpGraphics *graphics = NULL; + GpPen *pen = NULL; + HDC hdc = GetDC(0); + GpPointF points[3]; + + points[0].X = 0; + points[0].Y = 0; + + points[1].X = 40; + points[1].Y = 20; + + points[2].X = 10; + points[2].Y = 40; + + /* make a graphics object and pen object */ + ok(hdc != NULL, "Expected HDC to be initialized\n"); + + status = GdipCreateFromHDC(hdc, &graphics); + expect(Ok, status); + ok(graphics != NULL, "Expected graphics to be initialized\n"); + + status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen); + expect(Ok, status); + ok(pen != NULL, "Expected pen to be initialized\n"); + + /* InvalidParameter cases: null graphics, null pen */ + status = GdipDrawCurve(NULL, NULL, points, 3); + expect(InvalidParameter, status); + + status = GdipDrawCurve(graphics, NULL, points, 3); + expect(InvalidParameter, status); + + status = GdipDrawCurve(NULL, pen, points, 3); + expect(InvalidParameter, status); + + /* InvalidParameter cases: invalid count */ + status = GdipDrawCurve(graphics, pen, points, -1); + expect(InvalidParameter, status); + + status = GdipDrawCurve(graphics, pen, points, 0); + expect(InvalidParameter, status); + + status = GdipDrawCurve(graphics, pen, points, 1); + expect(InvalidParameter, status); + + /* Valid test cases */ + status = GdipDrawCurve(graphics, pen, points, 2); + expect(Ok, status); + + status = GdipDrawCurve(graphics, pen, points, 3); + expect(Ok, status); + + GdipDeletePen(pen); + GdipDeleteGraphics(graphics); + + ReleaseDC(0, hdc); +} + static void test_GdipDrawLineI(void) { GpStatus status; @@ -1095,6 +1156,7 @@ START_TEST(graphics) test_GdipDrawBezierI(); test_GdipDrawArc(); test_GdipDrawArcI(); + test_GdipDrawCurve(); test_GdipDrawLineI(); test_GdipDrawLinesI(); test_GdipDrawString();