@@ -50,6 +50,142 @@ TEST(PathTest, PathCreatePolyLineDoesNotDuplicatePoints) {
5050 ASSERT_EQ (polyline.GetPoint (4 ).x , 50 );
5151}
5252
53+ TEST (PathTest, PathSingleContour) {
54+ // Closed shapes.
55+ {
56+ Path path = PathBuilder{}.AddCircle ({100 , 100 }, 50 ).TakePath ();
57+ EXPECT_TRUE (path.IsSingleContour ());
58+ }
59+
60+ {
61+ Path path =
62+ PathBuilder{}.AddOval (Rect::MakeXYWH (100 , 100 , 100 , 100 )).TakePath ();
63+
64+ EXPECT_TRUE (path.IsSingleContour ());
65+ }
66+
67+ {
68+ Path path =
69+ PathBuilder{}.AddRect (Rect::MakeXYWH (100 , 100 , 100 , 100 )).TakePath ();
70+
71+ EXPECT_TRUE (path.IsSingleContour ());
72+ }
73+
74+ {
75+ Path path = PathBuilder{}
76+ .AddRoundRect (RoundRect::MakeRectRadius (
77+ Rect::MakeXYWH (100 , 100 , 100 , 100 ), 10 ))
78+ .TakePath ();
79+
80+ EXPECT_TRUE (path.IsSingleContour ());
81+ }
82+
83+ // Open shapes.
84+ {
85+ Point p (100 , 100 );
86+ Path path = PathBuilder{}.AddLine (p, {200 , 100 }).TakePath ();
87+
88+ EXPECT_TRUE (path.IsSingleContour ());
89+ }
90+
91+ {
92+ Path path =
93+ PathBuilder{}
94+ .AddCubicCurve ({100 , 100 }, {100 , 50 }, {100 , 150 }, {200 , 100 })
95+ .TakePath ();
96+
97+ EXPECT_TRUE (path.IsSingleContour ());
98+ }
99+
100+ {
101+ Path path = PathBuilder{}
102+ .AddQuadraticCurve ({100 , 100 }, {100 , 50 }, {200 , 100 })
103+ .TakePath ();
104+
105+ EXPECT_TRUE (path.IsSingleContour ());
106+ }
107+ }
108+
109+ TEST (PathTest, PathSingleContourDoubleShapes) {
110+ // Closed shapes.
111+ {
112+ Path path = PathBuilder{}
113+ .AddCircle ({100 , 100 }, 50 )
114+ .AddCircle ({100 , 100 }, 50 )
115+ .TakePath ();
116+ EXPECT_FALSE (path.IsSingleContour ());
117+ }
118+
119+ {
120+ Path path = PathBuilder{}
121+ .AddOval (Rect::MakeXYWH (100 , 100 , 100 , 100 ))
122+ .AddOval (Rect::MakeXYWH (100 , 100 , 100 , 100 ))
123+ .TakePath ();
124+
125+ EXPECT_FALSE (path.IsSingleContour ());
126+ }
127+
128+ {
129+ Path path = PathBuilder{}
130+ .AddRect (Rect::MakeXYWH (100 , 100 , 100 , 100 ))
131+ .AddRect (Rect::MakeXYWH (100 , 100 , 100 , 100 ))
132+ .TakePath ();
133+
134+ EXPECT_FALSE (path.IsSingleContour ());
135+ }
136+
137+ {
138+ Path path = PathBuilder{}
139+ .AddRoundRect (RoundRect::MakeRectRadius (
140+ Rect::MakeXYWH (100 , 100 , 100 , 100 ), 10 ))
141+ .AddRoundRect (RoundRect::MakeRectRadius (
142+ Rect::MakeXYWH (100 , 100 , 100 , 100 ), 10 ))
143+ .TakePath ();
144+
145+ EXPECT_FALSE (path.IsSingleContour ());
146+ }
147+
148+ {
149+ Path path = PathBuilder{}
150+ .AddRoundRect (RoundRect::MakeRectXY (
151+ Rect::MakeXYWH (100 , 100 , 100 , 100 ), Size (10 , 20 )))
152+ .AddRoundRect (RoundRect::MakeRectXY (
153+ Rect::MakeXYWH (100 , 100 , 100 , 100 ), Size (10 , 20 )))
154+ .TakePath ();
155+
156+ EXPECT_FALSE (path.IsSingleContour ());
157+ }
158+
159+ // Open shapes.
160+ {
161+ Point p (100 , 100 );
162+ Path path =
163+ PathBuilder{}.AddLine (p, {200 , 100 }).AddLine (p, {200 , 100 }).TakePath ();
164+
165+ EXPECT_FALSE (path.IsSingleContour ());
166+ }
167+
168+ {
169+ Path path =
170+ PathBuilder{}
171+ .AddCubicCurve ({100 , 100 }, {100 , 50 }, {100 , 150 }, {200 , 100 })
172+ .AddCubicCurve ({100 , 100 }, {100 , 50 }, {100 , 150 }, {200 , 100 })
173+ .TakePath ();
174+
175+ EXPECT_FALSE (path.IsSingleContour ());
176+ }
177+
178+ {
179+ Path path = PathBuilder{}
180+ .AddQuadraticCurve ({100 , 100 }, {100 , 50 }, {200 , 100 })
181+ .Close ()
182+ .AddQuadraticCurve ({100 , 100 }, {100 , 50 }, {200 , 100 })
183+ .TakePath ();
184+
185+ EXPECT_FALSE (path.IsSingleContour ());
186+ }
187+ }
188+
53189TEST (PathTest, PathBuilderSetsCorrectContourPropertiesForAddCommands) {
54190 // Closed shapes.
55191 {
0 commit comments