Index: tests/PathTest.cpp |
diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp |
index e872b0c839699f307c70f2e3ace1b3c3256da35a..3ae13d1ec5a4642075b91d77a1f752f6d1b4533f 100644 |
--- a/tests/PathTest.cpp |
+++ b/tests/PathTest.cpp |
@@ -3060,6 +3060,68 @@ static void test_addPath(skiatest::Reporter* reporter) { |
REPORTER_ASSERT(reporter, p.getBounds() == reverseExpected); |
} |
+static void test_addPathMode(skiatest::Reporter* reporter, bool explicitMoveTo, bool extend) { |
+ SkPath p, q; |
+ if (explicitMoveTo) { |
+ p.moveTo(1, 1); |
+ } |
+ p.lineTo(1, 2); |
+ if (explicitMoveTo) { |
+ q.moveTo(2, 1); |
+ } |
+ q.lineTo(2, 2); |
+ p.addPath(q, extend ? SkPath::kExtend_AddPathMode : SkPath::kAppend_AddPathMode); |
+ uint8_t verbs[4]; |
+ int verbcount = p.getVerbs(verbs, 4); |
+ REPORTER_ASSERT(reporter, verbcount == 4); |
+ REPORTER_ASSERT(reporter, verbs[0] == SkPath::kMove_Verb); |
+ REPORTER_ASSERT(reporter, verbs[1] == SkPath::kLine_Verb); |
+ REPORTER_ASSERT(reporter, verbs[2] == (extend ? SkPath::kLine_Verb : SkPath::kMove_Verb)); |
+ REPORTER_ASSERT(reporter, verbs[3] == SkPath::kLine_Verb); |
+} |
+ |
+static void test_extendClosedPath(skiatest::Reporter* reporter) { |
+ SkPath p, q; |
+ p.moveTo(1, 1); |
+ p.lineTo(1, 2); |
+ p.lineTo(2, 2); |
+ p.close(); |
+ q.moveTo(2, 1); |
+ q.lineTo(2, 3); |
+ p.addPath(q, SkPath::kExtend_AddPathMode); |
+ uint8_t verbs[7]; |
+ int verbcount = p.getVerbs(verbs, 7); |
+ REPORTER_ASSERT(reporter, verbcount == 7); |
+ REPORTER_ASSERT(reporter, verbs[0] == SkPath::kMove_Verb); |
+ REPORTER_ASSERT(reporter, verbs[1] == SkPath::kLine_Verb); |
+ REPORTER_ASSERT(reporter, verbs[2] == SkPath::kLine_Verb); |
+ REPORTER_ASSERT(reporter, verbs[3] == SkPath::kClose_Verb); |
+ REPORTER_ASSERT(reporter, verbs[4] == SkPath::kMove_Verb); |
+ REPORTER_ASSERT(reporter, verbs[5] == SkPath::kLine_Verb); |
+ REPORTER_ASSERT(reporter, verbs[6] == SkPath::kLine_Verb); |
+ |
+ SkPoint pt; |
+ REPORTER_ASSERT(reporter, p.getLastPt(&pt)); |
+ REPORTER_ASSERT(reporter, pt == SkPoint::Make(2, 3)); |
+ REPORTER_ASSERT(reporter, p.getPoint(3) == SkPoint::Make(1, 1)); |
+} |
+ |
+static void test_addEmptyPath(skiatest::Reporter* reporter, SkPath::AddPathMode mode) { |
+ SkPath p, q, r; |
+ // case 1: dst is empty |
+ p.moveTo(2, 1); |
+ p.lineTo(2, 3); |
+ q.addPath(p, mode); |
+ REPORTER_ASSERT(reporter, q == p); |
+ // case 2: src is empty |
+ p.addPath(r, mode); |
+ REPORTER_ASSERT(reporter, q == p); |
+ // case 3: src and dst are empty |
+ q.reset(); |
+ q.addPath(r, mode); |
+ REPORTER_ASSERT(reporter, q.isEmpty()); |
+} |
+ |
static void test_conicTo_special_case(skiatest::Reporter* reporter) { |
SkPath p; |
p.conicTo(1, 2, 3, 4, -1); |
@@ -3377,6 +3439,13 @@ DEF_TEST(Paths, reporter) { |
test_arc(reporter); |
test_arcTo(reporter); |
test_addPath(reporter); |
+ test_addPathMode(reporter, false, false); |
+ test_addPathMode(reporter, true, false); |
+ test_addPathMode(reporter, false, true); |
+ test_addPathMode(reporter, true, true); |
+ test_extendClosedPath(reporter); |
+ test_addEmptyPath(reporter, SkPath::kExtend_AddPathMode); |
+ test_addEmptyPath(reporter, SkPath::kAppend_AddPathMode); |
test_conicTo_special_case(reporter); |
test_get_point(reporter); |
test_contains(reporter); |