blob: 9f26d01841a2a5ee4eda2fd4a6c88de33cc9d1ca [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);
9
10 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);
48
49 p.reset();
50 p.setIsConvex(false);
51 p.addOval(bounds);
52 check_convex_bounds(reporter, p, bounds);
53
54 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);
91}
92
93#include "TestClassDef.h"
94DEFINE_TESTCLASS("Path", PathTestClass, TestPath)