6 #include "flutter/testing/testing.h"
12 #include "impeller/renderer/testing/mocks.h"
15 std::vector<impeller::SolidFillVertexShader::PerVertexData> a,
16 std::vector<impeller::SolidFillVertexShader::PerVertexData>
b) {
17 if (a.size() !=
b.size()) {
18 return ::testing::AssertionFailure() <<
"Colors length does not match";
20 for (
auto i = 0u; i <
b.size(); i++) {
21 if (!
PointNear(a[i].position,
b[i].position)) {
22 return ::testing::AssertionFailure() <<
"Positions are not equal.";
25 return ::testing::AssertionSuccess();
29 std::vector<impeller::TextureFillVertexShader::PerVertexData> a,
30 std::vector<impeller::TextureFillVertexShader::PerVertexData>
b) {
31 if (a.size() !=
b.size()) {
32 return ::testing::AssertionFailure() <<
"Colors length does not match";
34 for (
auto i = 0u; i <
b.size(); i++) {
35 if (!
PointNear(a[i].position,
b[i].position)) {
36 return ::testing::AssertionFailure() <<
"Positions are not equal.";
38 if (!
PointNear(a[i].texture_coords,
b[i].texture_coords)) {
39 return ::testing::AssertionFailure() <<
"Texture coords are not equal.";
42 return ::testing::AssertionSuccess();
45 #define EXPECT_SOLID_VERTICES_NEAR(a, b) \
46 EXPECT_PRED2(&::SolidVerticesNear, a, b)
47 #define EXPECT_TEXTURE_VERTICES_NEAR(a, b) \
48 EXPECT_PRED2(&::TextureVerticesNear, a, b)
54 static std::vector<SolidFillVertexShader::PerVertexData>
61 return StrokePathGeometry::GenerateSolidStrokeVertices(
65 static std::vector<TextureFillVertexShader::PerVertexData>
74 const Matrix& effect_transform) {
75 return StrokePathGeometry::GenerateSolidStrokeVerticesUV(
77 texture_origin, texture_size, effect_transform);
83 TEST(EntityGeometryTest, RectGeometryCoversArea) {
85 ASSERT_TRUE(geometry->CoversArea({},
Rect::MakeLTRB(0, 0, 100, 100)));
86 ASSERT_FALSE(geometry->CoversArea({},
Rect::MakeLTRB(-1, 0, 100, 100)));
87 ASSERT_TRUE(geometry->CoversArea({},
Rect::MakeLTRB(1, 1, 100, 100)));
88 ASSERT_TRUE(geometry->CoversArea({},
Rect()));
91 TEST(EntityGeometryTest, FillPathGeometryCoversArea) {
95 ASSERT_TRUE(geometry->CoversArea({},
Rect::MakeLTRB(0, 0, 100, 100)));
96 ASSERT_FALSE(geometry->CoversArea({},
Rect::MakeLTRB(-1, 0, 100, 100)));
97 ASSERT_TRUE(geometry->CoversArea({},
Rect::MakeLTRB(1, 1, 100, 100)));
98 ASSERT_TRUE(geometry->CoversArea({},
Rect()));
101 TEST(EntityGeometryTest, FillPathGeometryCoversAreaNoInnerRect) {
104 ASSERT_FALSE(geometry->CoversArea({},
Rect::MakeLTRB(0, 0, 100, 100)));
105 ASSERT_FALSE(geometry->CoversArea({},
Rect::MakeLTRB(-1, 0, 100, 100)));
106 ASSERT_FALSE(geometry->CoversArea({},
Rect::MakeLTRB(1, 1, 100, 100)));
107 ASSERT_FALSE(geometry->CoversArea({},
Rect()));
110 TEST(EntityGeometryTest, LineGeometryCoverage) {
113 EXPECT_EQ(geometry->GetCoverage({}),
Rect::MakeLTRB(10, 9, 20, 11));
114 EXPECT_TRUE(geometry->CoversArea({},
Rect::MakeLTRB(10, 9, 20, 11)));
119 EXPECT_EQ(geometry->GetCoverage({}),
Rect::MakeLTRB(9, 9, 21, 11));
120 EXPECT_TRUE(geometry->CoversArea({},
Rect::MakeLTRB(9, 9, 21, 11)));
125 EXPECT_EQ(geometry->GetCoverage({}),
Rect::MakeLTRB(9, 10, 11, 20));
126 EXPECT_TRUE(geometry->CoversArea({},
Rect::MakeLTRB(9, 10, 11, 20)));
131 EXPECT_EQ(geometry->GetCoverage({}),
Rect::MakeLTRB(9, 9, 11, 21));
132 EXPECT_TRUE(geometry->CoversArea({},
Rect::MakeLTRB(9, 9, 11, 21)));
136 TEST(EntityGeometryTest, RoundRectGeometryCoversArea) {
139 EXPECT_FALSE(geometry->CoversArea({},
Rect::MakeLTRB(15, 15, 85, 85)));
140 EXPECT_TRUE(geometry->CoversArea({},
Rect::MakeLTRB(20, 20, 80, 80)));
141 EXPECT_TRUE(geometry->CoversArea({},
Rect::MakeLTRB(30, 1, 70, 99)));
142 EXPECT_TRUE(geometry->CoversArea({},
Rect::MakeLTRB(1, 30, 99, 70)));
145 TEST(EntityGeometryTest, StrokePathGeometryTransformOfLine) {
148 auto points = std::make_unique<std::vector<Point>>();
150 path.CreatePolyline(1.0f, std::move(points),
152 points = std::move(reclaimed);
158 std::vector<SolidFillVertexShader::PerVertexData> expected = {
159 {.position =
Point(100.0f, 105.0f)},
160 {.position =
Point(100.0f, 95.0f)},
161 {.position =
Point(100.0f, 105.0f)},
162 {.position =
Point(100.0f, 95.0f)},
163 {.position =
Point(200.0f, 105.0f)},
164 {.position =
Point(200.0f, 95.0f)},
165 {.position =
Point(200.0f, 105.0f)},
166 {.position =
Point(200.0f, 95.0f)},
178 auto uv = [](
const Point& p) {
179 return Point((p.x - 50.0f) / 20.0f,
180 (p.y - 40.0f) / 40.0f);
182 std::vector<TextureFillVertexShader::PerVertexData> uv_expected;
183 for (
size_t i = 0; i < expected.size(); i++) {
184 auto p = expected[i].position;
185 uv_expected.push_back({.position = p, .texture_coords = uv(p)});
199 auto uv = [](
const Point& p) {
200 return Point(((p.x * 8.0f) - 50.0f) / 20.0f,
201 ((p.y * 4.0f) - 40.0f) / 40.0f);
203 std::vector<TextureFillVertexShader::PerVertexData> uv_expected;
204 for (
size_t i = 0; i < expected.size(); i++) {
205 auto p = expected[i].position;
206 uv_expected.push_back({.position = p, .texture_coords = uv(p)});
220 auto uv = [](
const Point& p) {
221 return Point(((p.x + 8.0f) - 50.0f) / 20.0f,
222 ((p.y + 4.0f) - 40.0f) / 40.0f);
224 std::vector<TextureFillVertexShader::PerVertexData> uv_expected;
225 for (
size_t i = 0; i < expected.size(); i++) {
226 auto p = expected[i].position;
227 uv_expected.push_back({.position = p, .texture_coords = uv(p)});
234 TEST(EntityGeometryTest, GeometryResultHasReasonableDefaults) {