Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(363)

Side by Side Diff: remoting/client/desktop_viewport_unittest.cc

Issue 2843373005: [Remoting Client] DesktopViewport Implementation (Closed)
Patch Set: Fix Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 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 "remoting/client/desktop_viewport.h"
6
7 #include "base/bind.h"
8 #include "base/location.h"
9 #include "base/strings/stringprintf.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace remoting {
13
14 namespace {
15
16 const float EPSILON = 0.001f;
17
18 } // namespace
19
20 class DesktopViewportTest : public testing::Test {
joedow 2017/04/28 21:29:53 This system is a bit different than other unit tes
Yuwei 2017/04/28 23:53:40 I just reversed the order to use the more common c
21 public:
22 void SetUp() override;
23 void TearDown() override;
24
25 protected:
26 void ExpectTransformation(const tracked_objects::Location& from_here,
joedow 2017/04/28 21:29:53 I'd rename this to SetExpectedTransform() or SetEx
Yuwei 2017/04/28 23:53:40 Renamed to AssertTransformationReceived.
27 float scale,
28 float offset_x,
29 float offset_y);
30
31 DesktopViewport viewport_;
32
33 private:
34 void OnTransformationChanged(const std::array<float, 9>& matrix);
35
36 bool expect_matrix_ = false;
37 std::array<float, 9> expected_matrix_;
joedow 2017/04/28 21:29:53 expected_transfrom_? The method above doesn't men
Yuwei 2017/04/28 23:53:40 Use |received_transformation_| now
38 tracked_objects::Location expectation_location_;
39 };
40
41 void DesktopViewportTest::SetUp() {
42 viewport_.RegisterOnTransformationChangedCallback(
43 base::Bind(&DesktopViewportTest::OnTransformationChanged,
44 base::Unretained(this)),
45 true);
46 }
47
48 void DesktopViewportTest::TearDown() {
49 ASSERT_FALSE(expect_matrix_);
50 }
51
52 void DesktopViewportTest::ExpectTransformation(
53 const tracked_objects::Location& from_here,
54 float scale,
55 float offset_x,
56 float offset_y) {
57 ASSERT_FALSE(expect_matrix_) << "Previous matrix has not received yet.";
58 expect_matrix_ = true;
59 SimpleMatrix expected(scale, {offset_x, offset_y});
60 expected_matrix_ = expected.ToMatrixArray();
61 expectation_location_ = from_here;
62 }
63
64 void DesktopViewportTest::OnTransformationChanged(
65 const std::array<float, 9>& matrix) {
66 ASSERT_TRUE(expect_matrix_);
67
68 for (int i = 0; i < 9; i++) {
69 float diff = matrix[i] - expected_matrix_[i];
70 ASSERT_TRUE(diff > -EPSILON && diff < EPSILON)
71 << "Matrix doesn't match. \n"
72 << base::StringPrintf("Expected scale: %f, offset: (%f, %f)\n",
73 expected_matrix_[0], expected_matrix_[2],
74 expected_matrix_[5])
75 << base::StringPrintf("Actual scale: %f, offset: (%f, %f)\n", matrix[0],
76 matrix[2], matrix[5])
77 << "Location: " << expectation_location_.ToString();
78 }
79
80 expect_matrix_ = false;
joedow 2017/04/28 21:29:53 If SimpleMatrix had an 'isEmpty()' method, you cou
Yuwei 2017/04/28 23:53:40 Done.
81 }
82
83 TEST_F(DesktopViewportTest, TestViewportInitialization1) {
84 // VP < DP. Desktop shrinks to fit.
85 // +====+------+
86 // | VP | DP |
87 // | | |
88 // +====+------+
89 ExpectTransformation(FROM_HERE, 0.5f, 0.f, 0.f);
90 viewport_.SetDesktopSize(8, 6);
91 viewport_.SetSurfaceSize(2, 3);
92 }
93
94 TEST_F(DesktopViewportTest, TestViewportInitialization2) {
95 // VP < DP. Desktop shrinks to fit.
96 // +-----------------+
97 // | DP |
98 // | |
99 // +=================+
100 // | VP |
101 // +=================+
102 ExpectTransformation(FROM_HERE, 0.375, 0.f, 0.f);
103 viewport_.SetDesktopSize(8, 6);
104 viewport_.SetSurfaceSize(3, 2);
105 }
106
107 TEST_F(DesktopViewportTest, TestViewportInitialization3) {
108 // VP < DP. Desktop shrinks to fit.
109 // +========+----+
110 // | VP | DP |
111 // +========+----+
112 ExpectTransformation(FROM_HERE, 0.333f, 0.f, 0.f);
113 viewport_.SetDesktopSize(9, 3);
114 viewport_.SetSurfaceSize(2, 1);
115 }
116
117 TEST_F(DesktopViewportTest, TestViewportInitialization4) {
118 // VP > DP. Desktop grows to fit.
119 // +====+------+
120 // | VP | DP |
121 // | | |
122 // +====+------+
123 ExpectTransformation(FROM_HERE, 4.f, 0.f, 0.f);
124 viewport_.SetDesktopSize(2, 1);
125 viewport_.SetSurfaceSize(3, 4);
126 }
127
128 TEST_F(DesktopViewportTest, TestMoveDesktop) {
129 // +====+------+
130 // | VP | DP |
131 // | | |
132 // +====+------+
133 ExpectTransformation(FROM_HERE, 0.5f, 0.f, 0.f);
134 viewport_.SetDesktopSize(8, 6);
135 viewport_.SetSurfaceSize(2, 3);
136
137 // <--- DP
138 // +------+====+
139 // | DP | VP |
140 // | | |
141 // +------+====+
142 ExpectTransformation(FROM_HERE, 0.5f, -2.f, 0.f);
143 viewport_.MoveDesktop(-2.f, 0.f);
144
145 // +====+
146 // +----| VP |
147 // | DP | |
148 // | +====+
149 // +--------+
150 // Bounces back.
151 ExpectTransformation(FROM_HERE, 0.5f, -2.f, 0.f);
152 viewport_.MoveDesktop(-1.f, 1.f);
153 }
154
155 TEST_F(DesktopViewportTest, TestMoveAndScaleDesktop) {
156 // Number in surface coordinate.
157 //
158 // +====+------+
159 // | VP | DP |
160 // | | | 3
161 // +====+------+
162 // 4
163 ExpectTransformation(FROM_HERE, 0.5f, 0.f, 0.f);
164 viewport_.SetDesktopSize(8, 6);
165 viewport_.SetSurfaceSize(2, 3);
166
167 // Scale at pivot point (2, 3) by 1.5x.
168 // +------------------+
169 // | |
170 // | +====+ DP | 4.5
171 // | | VP | |
172 // | | | |
173 // +---+====+---------+
174 // 2 6
175 ExpectTransformation(FROM_HERE, 0.75f, -1.f, -1.5f);
176 viewport_.ScaleDesktop(2.f, 3.f, 1.5f);
177
178 // Move VP to the top-right.
179 // +-------------+====+
180 // | | VP |
181 // | DP | |
182 // | +====+ 4.5
183 // | 2 |
184 // +------------------+
185 // 6
186 ExpectTransformation(FROM_HERE, 0.75f, -4.f, 0.f);
187 viewport_.MoveDesktop(-10000.f, 10000.f);
188
189 // Scale at (2, 0) by 0.5x.
190 // VP
191 // +====+
192 // +--+----+
193 // DP | | |
194 // +--+----+
195 // +====+
196 ExpectTransformation(FROM_HERE, 0.375, -1.f, 0.375f);
197 viewport_.ScaleDesktop(2.f, 0.f, 0.5f);
198
199 // Scale all the way down.
200 // +========+
201 // | VP |
202 // +--------+
203 // | DP |
204 // +--------+
205 // | |
206 // +========+
207 ExpectTransformation(FROM_HERE, 0.25f, 0.f, 0.75f);
208 viewport_.ScaleDesktop(20.f, 0.f, 0.0001f);
209 }
210
211 TEST_F(DesktopViewportTest, TestSetViewportCenter) {
212 // Numbers in desktop coordinates.
213 //
214 // +====+------+
215 // | VP | DP |
216 // | | | 6
217 // +====+------+
218 // 8
219 ExpectTransformation(FROM_HERE, 0.5f, 0.f, 0.f);
220 viewport_.SetDesktopSize(8, 6);
221 viewport_.SetSurfaceSize(2, 3);
222
223 // 1.6
224 // +==+--------+
225 // |VP|2.4 DP |
226 // +==+ | 6
227 // +-----------+
228 // 8
229 ExpectTransformation(FROM_HERE, 1.25f, 0.f, 0.f);
230 viewport_.ScaleDesktop(0.f, 0.f, 2.5f);
231
232 // Move VP to center of the desktop.
233 // +------------------+
234 // | +1.6=+ |
235 // | | VP |2.4 | 6
236 // | +====+ |
237 // +------------------+
238 // 8
239 ExpectTransformation(FROM_HERE, 1.25f, -4.f, -2.25f);
240 viewport_.SetViewportCenter(4.f, 3.f);
241
242 // Move it out of bound and bounce it back.
243 // +------------------+
244 // | |
245 // | DP |
246 // | +====+
247 // | | VP |
248 // +---------------| |
249 // +====+
250 ExpectTransformation(FROM_HERE, 1.25f, -8.f, -4.5f);
251 viewport_.SetViewportCenter(1000.f, 1000.f);
252 }
253
254 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698