50 {
51
52class ImpellerEntityUnitTestAccessor {
53 public:
54 static std::vector<SolidFillVertexShader::PerVertexData>
55 GenerateSolidStrokeVertices(
const Path::Polyline&
polyline,
57 Scalar miter_limit,
58 Join stroke_join,
59 Cap stroke_cap,
61 return StrokePathGeometry::GenerateSolidStrokeVertices(
63 }
64};
65
66namespace testing {
67
68TEST(EntityGeometryTest, RectGeometryCoversArea) {
69 auto geometry = Geometry::MakeRect(Rect::MakeLTRB(0, 0, 100, 100));
70 ASSERT_TRUE(geometry->CoversArea({}, Rect::MakeLTRB(0, 0, 100, 100)));
71 ASSERT_FALSE(geometry->CoversArea({}, Rect::MakeLTRB(-1, 0, 100, 100)));
72 ASSERT_TRUE(geometry->CoversArea({}, Rect::MakeLTRB(1, 1, 100, 100)));
73 ASSERT_TRUE(geometry->CoversArea({},
Rect()));
74}
75
76TEST(EntityGeometryTest, FillPathGeometryCoversArea) {
77 auto path = PathBuilder{}.AddRect(Rect::MakeLTRB(0, 0, 100, 100)).TakePath();
78 auto geometry = Geometry::MakeFillPath(
79 path, Rect::MakeLTRB(0, 0, 100, 100));
80 ASSERT_TRUE(geometry->CoversArea({}, Rect::MakeLTRB(0, 0, 100, 100)));
81 ASSERT_FALSE(geometry->CoversArea({}, Rect::MakeLTRB(-1, 0, 100, 100)));
82 ASSERT_TRUE(geometry->CoversArea({}, Rect::MakeLTRB(1, 1, 100, 100)));
83 ASSERT_TRUE(geometry->CoversArea({},
Rect()));
84}
85
86TEST(EntityGeometryTest, FillPathGeometryCoversAreaNoInnerRect) {
87 auto path = PathBuilder{}.AddRect(Rect::MakeLTRB(0, 0, 100, 100)).TakePath();
88 auto geometry = Geometry::MakeFillPath(path);
89 ASSERT_FALSE(geometry->CoversArea({}, Rect::MakeLTRB(0, 0, 100, 100)));
90 ASSERT_FALSE(geometry->CoversArea({}, Rect::MakeLTRB(-1, 0, 100, 100)));
91 ASSERT_FALSE(geometry->CoversArea({}, Rect::MakeLTRB(1, 1, 100, 100)));
92 ASSERT_FALSE(geometry->CoversArea({},
Rect()));
93}
94
95TEST(EntityGeometryTest, LineGeometryCoverage) {
96 {
97 auto geometry = Geometry::MakeLine({10, 10}, {20, 10}, 2, Cap::kButt);
98 EXPECT_EQ(geometry->GetCoverage({}), Rect::MakeLTRB(10, 9, 20, 11));
99 EXPECT_TRUE(geometry->CoversArea({}, Rect::MakeLTRB(10, 9, 20, 11)));
100 }
101
102 {
103 auto geometry = Geometry::MakeLine({10, 10}, {20, 10}, 2, Cap::kSquare);
104 EXPECT_EQ(geometry->GetCoverage({}), Rect::MakeLTRB(9, 9, 21, 11));
105 EXPECT_TRUE(geometry->CoversArea({}, Rect::MakeLTRB(9, 9, 21, 11)));
106 }
107
108 {
109 auto geometry = Geometry::MakeLine({10, 10}, {10, 20}, 2, Cap::kButt);
110 EXPECT_EQ(geometry->GetCoverage({}), Rect::MakeLTRB(9, 10, 11, 20));
111 EXPECT_TRUE(geometry->CoversArea({}, Rect::MakeLTRB(9, 10, 11, 20)));
112 }
113
114 {
115 auto geometry = Geometry::MakeLine({10, 10}, {10, 20}, 2, Cap::kSquare);
116 EXPECT_EQ(geometry->GetCoverage({}), Rect::MakeLTRB(9, 9, 11, 21));
117 EXPECT_TRUE(geometry->CoversArea({}, Rect::MakeLTRB(9, 9, 11, 21)));
118 }
119}
120
121TEST(EntityGeometryTest, RoundRectGeometryCoversArea) {
122 auto geometry =
123 Geometry::MakeRoundRect(Rect::MakeLTRB(0, 0, 100, 100),
Size(20, 20));
124 EXPECT_FALSE(geometry->CoversArea({}, Rect::MakeLTRB(15, 15, 85, 85)));
125 EXPECT_TRUE(geometry->CoversArea({}, Rect::MakeLTRB(20, 20, 80, 80)));
126 EXPECT_TRUE(geometry->CoversArea({}, Rect::MakeLTRB(30, 1, 70, 99)));
127 EXPECT_TRUE(geometry->CoversArea({}, Rect::MakeLTRB(1, 30, 99, 70)));
128}
129
130TEST(EntityGeometryTest, GeometryResultHasReasonableDefaults) {
132 EXPECT_EQ(
result.type, PrimitiveType::kTriangleStrip);
133 EXPECT_EQ(
result.transform, Matrix());
134 EXPECT_EQ(
result.mode, GeometryResult::Mode::kNormal);
135}
136
137}
138}
#define TEST(S, s, D, expected)
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
const Scalar stroke_width
const Path::Polyline & polyline
#define EXPECT_TRUE(handle)