1 /*
2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "modules/desktop_capture/desktop_geometry.h"
12
13 #include "test/gtest.h"
14
15 namespace webrtc {
16
TEST(DesktopRectTest,UnionBetweenTwoNonEmptyRects)17 TEST(DesktopRectTest, UnionBetweenTwoNonEmptyRects) {
18 DesktopRect rect = DesktopRect::MakeLTRB(1, 1, 2, 2);
19 rect.UnionWith(DesktopRect::MakeLTRB(-2, -2, -1, -1));
20 ASSERT_TRUE(rect.equals(DesktopRect::MakeLTRB(-2, -2, 2, 2)));
21 }
22
TEST(DesktopRectTest,UnionWithEmptyRect)23 TEST(DesktopRectTest, UnionWithEmptyRect) {
24 DesktopRect rect = DesktopRect::MakeWH(1, 1);
25 rect.UnionWith(DesktopRect());
26 ASSERT_TRUE(rect.equals(DesktopRect::MakeWH(1, 1)));
27
28 rect = DesktopRect::MakeXYWH(1, 1, 2, 2);
29 rect.UnionWith(DesktopRect());
30 ASSERT_TRUE(rect.equals(DesktopRect::MakeXYWH(1, 1, 2, 2)));
31
32 rect = DesktopRect::MakeXYWH(1, 1, 2, 2);
33 rect.UnionWith(DesktopRect::MakeXYWH(3, 3, 0, 0));
34 ASSERT_TRUE(rect.equals(DesktopRect::MakeXYWH(1, 1, 2, 2)));
35 }
36
TEST(DesktopRectTest,EmptyRectUnionWithNonEmptyOne)37 TEST(DesktopRectTest, EmptyRectUnionWithNonEmptyOne) {
38 DesktopRect rect;
39 rect.UnionWith(DesktopRect::MakeWH(1, 1));
40 ASSERT_TRUE(rect.equals(DesktopRect::MakeWH(1, 1)));
41
42 rect = DesktopRect();
43 rect.UnionWith(DesktopRect::MakeXYWH(1, 1, 2, 2));
44 ASSERT_TRUE(rect.equals(DesktopRect::MakeXYWH(1, 1, 2, 2)));
45
46 rect = DesktopRect::MakeXYWH(3, 3, 0, 0);
47 rect.UnionWith(DesktopRect::MakeXYWH(1, 1, 2, 2));
48 ASSERT_TRUE(rect.equals(DesktopRect::MakeXYWH(1, 1, 2, 2)));
49 }
50
TEST(DesktopRectTest,EmptyRectUnionWithEmptyOne)51 TEST(DesktopRectTest, EmptyRectUnionWithEmptyOne) {
52 DesktopRect rect;
53 rect.UnionWith(DesktopRect());
54 ASSERT_TRUE(rect.is_empty());
55
56 rect = DesktopRect::MakeXYWH(1, 1, 0, 0);
57 rect.UnionWith(DesktopRect());
58 ASSERT_TRUE(rect.is_empty());
59
60 rect = DesktopRect();
61 rect.UnionWith(DesktopRect::MakeXYWH(1, 1, 0, 0));
62 ASSERT_TRUE(rect.is_empty());
63
64 rect = DesktopRect::MakeXYWH(1, 1, 0, 0);
65 rect.UnionWith(DesktopRect::MakeXYWH(-1, -1, 0, 0));
66 ASSERT_TRUE(rect.is_empty());
67 }
68
TEST(DesktopRectTest,Scale)69 TEST(DesktopRectTest, Scale) {
70 DesktopRect rect = DesktopRect::MakeXYWH(100, 100, 100, 100);
71 rect.Scale(1.1, 1.1);
72 ASSERT_EQ(rect.top(), 100);
73 ASSERT_EQ(rect.left(), 100);
74 ASSERT_EQ(rect.width(), 110);
75 ASSERT_EQ(rect.height(), 110);
76
77 rect = DesktopRect::MakeXYWH(100, 100, 100, 100);
78 rect.Scale(0.01, 0.01);
79 ASSERT_EQ(rect.top(), 100);
80 ASSERT_EQ(rect.left(), 100);
81 ASSERT_EQ(rect.width(), 1);
82 ASSERT_EQ(rect.height(), 1);
83
84 rect = DesktopRect::MakeXYWH(100, 100, 100, 100);
85 rect.Scale(1.1, 0.9);
86 ASSERT_EQ(rect.top(), 100);
87 ASSERT_EQ(rect.left(), 100);
88 ASSERT_EQ(rect.width(), 110);
89 ASSERT_EQ(rect.height(), 90);
90
91 rect = DesktopRect::MakeXYWH(0, 0, 100, 100);
92 rect.Scale(1.1, 1.1);
93 ASSERT_EQ(rect.top(), 0);
94 ASSERT_EQ(rect.left(), 0);
95 ASSERT_EQ(rect.width(), 110);
96 ASSERT_EQ(rect.height(), 110);
97
98 rect = DesktopRect::MakeXYWH(0, 100, 100, 100);
99 rect.Scale(1.1, 1.1);
100 ASSERT_EQ(rect.top(), 100);
101 ASSERT_EQ(rect.left(), 0);
102 ASSERT_EQ(rect.width(), 110);
103 ASSERT_EQ(rect.height(), 110);
104 }
105
106 } // namespace webrtc
107