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

Side by Side Diff: content/browser/device_orientation/provider_unittest.cc

Issue 10755002: Refactors DeviceOrientation to make it more extensible (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Removing unused function IsEmpty Created 8 years, 5 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <queue> 5 #include <queue>
6 6
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/synchronization/lock.h" 8 #include "base/synchronization/lock.h"
9 #include "content/browser/device_orientation/data_fetcher.h" 9 #include "content/browser/device_orientation/data_fetcher.h"
10 #include "content/browser/device_orientation/device_data.h"
10 #include "content/browser/device_orientation/orientation.h" 11 #include "content/browser/device_orientation/orientation.h"
11 #include "content/browser/device_orientation/provider.h" 12 #include "content/browser/device_orientation/provider.h"
12 #include "content/browser/device_orientation/provider_impl.h" 13 #include "content/browser/device_orientation/provider_impl.h"
13 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
14 15
15 namespace device_orientation { 16 namespace device_orientation {
16 namespace { 17 namespace {
17 18
18 // Class for checking expectations on orientation updates from the Provider. 19 // Class for checking expectations on orientation updates from the Provider.
19 class UpdateChecker : public Provider::Observer { 20 class OrientationUpdateChecker : public Provider::Observer {
20 public: 21 public:
21 explicit UpdateChecker(int* expectations_count_ptr) 22 explicit OrientationUpdateChecker(int* expectations_count_ptr)
22 : expectations_count_ptr_(expectations_count_ptr) { 23 : Observer(DeviceData::kTypeOrientation),
24 expectations_count_ptr_(expectations_count_ptr) {
23 } 25 }
24 26
25 virtual ~UpdateChecker() {} 27 virtual ~OrientationUpdateChecker() {}
26 28
27 // From Provider::Observer. 29 // From Provider::Observer.
28 virtual void OnOrientationUpdate(const Orientation& orientation) { 30 virtual void OnDeviceDataUpdate(const DeviceData* device_data,
31 DeviceData::Type device_data_type) {
29 ASSERT_FALSE(expectations_queue_.empty()); 32 ASSERT_FALSE(expectations_queue_.empty());
30 33
31 Orientation expected = expectations_queue_.front(); 34 scoped_refptr<const Orientation> orientation(
35 static_cast<const Orientation*>(device_data));
36 if (orientation == NULL && device_data_type == DeviceData::kTypeOrientation)
37 orientation = new Orientation();
38 else
39 ASSERT_FALSE(orientation == NULL);
40
41 scoped_refptr<const Orientation> expected = expectations_queue_.front();
32 expectations_queue_.pop(); 42 expectations_queue_.pop();
33 43
34 EXPECT_EQ(expected.can_provide_alpha(), orientation.can_provide_alpha()); 44 EXPECT_EQ(expected->can_provide_alpha(), orientation->can_provide_alpha());
35 EXPECT_EQ(expected.can_provide_beta(), orientation.can_provide_beta()); 45 EXPECT_EQ(expected->can_provide_beta(), orientation->can_provide_beta());
36 EXPECT_EQ(expected.can_provide_gamma(), orientation.can_provide_gamma()); 46 EXPECT_EQ(expected->can_provide_gamma(), orientation->can_provide_gamma());
37 EXPECT_EQ(expected.can_provide_absolute(), 47 EXPECT_EQ(expected->can_provide_absolute(),
38 orientation.can_provide_absolute()); 48 orientation->can_provide_absolute());
39 if (expected.can_provide_alpha()) 49 if (expected->can_provide_alpha())
40 EXPECT_EQ(expected.alpha(), orientation.alpha()); 50 EXPECT_EQ(expected->alpha(), orientation->alpha());
41 if (expected.can_provide_beta()) 51 if (expected->can_provide_beta())
42 EXPECT_EQ(expected.beta(), orientation.beta()); 52 EXPECT_EQ(expected->beta(), orientation->beta());
43 if (expected.can_provide_gamma()) 53 if (expected->can_provide_gamma())
44 EXPECT_EQ(expected.gamma(), orientation.gamma()); 54 EXPECT_EQ(expected->gamma(), orientation->gamma());
45 if (expected.can_provide_absolute()) 55 if (expected->can_provide_absolute())
46 EXPECT_EQ(expected.absolute(), orientation.absolute()); 56 EXPECT_EQ(expected->absolute(), orientation->absolute());
47 57
48 --(*expectations_count_ptr_); 58 --(*expectations_count_ptr_);
49 59
50 if (*expectations_count_ptr_ == 0) { 60 if (*expectations_count_ptr_ == 0) {
51 MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure()); 61 MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
52 } 62 }
53 } 63 }
54 64
55 void AddExpectation(const Orientation& orientation) { 65 void AddExpectation(const Orientation* orientation) {
56 expectations_queue_.push(orientation); 66 scoped_refptr<const Orientation> expected_orientation(orientation);
67 expectations_queue_.push(expected_orientation);
57 ++(*expectations_count_ptr_); 68 ++(*expectations_count_ptr_);
58 } 69 }
59 70
60 private: 71 private:
61 // Set up by the test fixture, which then blocks while it is accessed 72 // Set up by the test fixture, which then blocks while it is accessed
62 // from OnOrientationUpdate which is executed on the test fixture's 73 // from OnOrientationUpdate which is executed on the test fixture's
63 // message_loop_. 74 // message_loop_.
64 int* expectations_count_ptr_; 75 int* expectations_count_ptr_;
65 std::queue<Orientation> expectations_queue_; 76 std::queue<scoped_refptr<const Orientation> > expectations_queue_;
66 }; 77 };
67 78
68 // Class for injecting test orientation data into the Provider. 79 // Class for injecting test orientation data into the Provider.
69 class MockOrientationFactory : public base::RefCounted<MockOrientationFactory> { 80 class MockOrientationFactory : public base::RefCounted<MockOrientationFactory> {
70 public: 81 public:
71 MockOrientationFactory() 82 MockOrientationFactory()
72 : is_failing_(false) { 83 : is_failing_(false) {
73 EXPECT_FALSE(instance_); 84 EXPECT_FALSE(instance_);
74 instance_ = this; 85 instance_ = this;
75 } 86 }
76 87
77 static DataFetcher* CreateDataFetcher() { 88 static DataFetcher* CreateDataFetcher() {
78 EXPECT_TRUE(instance_); 89 EXPECT_TRUE(instance_);
79 return new MockDataFetcher(instance_); 90 return new MockDataFetcher(instance_);
80 } 91 }
81 92
82 void SetOrientation(const Orientation& orientation) { 93 void SetOrientation(const Orientation* orientation) {
83 base::AutoLock auto_lock(lock_); 94 base::AutoLock auto_lock(lock_);
84 orientation_ = orientation; 95 orientation_ = orientation;
85 } 96 }
86 97
87 void SetFailing(bool is_failing) { 98 void SetFailing(bool is_failing) {
88 base::AutoLock auto_lock(lock_); 99 base::AutoLock auto_lock(lock_);
89 is_failing_ = is_failing; 100 is_failing_ = is_failing;
90 } 101 }
91 102
92 private: 103 private:
93 friend class base::RefCounted<MockOrientationFactory>; 104 friend class base::RefCounted<MockOrientationFactory>;
94 105
95 ~MockOrientationFactory() { 106 ~MockOrientationFactory() {
96 instance_ = NULL; 107 instance_ = NULL;
97 } 108 }
98 109
99 // Owned by ProviderImpl. Holds a reference back to MockOrientationFactory. 110 // Owned by ProviderImpl. Holds a reference back to MockOrientationFactory.
100 class MockDataFetcher : public DataFetcher { 111 class MockDataFetcher : public DataFetcher {
101 public: 112 public:
102 explicit MockDataFetcher(MockOrientationFactory* orientation_factory) 113 explicit MockDataFetcher(MockOrientationFactory* orientation_factory)
103 : orientation_factory_(orientation_factory) { } 114 : orientation_factory_(orientation_factory) { }
104 115
105 // From DataFetcher. Called by the Provider. 116 // From DataFetcher. Called by the Provider.
106 virtual bool GetOrientation(Orientation* orientation) { 117 virtual const DeviceData* GetDeviceData(DeviceData::Type device_data_type) {
107 base::AutoLock auto_lock(orientation_factory_->lock_); 118 base::AutoLock auto_lock(orientation_factory_->lock_);
108 if (orientation_factory_->is_failing_) 119 if (orientation_factory_->is_failing_)
109 return false; 120 return NULL;
110 *orientation = orientation_factory_->orientation_; 121 return orientation_factory_->orientation_;
111 return true;
112 } 122 }
113 123
114 private: 124 private:
115 scoped_refptr<MockOrientationFactory> orientation_factory_; 125 scoped_refptr<MockOrientationFactory> orientation_factory_;
116 }; 126 };
117 127
118 static MockOrientationFactory* instance_; 128 static MockOrientationFactory* instance_;
119 Orientation orientation_; 129 scoped_refptr<const Orientation> orientation_;
120 bool is_failing_; 130 bool is_failing_;
121 base::Lock lock_; 131 base::Lock lock_;
122 }; 132 };
123 133
124 MockOrientationFactory* MockOrientationFactory::instance_; 134 MockOrientationFactory* MockOrientationFactory::instance_;
125 135
126 // Mock DataFetcher that always fails to provide any orientation data. 136 // Mock DataFetcher that always fails to provide any orientation data.
127 class FailingDataFetcher : public DataFetcher { 137 class FailingDataFetcher : public DataFetcher {
128 public: 138 public:
129 // Factory method; passed to and called by the ProviderImpl. 139 // Factory method; passed to and called by the ProviderImpl.
130 static DataFetcher* Create() { 140 static DataFetcher* Create() {
131 return new FailingDataFetcher(); 141 return new FailingDataFetcher();
132 } 142 }
133 143
134 // From DataFetcher. 144 // From DataFetcher.
135 virtual bool GetOrientation(Orientation* orientation) { 145 virtual const DeviceData* GetDeviceData(DeviceData::Type device_data_type) {
136 return false; 146 return NULL;
137 } 147 }
138 148
139 private: 149 private:
140 FailingDataFetcher() {} 150 FailingDataFetcher() {}
141 }; 151 };
142 152
143 class DeviceOrientationProviderTest : public testing::Test { 153 class DeviceOrientationProviderTest : public testing::Test {
144 public: 154 public:
145 DeviceOrientationProviderTest() 155 DeviceOrientationProviderTest()
146 : pending_expectations_(0) { 156 : pending_expectations_(0) {
(...skipping 30 matching lines...) Expand all
177 // Provider instance under test. 187 // Provider instance under test.
178 scoped_refptr<Provider> provider_; 188 scoped_refptr<Provider> provider_;
179 189
180 // Message loop for the test thread. 190 // Message loop for the test thread.
181 MessageLoop message_loop_; 191 MessageLoop message_loop_;
182 }; 192 };
183 193
184 TEST_F(DeviceOrientationProviderTest, FailingTest) { 194 TEST_F(DeviceOrientationProviderTest, FailingTest) {
185 Init(FailingDataFetcher::Create); 195 Init(FailingDataFetcher::Create);
186 196
187 scoped_ptr<UpdateChecker> checker_a( 197 scoped_ptr<OrientationUpdateChecker> checker_a(
188 new UpdateChecker(&pending_expectations_)); 198 new OrientationUpdateChecker(&pending_expectations_));
189 scoped_ptr<UpdateChecker> checker_b( 199 scoped_ptr<OrientationUpdateChecker> checker_b(
190 new UpdateChecker(&pending_expectations_)); 200 new OrientationUpdateChecker(&pending_expectations_));
191 201
192 checker_a->AddExpectation(Orientation::Empty()); 202 checker_a->AddExpectation(new Orientation());
193 provider_->AddObserver(checker_a.get()); 203 provider_->AddObserver(checker_a.get());
194 MessageLoop::current()->Run(); 204 MessageLoop::current()->Run();
195 205
196 checker_b->AddExpectation(Orientation::Empty()); 206 checker_b->AddExpectation(new Orientation());
197 provider_->AddObserver(checker_b.get()); 207 provider_->AddObserver(checker_b.get());
198 MessageLoop::current()->Run(); 208 MessageLoop::current()->Run();
199 } 209 }
200 210
201 TEST_F(DeviceOrientationProviderTest, ProviderIsSingleton) { 211 TEST_F(DeviceOrientationProviderTest, ProviderIsSingleton) {
202 Init(FailingDataFetcher::Create); 212 Init(FailingDataFetcher::Create);
203 213
204 scoped_refptr<Provider> provider_a(Provider::GetInstance()); 214 scoped_refptr<Provider> provider_a(Provider::GetInstance());
205 scoped_refptr<Provider> provider_b(Provider::GetInstance()); 215 scoped_refptr<Provider> provider_b(Provider::GetInstance());
206 216
207 EXPECT_EQ(provider_a.get(), provider_b.get()); 217 EXPECT_EQ(provider_a.get(), provider_b.get());
208 } 218 }
209 219
210 TEST_F(DeviceOrientationProviderTest, BasicPushTest) { 220 TEST_F(DeviceOrientationProviderTest, BasicPushTest) {
211 scoped_refptr<MockOrientationFactory> orientation_factory( 221 scoped_refptr<MockOrientationFactory> orientation_factory(
212 new MockOrientationFactory()); 222 new MockOrientationFactory());
213 Init(MockOrientationFactory::CreateDataFetcher); 223 Init(MockOrientationFactory::CreateDataFetcher);
214 Orientation test_orientation; 224 scoped_refptr<Orientation> test_orientation(new Orientation());
215 test_orientation.set_alpha(1); 225 test_orientation->set_alpha(1);
216 test_orientation.set_beta(2); 226 test_orientation->set_beta(2);
217 test_orientation.set_gamma(3); 227 test_orientation->set_gamma(3);
218 test_orientation.set_absolute(true); 228 test_orientation->set_absolute(true);
219 229
220 scoped_ptr<UpdateChecker> checker(new UpdateChecker(&pending_expectations_)); 230 scoped_ptr<OrientationUpdateChecker> checker(
231 new OrientationUpdateChecker(&pending_expectations_));
221 checker->AddExpectation(test_orientation); 232 checker->AddExpectation(test_orientation);
222 orientation_factory->SetOrientation(test_orientation); 233 orientation_factory->SetOrientation(test_orientation);
223 provider_->AddObserver(checker.get()); 234 provider_->AddObserver(checker.get());
224 MessageLoop::current()->Run(); 235 MessageLoop::current()->Run();
225 236
226 provider_->RemoveObserver(checker.get()); 237 provider_->RemoveObserver(checker.get());
227 } 238 }
228 239
229 TEST_F(DeviceOrientationProviderTest, MultipleObserversPushTest) { 240 TEST_F(DeviceOrientationProviderTest, MultipleObserversPushTest) {
230 scoped_refptr<MockOrientationFactory> orientation_factory( 241 scoped_refptr<MockOrientationFactory> orientation_factory(
231 new MockOrientationFactory()); 242 new MockOrientationFactory());
232 Init(MockOrientationFactory::CreateDataFetcher); 243 Init(MockOrientationFactory::CreateDataFetcher);
233 244
234 Orientation test_orientations[] = {Orientation(), Orientation(), 245 scoped_refptr<Orientation> test_orientations[] = {new Orientation(),
235 Orientation()}; 246 new Orientation(), new Orientation()};
236 test_orientations[0].set_alpha(1); 247 test_orientations[0]->set_alpha(1);
237 test_orientations[0].set_beta(2); 248 test_orientations[0]->set_beta(2);
238 test_orientations[0].set_gamma(3); 249 test_orientations[0]->set_gamma(3);
239 test_orientations[0].set_absolute(true); 250 test_orientations[0]->set_absolute(true);
240 251
241 test_orientations[1].set_alpha(4); 252 test_orientations[1]->set_alpha(4);
242 test_orientations[1].set_beta(5); 253 test_orientations[1]->set_beta(5);
243 test_orientations[1].set_gamma(6); 254 test_orientations[1]->set_gamma(6);
244 test_orientations[1].set_absolute(false); 255 test_orientations[1]->set_absolute(false);
245 256
246 test_orientations[2].set_alpha(7); 257 test_orientations[2]->set_alpha(7);
247 test_orientations[2].set_beta(8); 258 test_orientations[2]->set_beta(8);
248 test_orientations[2].set_gamma(9); 259 test_orientations[2]->set_gamma(9);
249 // can't provide absolute 260 // can't provide absolute
250 261
251 scoped_ptr<UpdateChecker> checker_a( 262 scoped_ptr<OrientationUpdateChecker> checker_a(
252 new UpdateChecker(&pending_expectations_)); 263 new OrientationUpdateChecker(&pending_expectations_));
253 scoped_ptr<UpdateChecker> checker_b( 264 scoped_ptr<OrientationUpdateChecker> checker_b(
254 new UpdateChecker(&pending_expectations_)); 265 new OrientationUpdateChecker(&pending_expectations_));
255 scoped_ptr<UpdateChecker> checker_c( 266 scoped_ptr<OrientationUpdateChecker> checker_c(
256 new UpdateChecker(&pending_expectations_)); 267 new OrientationUpdateChecker(&pending_expectations_));
257 268
258 checker_a->AddExpectation(test_orientations[0]); 269 checker_a->AddExpectation(test_orientations[0]);
259 orientation_factory->SetOrientation(test_orientations[0]); 270 orientation_factory->SetOrientation(test_orientations[0]);
260 provider_->AddObserver(checker_a.get()); 271 provider_->AddObserver(checker_a.get());
261 MessageLoop::current()->Run(); 272 MessageLoop::current()->Run();
262 273
263 checker_a->AddExpectation(test_orientations[1]); 274 checker_a->AddExpectation(test_orientations[1]);
264 checker_b->AddExpectation(test_orientations[0]); 275 checker_b->AddExpectation(test_orientations[0]);
265 checker_b->AddExpectation(test_orientations[1]); 276 checker_b->AddExpectation(test_orientations[1]);
266 orientation_factory->SetOrientation(test_orientations[1]); 277 orientation_factory->SetOrientation(test_orientations[1]);
(...skipping 16 matching lines...) Expand all
283 // Flakily DCHECKs on Linux. See crbug.com/104950. 294 // Flakily DCHECKs on Linux. See crbug.com/104950.
284 // FLAKY on Win. See crbug.com/104950. 295 // FLAKY on Win. See crbug.com/104950.
285 #define MAYBE_ObserverNotRemoved DISABLED_ObserverNotRemoved 296 #define MAYBE_ObserverNotRemoved DISABLED_ObserverNotRemoved
286 #else 297 #else
287 #define MAYBE_ObserverNotRemoved ObserverNotRemoved 298 #define MAYBE_ObserverNotRemoved ObserverNotRemoved
288 #endif 299 #endif
289 TEST_F(DeviceOrientationProviderTest, MAYBE_ObserverNotRemoved) { 300 TEST_F(DeviceOrientationProviderTest, MAYBE_ObserverNotRemoved) {
290 scoped_refptr<MockOrientationFactory> orientation_factory( 301 scoped_refptr<MockOrientationFactory> orientation_factory(
291 new MockOrientationFactory()); 302 new MockOrientationFactory());
292 Init(MockOrientationFactory::CreateDataFetcher); 303 Init(MockOrientationFactory::CreateDataFetcher);
293 Orientation test_orientation; 304 scoped_refptr<Orientation> test_orientation(new Orientation());
294 test_orientation.set_alpha(1); 305 test_orientation->set_alpha(1);
295 test_orientation.set_beta(2); 306 test_orientation->set_beta(2);
296 test_orientation.set_gamma(3); 307 test_orientation->set_gamma(3);
297 test_orientation.set_absolute(true); 308 test_orientation->set_absolute(true);
298 309
299 Orientation test_orientation2; 310 scoped_refptr<Orientation> test_orientation2(new Orientation());
300 test_orientation2.set_alpha(4); 311 test_orientation2->set_alpha(4);
301 test_orientation2.set_beta(5); 312 test_orientation2->set_beta(5);
302 test_orientation2.set_gamma(6); 313 test_orientation2->set_gamma(6);
303 test_orientation2.set_absolute(false); 314 test_orientation2->set_absolute(false);
304 315
305 scoped_ptr<UpdateChecker> checker(new UpdateChecker(&pending_expectations_)); 316 scoped_ptr<OrientationUpdateChecker> checker(
317 new OrientationUpdateChecker(&pending_expectations_));
306 checker->AddExpectation(test_orientation); 318 checker->AddExpectation(test_orientation);
307 orientation_factory->SetOrientation(test_orientation); 319 orientation_factory->SetOrientation(test_orientation);
308 provider_->AddObserver(checker.get()); 320 provider_->AddObserver(checker.get());
309 MessageLoop::current()->Run(); 321 MessageLoop::current()->Run();
310 322
311 checker->AddExpectation(test_orientation2); 323 checker->AddExpectation(test_orientation2);
312 orientation_factory->SetOrientation(test_orientation2); 324 orientation_factory->SetOrientation(test_orientation2);
313 MessageLoop::current()->Run(); 325 MessageLoop::current()->Run();
314 326
315 // Note that checker is not removed. This should not be a problem. 327 // Note that checker is not removed. This should not be a problem.
316 } 328 }
317 329
318 #if defined(OS_WIN) 330 #if defined(OS_WIN)
319 // FLAKY on Win. See crbug.com/104950. 331 // FLAKY on Win. See crbug.com/104950.
320 #define MAYBE_StartFailing DISABLED_StartFailing 332 #define MAYBE_StartFailing DISABLED_StartFailing
321 #else 333 #else
322 #define MAYBE_StartFailing StartFailing 334 #define MAYBE_StartFailing StartFailing
323 #endif 335 #endif
324 TEST_F(DeviceOrientationProviderTest, MAYBE_StartFailing) { 336 TEST_F(DeviceOrientationProviderTest, MAYBE_StartFailing) {
325 scoped_refptr<MockOrientationFactory> orientation_factory( 337 scoped_refptr<MockOrientationFactory> orientation_factory(
326 new MockOrientationFactory()); 338 new MockOrientationFactory());
327 Init(MockOrientationFactory::CreateDataFetcher); 339 Init(MockOrientationFactory::CreateDataFetcher);
328 Orientation test_orientation; 340 scoped_refptr<Orientation> test_orientation(new Orientation());
329 test_orientation.set_alpha(1); 341 test_orientation->set_alpha(1);
330 test_orientation.set_beta(2); 342 test_orientation->set_beta(2);
331 test_orientation.set_gamma(3); 343 test_orientation->set_gamma(3);
332 test_orientation.set_absolute(true); 344 test_orientation->set_absolute(true);
333 345
334 scoped_ptr<UpdateChecker> checker_a(new UpdateChecker( 346 scoped_ptr<OrientationUpdateChecker> checker_a(new OrientationUpdateChecker(
335 &pending_expectations_)); 347 &pending_expectations_));
336 scoped_ptr<UpdateChecker> checker_b(new UpdateChecker( 348 scoped_ptr<OrientationUpdateChecker> checker_b(new OrientationUpdateChecker(
337 &pending_expectations_)); 349 &pending_expectations_));
338 350
339 orientation_factory->SetOrientation(test_orientation); 351 orientation_factory->SetOrientation(test_orientation);
340 checker_a->AddExpectation(test_orientation); 352 checker_a->AddExpectation(test_orientation);
341 provider_->AddObserver(checker_a.get()); 353 provider_->AddObserver(checker_a.get());
342 MessageLoop::current()->Run(); 354 MessageLoop::current()->Run();
343 355
344 checker_a->AddExpectation(Orientation::Empty()); 356 checker_a->AddExpectation(new Orientation());
345 orientation_factory->SetFailing(true); 357 orientation_factory->SetFailing(true);
346 MessageLoop::current()->Run(); 358 MessageLoop::current()->Run();
347 359
348 checker_b->AddExpectation(Orientation::Empty()); 360 checker_b->AddExpectation(new Orientation());
349 provider_->AddObserver(checker_b.get()); 361 provider_->AddObserver(checker_b.get());
350 MessageLoop::current()->Run(); 362 MessageLoop::current()->Run();
351 363
352 provider_->RemoveObserver(checker_a.get()); 364 provider_->RemoveObserver(checker_a.get());
353 provider_->RemoveObserver(checker_b.get()); 365 provider_->RemoveObserver(checker_b.get());
354 } 366 }
355 367
356 TEST_F(DeviceOrientationProviderTest, StartStopStart) { 368 TEST_F(DeviceOrientationProviderTest, StartStopStart) {
357 scoped_refptr<MockOrientationFactory> orientation_factory( 369 scoped_refptr<MockOrientationFactory> orientation_factory(
358 new MockOrientationFactory()); 370 new MockOrientationFactory());
359 Init(MockOrientationFactory::CreateDataFetcher); 371 Init(MockOrientationFactory::CreateDataFetcher);
360 372
361 Orientation test_orientation; 373 scoped_refptr<Orientation> test_orientation(new Orientation());
362 test_orientation.set_alpha(1); 374 test_orientation->set_alpha(1);
363 test_orientation.set_beta(2); 375 test_orientation->set_beta(2);
364 test_orientation.set_gamma(3); 376 test_orientation->set_gamma(3);
365 test_orientation.set_absolute(true); 377 test_orientation->set_absolute(true);
366 378
367 Orientation test_orientation2; 379 scoped_refptr<Orientation> test_orientation2(new Orientation());
368 test_orientation2.set_alpha(4); 380 test_orientation2->set_alpha(4);
369 test_orientation2.set_beta(5); 381 test_orientation2->set_beta(5);
370 test_orientation2.set_gamma(6); 382 test_orientation2->set_gamma(6);
371 test_orientation2.set_absolute(false); 383 test_orientation2->set_absolute(false);
372 384
373 scoped_ptr<UpdateChecker> checker_a(new UpdateChecker( 385 scoped_ptr<OrientationUpdateChecker> checker_a(new OrientationUpdateChecker(
374 &pending_expectations_)); 386 &pending_expectations_));
375 scoped_ptr<UpdateChecker> checker_b(new UpdateChecker( 387 scoped_ptr<OrientationUpdateChecker> checker_b(new OrientationUpdateChecker(
376 &pending_expectations_)); 388 &pending_expectations_));
377 389
378 checker_a->AddExpectation(test_orientation); 390 checker_a->AddExpectation(test_orientation);
379 orientation_factory->SetOrientation(test_orientation); 391 orientation_factory->SetOrientation(test_orientation);
380 provider_->AddObserver(checker_a.get()); 392 provider_->AddObserver(checker_a.get());
381 MessageLoop::current()->Run(); 393 MessageLoop::current()->Run();
382 394
383 provider_->RemoveObserver(checker_a.get()); // This stops the Provider. 395 provider_->RemoveObserver(checker_a.get()); // This stops the Provider.
384 396
385 checker_b->AddExpectation(test_orientation2); 397 checker_b->AddExpectation(test_orientation2);
386 orientation_factory->SetOrientation(test_orientation2); 398 orientation_factory->SetOrientation(test_orientation2);
387 provider_->AddObserver(checker_b.get()); 399 provider_->AddObserver(checker_b.get());
388 MessageLoop::current()->Run(); 400 MessageLoop::current()->Run();
389 401
390 provider_->RemoveObserver(checker_b.get()); 402 provider_->RemoveObserver(checker_b.get());
391 } 403 }
392 404
393 TEST_F(DeviceOrientationProviderTest, SignificantlyDifferent) { 405 TEST_F(DeviceOrientationProviderTest, SignificantlyDifferent) {
394 scoped_refptr<MockOrientationFactory> orientation_factory( 406 scoped_refptr<MockOrientationFactory> orientation_factory(
395 new MockOrientationFactory()); 407 new MockOrientationFactory());
396 Init(MockOrientationFactory::CreateDataFetcher); 408 Init(MockOrientationFactory::CreateDataFetcher);
397 409
398 // Values that should be well below or above the implementation's 410 // Values that should be well below or above the implementation's
399 // significane threshold. 411 // significane threshold.
400 const double kInsignificantDifference = 1e-6; 412 const double kInsignificantDifference = 1e-6;
401 const double kSignificantDifference = 30; 413 const double kSignificantDifference = 30;
402 const double kAlpha = 4, kBeta = 5, kGamma = 6; 414 const double kAlpha = 4, kBeta = 5, kGamma = 6;
403 415
404 Orientation first_orientation; 416 scoped_refptr<Orientation> first_orientation(new Orientation());
405 first_orientation.set_alpha(kAlpha); 417 first_orientation->set_alpha(kAlpha);
406 first_orientation.set_beta(kBeta); 418 first_orientation->set_beta(kBeta);
407 first_orientation.set_gamma(kGamma); 419 first_orientation->set_gamma(kGamma);
408 first_orientation.set_absolute(true); 420 first_orientation->set_absolute(true);
409 421
410 Orientation second_orientation; 422 scoped_refptr<Orientation> second_orientation(new Orientation());
411 second_orientation.set_alpha(kAlpha + kInsignificantDifference); 423 second_orientation->set_alpha(kAlpha + kInsignificantDifference);
412 second_orientation.set_beta(kBeta + kInsignificantDifference); 424 second_orientation->set_beta(kBeta + kInsignificantDifference);
413 second_orientation.set_gamma(kGamma + kInsignificantDifference); 425 second_orientation->set_gamma(kGamma + kInsignificantDifference);
414 second_orientation.set_absolute(false); 426 second_orientation->set_absolute(false);
415 427
416 Orientation third_orientation; 428 scoped_refptr<Orientation> third_orientation(new Orientation());
417 third_orientation.set_alpha(kAlpha + kSignificantDifference); 429 third_orientation->set_alpha(kAlpha + kSignificantDifference);
418 third_orientation.set_beta(kBeta + kSignificantDifference); 430 third_orientation->set_beta(kBeta + kSignificantDifference);
419 third_orientation.set_gamma(kGamma + kSignificantDifference); 431 third_orientation->set_gamma(kGamma + kSignificantDifference);
420 // can't provide absolute 432 // can't provide absolute
421 433
422 scoped_ptr<UpdateChecker> checker_a(new UpdateChecker( 434 scoped_ptr<OrientationUpdateChecker> checker_a(new OrientationUpdateChecker(
423 &pending_expectations_)); 435 &pending_expectations_));
424 scoped_ptr<UpdateChecker> checker_b(new UpdateChecker( 436 scoped_ptr<OrientationUpdateChecker> checker_b(new OrientationUpdateChecker(
425 &pending_expectations_)); 437 &pending_expectations_));
426 438
427
428 orientation_factory->SetOrientation(first_orientation); 439 orientation_factory->SetOrientation(first_orientation);
429 checker_a->AddExpectation(first_orientation); 440 checker_a->AddExpectation(first_orientation);
430 provider_->AddObserver(checker_a.get()); 441 provider_->AddObserver(checker_a.get());
431 MessageLoop::current()->Run(); 442 MessageLoop::current()->Run();
432 443
433 // The observers should not see this insignificantly different orientation. 444 // The observers should not see this insignificantly different orientation.
434 orientation_factory->SetOrientation(second_orientation); 445 orientation_factory->SetOrientation(second_orientation);
435 checker_b->AddExpectation(first_orientation); 446 checker_b->AddExpectation(first_orientation);
436 provider_->AddObserver(checker_b.get()); 447 provider_->AddObserver(checker_b.get());
437 MessageLoop::current()->Run(); 448 MessageLoop::current()->Run();
438 449
439 orientation_factory->SetOrientation(third_orientation); 450 orientation_factory->SetOrientation(third_orientation);
440 checker_a->AddExpectation(third_orientation); 451 checker_a->AddExpectation(third_orientation);
441 checker_b->AddExpectation(third_orientation); 452 checker_b->AddExpectation(third_orientation);
442 MessageLoop::current()->Run(); 453 MessageLoop::current()->Run();
443 454
444 provider_->RemoveObserver(checker_a.get()); 455 provider_->RemoveObserver(checker_a.get());
445 provider_->RemoveObserver(checker_b.get()); 456 provider_->RemoveObserver(checker_b.get());
446 } 457 }
447 458
448 } // namespace 459 } // namespace
449 460
450 } // namespace device_orientation 461 } // namespace device_orientation
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698