diff --git a/tests/PathMeasureTest.cpp b/tests/PathMeasureTest.cpp index d454e37c2a..6cc64fe394 100644 --- a/tests/PathMeasureTest.cpp +++ b/tests/PathMeasureTest.cpp @@ -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"