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

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: Merge branch 'master' into threadmess Created 4 years, 2 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
19 using testing::SaveArg;
16 using testing::_; 20 using testing::_;
17 using testing::SaveArg;
18 21
19 namespace blimp { 22 namespace blimp {
20 namespace engine { 23 namespace engine {
21 24
22 class BlimpLocationProviderTest : public testing::Test { 25 class BlimpLocationProviderTest : public testing::Test {
23 public: 26 public:
24 BlimpLocationProviderTest() 27 BlimpLocationProviderTest()
25 : mock_callback_(base::Bind(&BlimpLocationProviderTest::OnLocationUpdate, 28 : mock_callback_(base::Bind(&BlimpLocationProviderTest::OnLocationUpdate,
26 base::Unretained(this))), 29 base::Unretained(this))),
27 delegate_(base::WrapUnique(new MockBlimpLocationProviderDelegate)), 30 delegate_(base::WrapUnique(new MockBlimpLocationProviderDelegate)),
28 location_provider_(new BlimpLocationProvider(delegate_->GetWeakPtr())) { 31 location_provider_(base::MakeUnique<BlimpLocationProvider>(
32 delegate_->GetWeakPtr(),
33 base::ThreadTaskRunnerHandle::Get())) {}
34
35 void SetUp() override { callback_called_ = false; }
36
37 void TearDown() override {
38 location_provider_.reset();
39 base::RunLoop().RunUntilIdle();
29 } 40 }
30 41
31 void SetUp() override {} 42 void OnLocationUpdate(const device::LocationProvider* provider,
32 43 const device::Geoposition& geoposition) {
33 MOCK_METHOD2(OnLocationUpdate, 44 callback_called_ = true;
34 void(const device::LocationProvider* provider, 45 }
35 const device::Geoposition& geoposition));
36 46
37 protected: 47 protected:
48 const base::MessageLoop loop_;
38 device::LocationProvider::LocationProviderUpdateCallback mock_callback_; 49 device::LocationProvider::LocationProviderUpdateCallback mock_callback_;
39 std::unique_ptr<MockBlimpLocationProviderDelegate> delegate_; 50 std::unique_ptr<MockBlimpLocationProviderDelegate> delegate_;
40 std::unique_ptr<BlimpLocationProvider> location_provider_; 51 std::unique_ptr<BlimpLocationProvider> location_provider_;
52 bool callback_called_ = false;
Wez 2016/10/07 21:42:46 nit: Suggest on_location_update_called_ for clarit
CJ 2016/10/08 00:05:56 Done.
41 53
42 private: 54 private:
43 DISALLOW_COPY_AND_ASSIGN(BlimpLocationProviderTest); 55 DISALLOW_COPY_AND_ASSIGN(BlimpLocationProviderTest);
44 }; 56 };
45 57
46 TEST_F(BlimpLocationProviderTest, StartProviderRunsCorrectly) { 58 TEST_F(BlimpLocationProviderTest, StartProviderRunsCorrectly) {
47 EXPECT_CALL( 59 EXPECT_CALL(
48 *delegate_, 60 *delegate_,
49 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY)) 61 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
50 .Times(1); 62 .Times(1);
51 EXPECT_CALL(*delegate_, 63 EXPECT_CALL(*delegate_,
52 RequestAccuracy(GeolocationSetInterestLevelMessage::LOW_ACCURACY)) 64 RequestAccuracy(GeolocationSetInterestLevelMessage::LOW_ACCURACY))
53 .Times(1); 65 .Times(1);
54 66
55 // BlimpLocationProvider implicitly stops on teardown, if it was started. 67 // BlimpLocationProvider implicitly stops on teardown, if it was started.
56 EXPECT_CALL(*delegate_, 68 EXPECT_CALL(*delegate_,
57 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST)) 69 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST))
58 .Times(1); 70 .Times(1);
59 71
60 EXPECT_TRUE(location_provider_->StartProvider(true)); 72 EXPECT_TRUE(location_provider_->StartProvider(true));
61 EXPECT_TRUE(location_provider_->StartProvider(false)); 73 EXPECT_TRUE(location_provider_->StartProvider(false));
74 base::RunLoop().RunUntilIdle();
62 } 75 }
63 76
64 TEST_F(BlimpLocationProviderTest, StartProviderHandlesNullDelegate) { 77 TEST_F(BlimpLocationProviderTest, StartProviderHandlesNullDelegate) {
65 EXPECT_CALL(*delegate_, RequestAccuracy(_)).Times(0); 78 EXPECT_CALL(*delegate_, RequestAccuracy(_)).Times(0);
66 79
67 delegate_.reset(); 80 delegate_.reset();
68 EXPECT_FALSE(location_provider_->StartProvider(true)); 81 location_provider_->StartProvider(true);
69 EXPECT_FALSE(location_provider_->StartProvider(false)); 82 location_provider_->StartProvider(false);
83 base::RunLoop().RunUntilIdle();
70 } 84 }
71 85
72 TEST_F(BlimpLocationProviderTest, StopProviderRunsCorrectly) { 86 TEST_F(BlimpLocationProviderTest, StopProviderRunsCorrectly) {
73 EXPECT_CALL( 87 EXPECT_CALL(
74 *delegate_, 88 *delegate_,
75 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY)) 89 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
76 .Times(1); 90 .Times(1);
77 EXPECT_CALL(*delegate_, 91 EXPECT_CALL(*delegate_,
78 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST)) 92 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST))
79 .Times(1); 93 .Times(1);
80 94
81 location_provider_->StartProvider(true); 95 location_provider_->StartProvider(true);
82 location_provider_->StopProvider(); 96 location_provider_->StopProvider();
97 base::RunLoop().RunUntilIdle();
83 } 98 }
84 99
85 TEST_F(BlimpLocationProviderTest, StopProviderHandlesNullDelegate) { 100 TEST_F(BlimpLocationProviderTest, StopProviderHandlesNullDelegate) {
86 EXPECT_CALL( 101 EXPECT_CALL(
87 *delegate_, 102 *delegate_,
88 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY)) 103 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
89 .Times(1); 104 .Times(1);
90 105
91 location_provider_->StartProvider(true); 106 location_provider_->StartProvider(true);
107 base::RunLoop().RunUntilIdle();
92 delegate_.reset(); 108 delegate_.reset();
93 location_provider_->StopProvider(); 109 location_provider_->StopProvider();
110 base::RunLoop().RunUntilIdle();
94 } 111 }
95 112
96 TEST_F(BlimpLocationProviderTest, LocationProviderDeleted) { 113 TEST_F(BlimpLocationProviderTest, LocationProviderDeleted) {
97 EXPECT_CALL( 114 EXPECT_CALL(
98 *delegate_, 115 *delegate_,
99 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY)) 116 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
100 .Times(1); 117 .Times(1);
101 EXPECT_CALL(*delegate_, 118 EXPECT_CALL(*delegate_,
102 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST)) 119 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST))
103 .Times(1); 120 .Times(1);
104 121
105 location_provider_->StartProvider(true); 122 location_provider_->StartProvider(true);
106 location_provider_.reset(); 123 location_provider_.reset();
124 base::RunLoop().RunUntilIdle();
107 } 125 }
108 126
109 TEST_F(BlimpLocationProviderTest, OnPermissionGranted) { 127 TEST_F(BlimpLocationProviderTest, OnPermissionGranted) {
110 EXPECT_CALL(*delegate_, OnPermissionGranted()).Times(1); 128 EXPECT_CALL(*delegate_, OnPermissionGranted()).Times(1);
129 EXPECT_CALL(
130 *delegate_,
131 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
132 .Times(1);
133 EXPECT_CALL(*delegate_,
134 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST))
135 .Times(1);
111 136
112 location_provider_->StartProvider(true); 137 location_provider_->StartProvider(true);
113 location_provider_->OnPermissionGranted(); 138 location_provider_->OnPermissionGranted();
139 base::RunLoop().RunUntilIdle();
114 } 140 }
115 141
116 TEST_F(BlimpLocationProviderTest, OnPermissionGrantedHandlesNullDelegate) { 142 TEST_F(BlimpLocationProviderTest, OnPermissionGrantedHandlesNullDelegate) {
117 EXPECT_CALL(*delegate_, OnPermissionGranted()).Times(0); 143 EXPECT_CALL(
144 *delegate_,
145 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
146 .Times(1);
118 147
119 location_provider_->StartProvider(true); 148 location_provider_->StartProvider(true);
149 base::RunLoop().RunUntilIdle();
120 delegate_.reset(); 150 delegate_.reset();
121 location_provider_->OnPermissionGranted(); 151 location_provider_->OnPermissionGranted();
152 base::RunLoop().RunUntilIdle();
122 } 153 }
123 154
124 TEST_F(BlimpLocationProviderTest, SetUpdateCallbackPropagatesCallback) { 155 TEST_F(BlimpLocationProviderTest, SetUpdateCallbackPropagatesCallback) {
156 EXPECT_CALL(*delegate_, SetUpdateCallback(_));
157
158 location_provider_->SetUpdateCallback(mock_callback_);
159 base::RunLoop().RunUntilIdle();
160 }
161
162 TEST_F(BlimpLocationProviderTest, NoCallbackWhenProviderDeleted) {
125 base::Callback<void(const device::Geoposition&)> callback; 163 base::Callback<void(const device::Geoposition&)> callback;
126 EXPECT_CALL(*delegate_, SetUpdateCallback(_)).WillOnce(SaveArg<0>(&callback)); 164 EXPECT_CALL(*delegate_, SetUpdateCallback(_)).WillOnce(SaveArg<0>(&callback));
127 EXPECT_CALL(*this, OnLocationUpdate(location_provider_.get(), _)).Times(1); 165 location_provider_->SetUpdateCallback(mock_callback_);
166 base::RunLoop().RunUntilIdle();
128 167
129 location_provider_->SetUpdateCallback(mock_callback_); 168 location_provider_.reset();
130 callback.Run(device::Geoposition()); 169 device::Geoposition position;
170 callback.Run(position);
171 EXPECT_FALSE(callback_called_);
Wez 2016/10/07 21:42:46 nit: Do you ever EXPECT_TRUE(callback_called_) in
CJ 2016/10/08 00:05:56 Done.
131 } 172 }
132 173
133 TEST_F(BlimpLocationProviderTest, SetUpdateCallbackHandlesNullDelegate) { 174 TEST_F(BlimpLocationProviderTest, SetUpdateCallbackHandlesNullDelegate) {
134 EXPECT_CALL(*delegate_, SetUpdateCallback(_)).Times(0); 175 EXPECT_CALL(*delegate_, SetUpdateCallback(_)).Times(0);
135 176
136 delegate_.reset(); 177 delegate_.reset();
137 location_provider_->SetUpdateCallback(mock_callback_); 178 location_provider_->SetUpdateCallback(mock_callback_);
179 base::RunLoop().RunUntilIdle();
138 } 180 }
139 181
140 } // namespace engine 182 } // namespace engine
141 } // namespace blimp 183 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698