|
3 | 3 | // found in the LICENSE file.
|
4 | 4 |
|
5 | 5 | #include "impeller/geometry/geometry_unittests.h"
|
| 6 | + |
6 | 7 | #include <limits>
|
| 8 | + |
7 | 9 | #include "flutter/testing/testing.h"
|
8 | 10 | #include "impeller/geometry/path.h"
|
9 | 11 | #include "impeller/geometry/path_builder.h"
|
@@ -982,11 +984,49 @@ TEST(GeometryTest, PolylineGetContourPointBoundsReturnsCorrectRanges) {
|
982 | 984 | ASSERT_EQ(b2, 6u);
|
983 | 985 | }
|
984 | 986 |
|
985 |
| -TEST(GeometryTest, PolylineGetContourOutOfBoundsAborts) { |
| 987 | +TEST(GeometryTest, PathAddRectPolylineHasCorrectContourData) { |
| 988 | + Path::Polyline polyline = PathBuilder{} |
| 989 | + .AddRect(Rect::MakeLTRB(50, 60, 70, 80)) |
| 990 | + .TakePath() |
| 991 | + .CreatePolyline(); |
| 992 | + ASSERT_EQ(polyline.contours.size(), 1u); |
| 993 | + ASSERT_TRUE(polyline.contours[0].is_closed); |
| 994 | + ASSERT_EQ(polyline.contours[0].start_index, 0u); |
| 995 | + ASSERT_EQ(polyline.points.size(), 5u); |
| 996 | + ASSERT_EQ(polyline.points[0], Point(50, 60)); |
| 997 | + ASSERT_EQ(polyline.points[1], Point(70, 60)); |
| 998 | + ASSERT_EQ(polyline.points[2], Point(70, 80)); |
| 999 | + ASSERT_EQ(polyline.points[3], Point(50, 80)); |
| 1000 | + ASSERT_EQ(polyline.points[4], Point(50, 60)); |
| 1001 | +} |
| 1002 | + |
| 1003 | +TEST(GeometryTest, PathPolylineDuplicatesAreRemovedForSameContour) { |
986 | 1004 | Path::Polyline polyline =
|
987 |
| - PathBuilder{}.AddLine({100, 100}, {200, 100}).TakePath().CreatePolyline(); |
988 |
| - ASSERT_EQ(polyline.GetContourPointBounds(0), std::make_tuple(0u, 2u)); |
989 |
| - ASSERT_EQ(polyline.GetContourPointBounds(14), std::make_tuple(2u, 2u)); |
| 1005 | + PathBuilder{} |
| 1006 | + .MoveTo({50, 50}) |
| 1007 | + .LineTo({50, 50}) // Insert duplicate at beginning of contour. |
| 1008 | + .LineTo({100, 50}) |
| 1009 | + .LineTo({100, 50}) // Insert duplicate at contour join. |
| 1010 | + .LineTo({100, 100}) |
| 1011 | + .Close() // Implicitly insert duplicate {50, 50} across contours. |
| 1012 | + .LineTo({0, 50}) |
| 1013 | + .LineTo({0, 100}) |
| 1014 | + .LineTo({0, 100}) // Insert duplicate at end of contour. |
| 1015 | + .TakePath() |
| 1016 | + .CreatePolyline(); |
| 1017 | + ASSERT_EQ(polyline.contours.size(), 2u); |
| 1018 | + ASSERT_EQ(polyline.contours[0].start_index, 0u); |
| 1019 | + ASSERT_TRUE(polyline.contours[0].is_closed); |
| 1020 | + ASSERT_EQ(polyline.contours[1].start_index, 4u); |
| 1021 | + ASSERT_FALSE(polyline.contours[1].is_closed); |
| 1022 | + ASSERT_EQ(polyline.points.size(), 7u); |
| 1023 | + ASSERT_EQ(polyline.points[0], Point(50, 50)); |
| 1024 | + ASSERT_EQ(polyline.points[1], Point(100, 50)); |
| 1025 | + ASSERT_EQ(polyline.points[2], Point(100, 100)); |
| 1026 | + ASSERT_EQ(polyline.points[3], Point(50, 50)); |
| 1027 | + ASSERT_EQ(polyline.points[4], Point(50, 50)); |
| 1028 | + ASSERT_EQ(polyline.points[5], Point(0, 50)); |
| 1029 | + ASSERT_EQ(polyline.points[6], Point(0, 100)); |
990 | 1030 | }
|
991 | 1031 |
|
992 | 1032 | } // namespace testing
|
|
0 commit comments