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

Side by Side Diff: blimp/engine/feature/geolocation/blimp_location_provider_unittest.cc

Issue 2328453003: Makes use of EngineGeolocationFeature weak_ptr threadsafe. (Closed)
Patch Set: Addresses kmarshall's #3 comments. Created 4 years, 3 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "blimp/engine/feature/geolocation/blimp_location_provider.h" 5 #include "blimp/engine/feature/geolocation/blimp_location_provider.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "base/message_loop/message_loop.h"
13 #include "base/run_loop.h"
14 #include "base/threading/thread_task_runner_handle.h"
12 #include "blimp/engine/feature/geolocation/mock_blimp_location_provider_delegate .h" 15 #include "blimp/engine/feature/geolocation/mock_blimp_location_provider_delegate .h"
13 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
15 18
16 using testing::_; 19 using testing::_;
17 using testing::SaveArg;
18 20
19 namespace blimp { 21 namespace blimp {
20 namespace engine { 22 namespace engine {
21 23
22 class BlimpLocationProviderTest : public testing::Test { 24 class BlimpLocationProviderTest : public testing::Test {
23 public: 25 public:
24 BlimpLocationProviderTest() 26 BlimpLocationProviderTest()
25 : mock_callback_(base::Bind(&BlimpLocationProviderTest::OnLocationUpdate, 27 : mock_callback_(base::Bind(&BlimpLocationProviderTest::OnLocationUpdate,
26 base::Unretained(this))), 28 base::Unretained(this))),
27 delegate_(base::WrapUnique(new MockBlimpLocationProviderDelegate)), 29 delegate_(base::WrapUnique(new MockBlimpLocationProviderDelegate)),
28 location_provider_(new BlimpLocationProvider(delegate_->GetWeakPtr())) { 30 location_provider_(base::MakeUnique<BlimpLocationProvider>(
29 } 31 delegate_->GetWeakPtr(),
32 base::ThreadTaskRunnerHandle::Get())) {}
30 33
31 void SetUp() override {} 34 void SetUp() override {}
32 35
36 void TearDown() override {
37 location_provider_.reset();
38 base::RunLoop().RunUntilIdle();
39 }
40
33 MOCK_METHOD2(OnLocationUpdate, 41 MOCK_METHOD2(OnLocationUpdate,
34 void(const device::LocationProvider* provider, 42 void(const device::LocationProvider* provider,
35 const device::Geoposition& geoposition)); 43 const device::Geoposition& geoposition));
36 44
37 protected: 45 protected:
46 const base::MessageLoop loop_;
38 device::LocationProvider::LocationProviderUpdateCallback mock_callback_; 47 device::LocationProvider::LocationProviderUpdateCallback mock_callback_;
39 std::unique_ptr<MockBlimpLocationProviderDelegate> delegate_; 48 std::unique_ptr<MockBlimpLocationProviderDelegate> delegate_;
40 std::unique_ptr<BlimpLocationProvider> location_provider_; 49 std::unique_ptr<BlimpLocationProvider> location_provider_;
41 50
42 private: 51 private:
43 DISALLOW_COPY_AND_ASSIGN(BlimpLocationProviderTest); 52 DISALLOW_COPY_AND_ASSIGN(BlimpLocationProviderTest);
44 }; 53 };
45 54
46 TEST_F(BlimpLocationProviderTest, StartProviderRunsCorrectly) { 55 TEST_F(BlimpLocationProviderTest, StartProviderRunsCorrectly) {
47 EXPECT_CALL( 56 EXPECT_CALL(
48 *delegate_, 57 *delegate_,
49 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY)) 58 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
50 .Times(1); 59 .Times(1);
51 EXPECT_CALL(*delegate_, 60 EXPECT_CALL(*delegate_,
52 RequestAccuracy(GeolocationSetInterestLevelMessage::LOW_ACCURACY)) 61 RequestAccuracy(GeolocationSetInterestLevelMessage::LOW_ACCURACY))
53 .Times(1); 62 .Times(1);
54 63
55 // BlimpLocationProvider implicitly stops on teardown, if it was started. 64 // BlimpLocationProvider implicitly stops on teardown, if it was started.
56 EXPECT_CALL(*delegate_, 65 EXPECT_CALL(*delegate_,
57 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST)) 66 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST))
58 .Times(1); 67 .Times(1);
59 68
60 EXPECT_TRUE(location_provider_->StartProvider(true)); 69 EXPECT_TRUE(location_provider_->StartProvider(true));
61 EXPECT_TRUE(location_provider_->StartProvider(false)); 70 EXPECT_TRUE(location_provider_->StartProvider(false));
62 } 71 }
63 72
64 TEST_F(BlimpLocationProviderTest, StartProviderHandlesNullDelegate) {
65 EXPECT_CALL(*delegate_, RequestAccuracy(_)).Times(0);
66
67 delegate_.reset();
68 EXPECT_FALSE(location_provider_->StartProvider(true));
69 EXPECT_FALSE(location_provider_->StartProvider(false));
70 }
71
72 TEST_F(BlimpLocationProviderTest, StopProviderRunsCorrectly) { 73 TEST_F(BlimpLocationProviderTest, StopProviderRunsCorrectly) {
73 EXPECT_CALL( 74 EXPECT_CALL(
74 *delegate_, 75 *delegate_,
75 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY)) 76 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
76 .Times(1); 77 .Times(1);
77 EXPECT_CALL(*delegate_, 78 EXPECT_CALL(*delegate_,
78 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST)) 79 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST))
79 .Times(1); 80 .Times(1);
80 81
81 location_provider_->StartProvider(true); 82 location_provider_->StartProvider(true);
82 location_provider_->StopProvider(); 83 location_provider_->StopProvider();
83 } 84 }
84 85
85 TEST_F(BlimpLocationProviderTest, StopProviderHandlesNullDelegate) {
86 EXPECT_CALL(
87 *delegate_,
88 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
89 .Times(1);
90
91 location_provider_->StartProvider(true);
92 delegate_.reset();
93 location_provider_->StopProvider();
94 }
95
96 TEST_F(BlimpLocationProviderTest, LocationProviderDeleted) { 86 TEST_F(BlimpLocationProviderTest, LocationProviderDeleted) {
97 EXPECT_CALL( 87 EXPECT_CALL(
98 *delegate_, 88 *delegate_,
99 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY)) 89 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
100 .Times(1); 90 .Times(1);
101 EXPECT_CALL(*delegate_, 91 EXPECT_CALL(*delegate_,
102 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST)) 92 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST))
103 .Times(1); 93 .Times(1);
104 94
105 location_provider_->StartProvider(true); 95 location_provider_->StartProvider(true);
106 location_provider_.reset(); 96 location_provider_.reset();
107 } 97 }
108 98
109 TEST_F(BlimpLocationProviderTest, OnPermissionGranted) { 99 TEST_F(BlimpLocationProviderTest, OnPermissionGranted) {
110 EXPECT_CALL(*delegate_, OnPermissionGranted()).Times(1); 100 EXPECT_CALL(*delegate_, OnPermissionGranted()).Times(1);
101 EXPECT_CALL(
102 *delegate_,
103 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
104 .Times(1);
105 EXPECT_CALL(*delegate_,
106 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST))
107 .Times(1);
111 108
112 location_provider_->StartProvider(true); 109 location_provider_->StartProvider(true);
113 location_provider_->OnPermissionGranted(); 110 location_provider_->OnPermissionGranted();
114 } 111 }
115 112
116 TEST_F(BlimpLocationProviderTest, OnPermissionGrantedHandlesNullDelegate) {
Wez 2016/09/13 20:19:07 We still want these tests, don't we, even if we ar
CJ 2016/09/13 23:34:03 Done.
117 EXPECT_CALL(*delegate_, OnPermissionGranted()).Times(0);
118
119 location_provider_->StartProvider(true);
120 delegate_.reset();
121 location_provider_->OnPermissionGranted();
122 }
123
124 TEST_F(BlimpLocationProviderTest, SetUpdateCallbackPropagatesCallback) { 113 TEST_F(BlimpLocationProviderTest, SetUpdateCallbackPropagatesCallback) {
125 base::Callback<void(const device::Geoposition&)> callback; 114 base::Callback<void(const device::Geoposition&)> callback;
126 EXPECT_CALL(*delegate_, SetUpdateCallback(_)).WillOnce(SaveArg<0>(&callback)); 115 EXPECT_CALL(*delegate_, SetUpdateCallback(_));
127 EXPECT_CALL(*this, OnLocationUpdate(location_provider_.get(), _)).Times(1);
128 116
129 location_provider_->SetUpdateCallback(mock_callback_); 117 location_provider_->SetUpdateCallback(mock_callback_);
130 callback.Run(device::Geoposition());
131 }
132
133 TEST_F(BlimpLocationProviderTest, SetUpdateCallbackHandlesNullDelegate) {
134 EXPECT_CALL(*delegate_, SetUpdateCallback(_)).Times(0);
135
136 delegate_.reset();
137 location_provider_->SetUpdateCallback(mock_callback_);
138 } 118 }
139 119
140 } // namespace engine 120 } // namespace engine
141 } // namespace blimp 121 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698