blob: b4b631769bfb6ef2dff3639e832b05de6f368f06 [file] [log] [blame]
reed@android.com3abec1d2009-03-02 05:36:20 +00001#include "Test.h"
2#include "SkPath.h"
reed@android.com60bc6d52010-02-11 11:09:39 +00003#include "SkSize.h"
reed@android.com3abec1d2009-03-02 05:36:20 +00004
reed@android.com6b82d1a2009-06-03 02:35:01 +00005static void check_convex_bounds(skiatest::Reporter* reporter, const SkPath& p,
6 const SkRect& bounds) {
7 REPORTER_ASSERT(reporter, p.isConvex());
8 REPORTER_ASSERT(reporter, p.getBounds() == bounds);
reed@google.com62047cf2011-02-07 19:39:09 +00009
reed@android.com6b82d1a2009-06-03 02:35:01 +000010 SkPath p2(p);
11 REPORTER_ASSERT(reporter, p2.isConvex());
12 REPORTER_ASSERT(reporter, p2.getBounds() == bounds);
13
14 SkPath other;
15 other.swap(p2);
16 REPORTER_ASSERT(reporter, other.isConvex());
17 REPORTER_ASSERT(reporter, other.getBounds() == bounds);
18}
19
reed@android.com3abec1d2009-03-02 05:36:20 +000020static void TestPath(skiatest::Reporter* reporter) {
reed@android.com60bc6d52010-02-11 11:09:39 +000021 {
22 SkSize size;
23 size.fWidth = 3.4f;
24 size.width();
25 size = SkSize::Make(3,4);
26 SkISize isize = SkISize::Make(3,4);
27 }
28
29 SkTSize<SkScalar>::Make(3,4);
30
reed@android.com3abec1d2009-03-02 05:36:20 +000031 SkPath p, p2;
32 SkRect bounds, bounds2;
reed@android.com80e39a72009-04-02 16:59:40 +000033
reed@android.com3abec1d2009-03-02 05:36:20 +000034 REPORTER_ASSERT(reporter, p.isEmpty());
reed@android.com6b82d1a2009-06-03 02:35:01 +000035 REPORTER_ASSERT(reporter, !p.isConvex());
reed@android.com3abec1d2009-03-02 05:36:20 +000036 REPORTER_ASSERT(reporter, p.getFillType() == SkPath::kWinding_FillType);
37 REPORTER_ASSERT(reporter, !p.isInverseFillType());
38 REPORTER_ASSERT(reporter, p == p2);
39 REPORTER_ASSERT(reporter, !(p != p2));
40
reed@android.comd252db02009-04-01 18:31:44 +000041 REPORTER_ASSERT(reporter, p.getBounds().isEmpty());
reed@android.com80e39a72009-04-02 16:59:40 +000042
reed@android.com3abec1d2009-03-02 05:36:20 +000043 bounds.set(0, 0, SK_Scalar1, SK_Scalar1);
reed@android.com6b82d1a2009-06-03 02:35:01 +000044
45 p.setIsConvex(false);
46 p.addRoundRect(bounds, SK_Scalar1, SK_Scalar1);
47 check_convex_bounds(reporter, p, bounds);
reed@google.com62047cf2011-02-07 19:39:09 +000048
reed@android.com6b82d1a2009-06-03 02:35:01 +000049 p.reset();
50 p.setIsConvex(false);
51 p.addOval(bounds);
52 check_convex_bounds(reporter, p, bounds);
reed@google.com62047cf2011-02-07 19:39:09 +000053
reed@android.com6b82d1a2009-06-03 02:35:01 +000054 p.reset();
55 p.setIsConvex(false);
reed@android.com3abec1d2009-03-02 05:36:20 +000056 p.addRect(bounds);
reed@android.com6b82d1a2009-06-03 02:35:01 +000057 check_convex_bounds(reporter, p, bounds);
reed@android.com3abec1d2009-03-02 05:36:20 +000058
59 REPORTER_ASSERT(reporter, p != p2);
60 REPORTER_ASSERT(reporter, !(p == p2));
61
62 // does getPoints return the right result
63 REPORTER_ASSERT(reporter, p.getPoints(NULL, 5) == 4);
64 SkPoint pts[4];
65 int count = p.getPoints(pts, 4);
66 REPORTER_ASSERT(reporter, count == 4);
67 bounds2.set(pts, 4);
68 REPORTER_ASSERT(reporter, bounds == bounds2);
reed@android.com80e39a72009-04-02 16:59:40 +000069
reed@android.com3abec1d2009-03-02 05:36:20 +000070 bounds.offset(SK_Scalar1*3, SK_Scalar1*4);
71 p.offset(SK_Scalar1*3, SK_Scalar1*4);
reed@android.comd252db02009-04-01 18:31:44 +000072 REPORTER_ASSERT(reporter, bounds == p.getBounds());
reed@android.com3abec1d2009-03-02 05:36:20 +000073
74#if 0 // isRect needs to be implemented
75 REPORTER_ASSERT(reporter, p.isRect(NULL));
76 bounds.setEmpty();
77 REPORTER_ASSERT(reporter, p.isRect(&bounds2));
78 REPORTER_ASSERT(reporter, bounds == bounds2);
reed@android.com80e39a72009-04-02 16:59:40 +000079
reed@android.com3abec1d2009-03-02 05:36:20 +000080 // now force p to not be a rect
81 bounds.set(0, 0, SK_Scalar1/2, SK_Scalar1/2);
82 p.addRect(bounds);
83 REPORTER_ASSERT(reporter, !p.isRect(NULL));
84#endif
85
86 SkPoint pt;
87
88 p.moveTo(SK_Scalar1, 0);
89 p.getLastPt(&pt);
90 REPORTER_ASSERT(reporter, pt.fX == SK_Scalar1);
reed@google.com62047cf2011-02-07 19:39:09 +000091
92 // check that reset and rewind clear the convex hint back to false
93 p.setIsConvex(false);
94 REPORTER_ASSERT(reporter, !p.isConvex());
95 p.setIsConvex(true);
96 REPORTER_ASSERT(reporter, p.isConvex());
97 p.reset();
98 REPORTER_ASSERT(reporter, !p.isConvex());
99 p.setIsConvex(true);
100 REPORTER_ASSERT(reporter, p.isConvex());
101 p.rewind();
102 REPORTER_ASSERT(reporter, !p.isConvex());
reed@android.com3abec1d2009-03-02 05:36:20 +0000103}
104
105#include "TestClassDef.h"
106DEFINE_TESTCLASS("Path", PathTestClass, TestPath)