xref: /aosp_15_r20/external/libchrome/ui/gfx/geometry/insets_unittest.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "ui/gfx/geometry/insets.h"
6 
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "ui/gfx/geometry/insets_f.h"
9 #include "ui/gfx/geometry/rect.h"
10 #include "ui/gfx/geometry/vector2d.h"
11 
TEST(InsetsTest,InsetsDefault)12 TEST(InsetsTest, InsetsDefault) {
13   gfx::Insets insets;
14   EXPECT_EQ(0, insets.top());
15   EXPECT_EQ(0, insets.left());
16   EXPECT_EQ(0, insets.bottom());
17   EXPECT_EQ(0, insets.right());
18   EXPECT_EQ(0, insets.width());
19   EXPECT_EQ(0, insets.height());
20   EXPECT_TRUE(insets.IsEmpty());
21 }
22 
TEST(InsetsTest,Insets)23 TEST(InsetsTest, Insets) {
24   gfx::Insets insets(1, 2, 3, 4);
25   EXPECT_EQ(1, insets.top());
26   EXPECT_EQ(2, insets.left());
27   EXPECT_EQ(3, insets.bottom());
28   EXPECT_EQ(4, insets.right());
29   EXPECT_EQ(6, insets.width());  // Left + right.
30   EXPECT_EQ(4, insets.height());  // Top + bottom.
31   EXPECT_FALSE(insets.IsEmpty());
32 }
33 
TEST(InsetsTest,Set)34 TEST(InsetsTest, Set) {
35   gfx::Insets insets;
36   insets.Set(1, 2, 3, 4);
37   EXPECT_EQ(1, insets.top());
38   EXPECT_EQ(2, insets.left());
39   EXPECT_EQ(3, insets.bottom());
40   EXPECT_EQ(4, insets.right());
41 }
42 
TEST(InsetsTest,Operators)43 TEST(InsetsTest, Operators) {
44   gfx::Insets insets;
45   insets.Set(1, 2, 3, 4);
46   insets += gfx::Insets(5, 6, 7, 8);
47   EXPECT_EQ(6, insets.top());
48   EXPECT_EQ(8, insets.left());
49   EXPECT_EQ(10, insets.bottom());
50   EXPECT_EQ(12, insets.right());
51 
52   insets -= gfx::Insets(-1, 0, 1, 2);
53   EXPECT_EQ(7, insets.top());
54   EXPECT_EQ(8, insets.left());
55   EXPECT_EQ(9, insets.bottom());
56   EXPECT_EQ(10, insets.right());
57 
58   insets = gfx::Insets(10, 10, 10, 10) + gfx::Insets(5, 5, 0, -20);
59   EXPECT_EQ(15, insets.top());
60   EXPECT_EQ(15, insets.left());
61   EXPECT_EQ(10, insets.bottom());
62   EXPECT_EQ(-10, insets.right());
63 
64   insets = gfx::Insets(10, 10, 10, 10) - gfx::Insets(5, 5, 0, -20);
65   EXPECT_EQ(5, insets.top());
66   EXPECT_EQ(5, insets.left());
67   EXPECT_EQ(10, insets.bottom());
68   EXPECT_EQ(30, insets.right());
69 }
70 
TEST(InsetsFTest,Operators)71 TEST(InsetsFTest, Operators) {
72   gfx::InsetsF insets;
73   insets.Set(1.f, 2.5f, 3.3f, 4.1f);
74   insets += gfx::InsetsF(5.8f, 6.7f, 7.6f, 8.5f);
75   EXPECT_FLOAT_EQ(6.8f, insets.top());
76   EXPECT_FLOAT_EQ(9.2f, insets.left());
77   EXPECT_FLOAT_EQ(10.9f, insets.bottom());
78   EXPECT_FLOAT_EQ(12.6f, insets.right());
79 
80   insets -= gfx::InsetsF(-1.f, 0, 1.1f, 2.2f);
81   EXPECT_FLOAT_EQ(7.8f, insets.top());
82   EXPECT_FLOAT_EQ(9.2f, insets.left());
83   EXPECT_FLOAT_EQ(9.8f, insets.bottom());
84   EXPECT_FLOAT_EQ(10.4f, insets.right());
85 
86   insets = gfx::InsetsF(10, 10.1f, 10.01f, 10.001f) +
87            gfx::InsetsF(5.5f, 5.f, 0, -20.2f);
88   EXPECT_FLOAT_EQ(15.5f, insets.top());
89   EXPECT_FLOAT_EQ(15.1f, insets.left());
90   EXPECT_FLOAT_EQ(10.01f, insets.bottom());
91   EXPECT_FLOAT_EQ(-10.199f, insets.right());
92 
93   insets = gfx::InsetsF(10, 10.1f, 10.01f, 10.001f) -
94            gfx::InsetsF(5.5f, 5.f, 0, -20.2f);
95   EXPECT_FLOAT_EQ(4.5f, insets.top());
96   EXPECT_FLOAT_EQ(5.1f, insets.left());
97   EXPECT_FLOAT_EQ(10.01f, insets.bottom());
98   EXPECT_FLOAT_EQ(30.201f, insets.right());
99 }
100 
TEST(InsetsTest,Equality)101 TEST(InsetsTest, Equality) {
102   gfx::Insets insets1;
103   insets1.Set(1, 2, 3, 4);
104   gfx::Insets insets2;
105   // Test operator== and operator!=.
106   EXPECT_FALSE(insets1 == insets2);
107   EXPECT_TRUE(insets1 != insets2);
108 
109   insets2.Set(1, 2, 3, 4);
110   EXPECT_TRUE(insets1 == insets2);
111   EXPECT_FALSE(insets1 != insets2);
112 }
113 
TEST(InsetsTest,ToString)114 TEST(InsetsTest, ToString) {
115   gfx::Insets insets(1, 2, 3, 4);
116   EXPECT_EQ("1,2,3,4", insets.ToString());
117 }
118 
TEST(InsetsTest,Offset)119 TEST(InsetsTest, Offset) {
120   const gfx::Insets insets(1, 2, 3, 4);
121   const gfx::Rect rect(5, 6, 7, 8);
122   const gfx::Vector2d vector(9, 10);
123 
124   // Whether you inset then offset the rect, offset then inset the rect, or
125   // offset the insets then apply to the rect, the outcome should be the same.
126   gfx::Rect inset_first = rect;
127   inset_first.Inset(insets);
128   inset_first.Offset(vector);
129 
130   gfx::Rect offset_first = rect;
131   offset_first.Offset(vector);
132   offset_first.Inset(insets);
133 
134   gfx::Rect inset_by_offset = rect;
135   inset_by_offset.Inset(insets.Offset(vector));
136 
137   EXPECT_EQ(inset_first, offset_first);
138   EXPECT_EQ(inset_by_offset, inset_first);
139 }
140