add tests for flatten, unflatten and transform
git-svn-id: http://skia.googlecode.com/svn/trunk@2303 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp
index 45e7d15..e2ecdcb 100644
--- a/tests/PathTest.cpp
+++ b/tests/PathTest.cpp
@@ -9,7 +9,9 @@
#include "SkPaint.h"
#include "SkPath.h"
#include "SkParse.h"
+#include "SkReader32.h"
#include "SkSize.h"
+#include "SkWriter32.h"
static void stroke_cubic(const SkPoint pts[4]) {
SkPath path;
@@ -438,6 +440,63 @@
REPORTER_ASSERT(reporter, fail ^ path1.isRect(0));
}
+static void test_flattening(skiatest::Reporter* reporter) {
+ SkPath p;
+
+ static const SkPoint pts[] = {
+ { 0, 0 },
+ { SkIntToScalar(10), SkIntToScalar(10) },
+ { SkIntToScalar(20), SkIntToScalar(10) }, { SkIntToScalar(20), 0 },
+ { 0, 0 }, { 0, SkIntToScalar(10) }, { SkIntToScalar(1), SkIntToScalar(10) }
+ };
+ p.moveTo(pts[0]);
+ p.lineTo(pts[1]);
+ p.quadTo(pts[2], pts[3]);
+ p.cubicTo(pts[4], pts[5], pts[6]);
+
+ SkWriter32 writer(100);
+ p.flatten(writer);
+ size_t size = writer.size();
+ SkAutoMalloc storage(size);
+ writer.flatten(storage.get());
+ SkReader32 reader(storage.get(), size);
+
+ SkPath p1;
+ REPORTER_ASSERT(reporter, p1 != p);
+ p1.unflatten(reader);
+ REPORTER_ASSERT(reporter, p1 == p);
+}
+
+static void test_transform(skiatest::Reporter* reporter) {
+ SkPath p, p1;
+
+ static const SkPoint pts[] = {
+ { 0, 0 },
+ { SkIntToScalar(10), SkIntToScalar(10) },
+ { SkIntToScalar(20), SkIntToScalar(10) }, { SkIntToScalar(20), 0 },
+ { 0, 0 }, { 0, SkIntToScalar(10) }, { SkIntToScalar(1), SkIntToScalar(10) }
+ };
+ p.moveTo(pts[0]);
+ p.lineTo(pts[1]);
+ p.quadTo(pts[2], pts[3]);
+ p.cubicTo(pts[4], pts[5], pts[6]);
+
+ SkMatrix matrix;
+ matrix.reset();
+ p.transform(matrix, &p1);
+ REPORTER_ASSERT(reporter, p == p1);
+
+ matrix.setScale(SK_Scalar1 * 2, SK_Scalar1 * 3);
+ p.transform(matrix, &p1);
+ SkPoint pts1[7];
+ int count = p1.getPoints(pts1, 7);
+ REPORTER_ASSERT(reporter, 7 == count);
+ for (int i = 0; i < count; ++i) {
+ SkPoint newPt = SkPoint::Make(pts[i].fX * 2, pts[i].fY * 3);
+ REPORTER_ASSERT(reporter, newPt == pts1[i]);
+ }
+}
+
#define kCurveSegmentMask (SkPath::kQuad_SegmentMask | SkPath::kCubic_SegmentMask)
void TestPath(skiatest::Reporter* reporter);
@@ -530,6 +589,9 @@
p.moveTo(0, 0);
p.cubicTo(100, 100, 200, 200, 300, 300);
REPORTER_ASSERT(reporter, SkPath::kCubic_SegmentMask == p.getSegmentMasks());
+
+ test_flattening(reporter);
+ test_transform(reporter);
}
#include "TestClassDef.h"