| Index: ui/gfx/geometry/size_unittest.cc
|
| diff --git a/ui/gfx/geometry/size_unittest.cc b/ui/gfx/geometry/size_unittest.cc
|
| index 16b1ddceaec9ed6b96e8bebc5c1173627edc7a7e..ab4a8317687cbfd28b8720ff975f21ea9978c181 100644
|
| --- a/ui/gfx/geometry/size_unittest.cc
|
| +++ b/ui/gfx/geometry/size_unittest.cc
|
| @@ -153,4 +153,99 @@ TEST(SizeTest, IntegerOverflow) {
|
| EXPECT_EQ(test, min_size);
|
| }
|
|
|
| +// This checks that we set IsEmpty appropriately.
|
| +TEST(SizeTest, TrivialDimensionTests) {
|
| + const float clearly_trivial = SizeF::kTrivial / 2.f;
|
| + const float massize_dimension = 4e13f;
|
| +
|
| + // First, using the constructor.
|
| + EXPECT_TRUE(SizeF(clearly_trivial, 1.f).IsEmpty());
|
| + EXPECT_TRUE(SizeF(.01f, clearly_trivial).IsEmpty());
|
| + EXPECT_TRUE(SizeF(0.f, 0.f).IsEmpty());
|
| + EXPECT_FALSE(SizeF(.01f, .01f).IsEmpty());
|
| +
|
| + // Then use the setter.
|
| + SizeF test(2.f, 1.f);
|
| + EXPECT_FALSE(test.IsEmpty());
|
| +
|
| + test.SetSize(clearly_trivial, 1.f);
|
| + EXPECT_TRUE(test.IsEmpty());
|
| +
|
| + test.SetSize(.01f, clearly_trivial);
|
| + EXPECT_TRUE(test.IsEmpty());
|
| +
|
| + test.SetSize(0.f, 0.f);
|
| + EXPECT_TRUE(test.IsEmpty());
|
| +
|
| + test.SetSize(.01f, .01f);
|
| + EXPECT_FALSE(test.IsEmpty());
|
| +
|
| + // Now just one dimension at a time.
|
| + test.set_width(clearly_trivial);
|
| + EXPECT_TRUE(test.IsEmpty());
|
| +
|
| + test.set_width(massize_dimension);
|
| + test.set_height(clearly_trivial);
|
| + EXPECT_TRUE(test.IsEmpty());
|
| +
|
| + test.set_width(clearly_trivial);
|
| + test.set_height(massize_dimension);
|
| + EXPECT_TRUE(test.IsEmpty());
|
| +
|
| + test.set_width(2.f);
|
| + EXPECT_FALSE(test.IsEmpty());
|
| +}
|
| +
|
| +// These are the ramifications of the decision to keep the recorded size
|
| +// at zero for trivial sizes.
|
| +TEST(SizeTest, ClampsToZero) {
|
| + const float clearly_trivial = SizeF::kTrivial / 2.f;
|
| + const float nearly_trivial = SizeF::kTrivial * 1.5f;
|
| +
|
| + SizeF test(clearly_trivial, 1.f);
|
| +
|
| + EXPECT_FLOAT_EQ(0.f, test.width());
|
| + EXPECT_FLOAT_EQ(1.f, test.height());
|
| +
|
| + test.SetSize(.01f, clearly_trivial);
|
| +
|
| + EXPECT_FLOAT_EQ(.01f, test.width());
|
| + EXPECT_FLOAT_EQ(0.f, test.height());
|
| +
|
| + test.SetSize(nearly_trivial, nearly_trivial);
|
| +
|
| + EXPECT_FLOAT_EQ(nearly_trivial, test.width());
|
| + EXPECT_FLOAT_EQ(nearly_trivial, test.height());
|
| +
|
| + test.Scale(0.5f);
|
| +
|
| + EXPECT_FLOAT_EQ(0.f, test.width());
|
| + EXPECT_FLOAT_EQ(0.f, test.height());
|
| +
|
| + test.SetSize(0.f, 0.f);
|
| + test.Enlarge(clearly_trivial, clearly_trivial);
|
| + test.Enlarge(clearly_trivial, clearly_trivial);
|
| + test.Enlarge(clearly_trivial, clearly_trivial);
|
| +
|
| + EXPECT_EQ(SizeF(0.f, 0.f), test);
|
| +}
|
| +
|
| +// These make sure the constructor and setter have the same effect on the
|
| +// boundary case. This claims to know the boundary, but not which way it goes.
|
| +TEST(SizeTest, ConsistentClamping) {
|
| + SizeF resized;
|
| +
|
| + resized.SetSize(SizeF::kTrivial, 0.f);
|
| + EXPECT_EQ(SizeF(SizeF::kTrivial, 0.f), resized);
|
| +
|
| + resized.SetSize(0.f, SizeF::kTrivial);
|
| + EXPECT_EQ(SizeF(0.f, SizeF::kTrivial), resized);
|
| +}
|
| +
|
| +// Let's make sure we don't unexpectedly grow the struct by adding constants.
|
| +// Also, if some platform packs floats inefficiently, it would be worth noting.
|
| +TEST(SizeTest, StaysSmall) {
|
| + EXPECT_EQ(2 * sizeof(float), sizeof(SizeF));
|
| +}
|
| +
|
| } // namespace gfx
|
|
|