blob: 89fe93b963272734db69ad38d0e94ae8862bfeb6 [file] [log] [blame]
reed@android.com3abec1d2009-03-02 05:36:20 +00001#include "Test.h"
2#include "SkPath.h"
3
reed@android.com6b82d1a2009-06-03 02:35:01 +00004static void check_convex_bounds(skiatest::Reporter* reporter, const SkPath& p,
5 const SkRect& bounds) {
6 REPORTER_ASSERT(reporter, p.isConvex());
7 REPORTER_ASSERT(reporter, p.getBounds() == bounds);
8
9 SkPath p2(p);
10 REPORTER_ASSERT(reporter, p2.isConvex());
11 REPORTER_ASSERT(reporter, p2.getBounds() == bounds);
12
13 SkPath other;
14 other.swap(p2);
15 REPORTER_ASSERT(reporter, other.isConvex());
16 REPORTER_ASSERT(reporter, other.getBounds() == bounds);
17}
18
reed@android.com3abec1d2009-03-02 05:36:20 +000019static void TestPath(skiatest::Reporter* reporter) {
20 SkPath p, p2;
21 SkRect bounds, bounds2;
reed@android.com80e39a72009-04-02 16:59:40 +000022
reed@android.com3abec1d2009-03-02 05:36:20 +000023 REPORTER_ASSERT(reporter, p.isEmpty());
reed@android.com6b82d1a2009-06-03 02:35:01 +000024 REPORTER_ASSERT(reporter, !p.isConvex());
reed@android.com3abec1d2009-03-02 05:36:20 +000025 REPORTER_ASSERT(reporter, p.getFillType() == SkPath::kWinding_FillType);
26 REPORTER_ASSERT(reporter, !p.isInverseFillType());
27 REPORTER_ASSERT(reporter, p == p2);
28 REPORTER_ASSERT(reporter, !(p != p2));
29
reed@android.comd252db02009-04-01 18:31:44 +000030 REPORTER_ASSERT(reporter, p.getBounds().isEmpty());
reed@android.com80e39a72009-04-02 16:59:40 +000031
reed@android.com3abec1d2009-03-02 05:36:20 +000032 bounds.set(0, 0, SK_Scalar1, SK_Scalar1);
reed@android.com6b82d1a2009-06-03 02:35:01 +000033
34 p.setIsConvex(false);
35 p.addRoundRect(bounds, SK_Scalar1, SK_Scalar1);
36 check_convex_bounds(reporter, p, bounds);
37
38 p.reset();
39 p.setIsConvex(false);
40 p.addOval(bounds);
41 check_convex_bounds(reporter, p, bounds);
42
43 p.reset();
44 p.setIsConvex(false);
reed@android.com3abec1d2009-03-02 05:36:20 +000045 p.addRect(bounds);
reed@android.com6b82d1a2009-06-03 02:35:01 +000046 check_convex_bounds(reporter, p, bounds);
reed@android.com3abec1d2009-03-02 05:36:20 +000047
48 REPORTER_ASSERT(reporter, p != p2);
49 REPORTER_ASSERT(reporter, !(p == p2));
50
51 // does getPoints return the right result
52 REPORTER_ASSERT(reporter, p.getPoints(NULL, 5) == 4);
53 SkPoint pts[4];
54 int count = p.getPoints(pts, 4);
55 REPORTER_ASSERT(reporter, count == 4);
56 bounds2.set(pts, 4);
57 REPORTER_ASSERT(reporter, bounds == bounds2);
reed@android.com80e39a72009-04-02 16:59:40 +000058
reed@android.com3abec1d2009-03-02 05:36:20 +000059 bounds.offset(SK_Scalar1*3, SK_Scalar1*4);
60 p.offset(SK_Scalar1*3, SK_Scalar1*4);
reed@android.comd252db02009-04-01 18:31:44 +000061 REPORTER_ASSERT(reporter, bounds == p.getBounds());
reed@android.com3abec1d2009-03-02 05:36:20 +000062
63#if 0 // isRect needs to be implemented
64 REPORTER_ASSERT(reporter, p.isRect(NULL));
65 bounds.setEmpty();
66 REPORTER_ASSERT(reporter, p.isRect(&bounds2));
67 REPORTER_ASSERT(reporter, bounds == bounds2);
reed@android.com80e39a72009-04-02 16:59:40 +000068
reed@android.com3abec1d2009-03-02 05:36:20 +000069 // now force p to not be a rect
70 bounds.set(0, 0, SK_Scalar1/2, SK_Scalar1/2);
71 p.addRect(bounds);
72 REPORTER_ASSERT(reporter, !p.isRect(NULL));
73#endif
74
75 SkPoint pt;
76
77 p.moveTo(SK_Scalar1, 0);
78 p.getLastPt(&pt);
79 REPORTER_ASSERT(reporter, pt.fX == SK_Scalar1);
80}
81
82#include "TestClassDef.h"
83DEFINE_TESTCLASS("Path", PathTestClass, TestPath)