Adding new SkPathMeasure tests, defined out for now as they fail.
authorschenney@chromium.org <schenney@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 12 Jan 2012 20:04:06 +0000 (20:04 +0000)
committerschenney@chromium.org <schenney@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 12 Jan 2012 20:04:06 +0000 (20:04 +0000)
Review URL: http://codereview.appspot.com/5529078

git-svn-id: http://skia.googlecode.com/svn/trunk@3029 2bbb7eff-a529-9590-31e7-b0007b416f81

tests/PathMeasureTest.cpp

index d454e37..6cc64fe 100644 (file)
@@ -43,6 +43,93 @@ static void TestPathMeasure(skiatest::Reporter* reporter) {
                  d, p.fX, p.fY, v.fX, v.fY);
 #endif
     }
+
+#if 0
+    // Test the behavior following a close not followed by a move.
+    path.reset();
+    path.lineTo(SK_Scalar1, 0);
+    path.lineTo(SK_Scalar1, SK_Scalar1);
+    path.lineTo(0, SK_Scalar1);
+    path.close();
+    path.lineTo(-SK_Scalar1, 0);
+    meas.setPath(&path, false);
+    length = meas.getLength();
+    REPORTER_ASSERT(reporter, length == SK_Scalar1 * 4);
+    meas.nextContour();
+    length = meas.getLength();
+    REPORTER_ASSERT(reporter, length == SK_Scalar1);
+    SkPoint position;
+    SkVector tangent;
+    REPORTER_ASSERT(reporter, meas.getPosTan(SK_ScalarHalf, &position, &tangent));
+    REPORTER_ASSERT(reporter,
+        SkScalarNearlyEqual(position.fX, -SK_ScalarHalf, SK_Scalar1 * 0.0001));
+    REPORTER_ASSERT(reporter, position.fY == 0);
+    REPORTER_ASSERT(reporter, tangent.fX == -SK_Scalar1);
+    REPORTER_ASSERT(reporter, tangent.fY == 0);
+
+    // Test degenerate paths
+    path.reset();
+    path.moveTo(0, 0);
+    path.lineTo(0, 0);
+    path.lineTo(SK_Scalar1, 0);
+    path.quadTo(SK_Scalar1, 0, SK_Scalar1, 0);
+    path.quadTo(SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1 * 2);
+    path.cubicTo(SK_Scalar1, SK_Scalar1 * 2,
+                 SK_Scalar1, SK_Scalar1 * 2,
+                 SK_Scalar1, SK_Scalar1 * 2);
+    path.cubicTo(SK_Scalar1*2, SK_Scalar1 * 2,
+                 SK_Scalar1*3, SK_Scalar1 * 2,
+                 SK_Scalar1*4, SK_Scalar1 * 2);
+    meas.setPath(&path, false);
+    length = meas.getLength();
+    REPORTER_ASSERT(reporter, length == SK_Scalar1 * 6);
+    REPORTER_ASSERT(reporter, meas.getPosTan(SK_ScalarHalf, &position, &tangent));
+    REPORTER_ASSERT(reporter,
+        SkScalarNearlyEqual(position.fX, SK_ScalarHalf, SK_Scalar1 * 0.0001));
+    REPORTER_ASSERT(reporter, position.fY == 0);
+    REPORTER_ASSERT(reporter, tangent.fX == SK_Scalar1);
+    REPORTER_ASSERT(reporter, tangent.fY == 0);
+    REPORTER_ASSERT(reporter, meas.getPosTan(SK_Scalar1 * 2.5f, &position, &tangent));
+    REPORTER_ASSERT(reporter,
+        SkScalarNearlyEqual(position.fX, SK_Scalar1, SK_Scalar1 * 0.0001));
+    REPORTER_ASSERT(reporter,
+        SkScalarNearlyEqual(position.fY, SK_Scalar1 * 1.5f));
+    REPORTER_ASSERT(reporter, tangent.fX == 0);
+    REPORTER_ASSERT(reporter, tangent.fY == SK_Scalar1);
+    REPORTER_ASSERT(reporter, meas.getPosTan(SK_Scalar1 * 4.5f, &position, &tangent));
+    REPORTER_ASSERT(reporter,
+        SkScalarNearlyEqual(position.fX, SK_Scalar1 * 2.5f, SK_Scalar1 * 0.0001));
+    REPORTER_ASSERT(reporter,
+        SkScalarNearlyEqual(position.fY, SK_Scalar1 * 2.0f, SK_Scalar1 * 0.0001));
+    REPORTER_ASSERT(reporter, tangent.fX == SK_Scalar1);
+    REPORTER_ASSERT(reporter, tangent.fY == 0);
+
+    path.reset();
+    path.moveTo(0, 0);
+    path.lineTo(SK_Scalar1, 0);
+    path.moveTo(SK_Scalar1, SK_Scalar1);
+    path.moveTo(SK_Scalar1 * 2, SK_Scalar1 * 2);
+    path.lineTo(SK_Scalar1, SK_Scalar1 * 2);
+    meas.setPath(&path, false);
+    length = meas.getLength();
+    REPORTER_ASSERT(reporter, length == SK_Scalar1);
+    REPORTER_ASSERT(reporter, meas.getPosTan(SK_ScalarHalf, &position, &tangent));
+    REPORTER_ASSERT(reporter,
+        SkScalarNearlyEqual(position.fX, SK_ScalarHalf, SK_Scalar1 * 0.0001));
+    REPORTER_ASSERT(reporter, position.fY == 0);
+    REPORTER_ASSERT(reporter, tangent.fX == SK_Scalar1);
+    REPORTER_ASSERT(reporter, tangent.fY == 0);
+    meas.nextContour();
+    length = meas.getLength();
+    REPORTER_ASSERT(reporter, length == SK_Scalar1);
+    REPORTER_ASSERT(reporter, meas.getPosTan(SK_ScalarHalf, &position, &tangent));
+    REPORTER_ASSERT(reporter,
+        SkScalarNearlyEqual(position.fX, SK_Scalar1 * 1.5f, SK_Scalar1 * 0.0001));
+    REPORTER_ASSERT(reporter,
+        SkScalarNearlyEqual(position.fY, SK_Scalar1 * 2.0f, SK_Scalar1 * 0.0001));
+    REPORTER_ASSERT(reporter, tangent.fX == -SK_Scalar1);
+    REPORTER_ASSERT(reporter, tangent.fY == 0);
+#endif
 }
 
 #include "TestClassDef.h"