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

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 Wez's #9 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(
(...skipping 10 matching lines...) Expand all
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) { 73 TEST_F(BlimpLocationProviderTest, StartProviderHandlesNullDelegate) {
65 EXPECT_CALL(*delegate_, RequestAccuracy(_)).Times(0); 74 EXPECT_CALL(*delegate_, RequestAccuracy(_)).Times(0);
66 75
67 delegate_.reset(); 76 delegate_.reset();
68 EXPECT_FALSE(location_provider_->StartProvider(true)); 77 location_provider_->StartProvider(true);
69 EXPECT_FALSE(location_provider_->StartProvider(false)); 78 location_provider_->StartProvider(false);
70 } 79 }
71 80
72 TEST_F(BlimpLocationProviderTest, StopProviderRunsCorrectly) { 81 TEST_F(BlimpLocationProviderTest, StopProviderRunsCorrectly) {
73 EXPECT_CALL( 82 EXPECT_CALL(
74 *delegate_, 83 *delegate_,
75 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY)) 84 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
76 .Times(1); 85 .Times(1);
77 EXPECT_CALL(*delegate_, 86 EXPECT_CALL(*delegate_,
78 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST)) 87 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST))
79 .Times(1); 88 .Times(1);
80 89
81 location_provider_->StartProvider(true); 90 location_provider_->StartProvider(true);
82 location_provider_->StopProvider(); 91 location_provider_->StopProvider();
83 } 92 }
84 93
85 TEST_F(BlimpLocationProviderTest, StopProviderHandlesNullDelegate) { 94 TEST_F(BlimpLocationProviderTest, StopProviderHandlesNullDelegate) {
86 EXPECT_CALL( 95 EXPECT_CALL(
87 *delegate_, 96 *delegate_,
88 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY)) 97 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
89 .Times(1); 98 .Times(1);
90 99
91 location_provider_->StartProvider(true); 100 location_provider_->StartProvider(true);
101 base::RunLoop().RunUntilIdle();
92 delegate_.reset(); 102 delegate_.reset();
93 location_provider_->StopProvider(); 103 location_provider_->StopProvider();
94 } 104 }
95 105
96 TEST_F(BlimpLocationProviderTest, LocationProviderDeleted) { 106 TEST_F(BlimpLocationProviderTest, LocationProviderDeleted) {
97 EXPECT_CALL( 107 EXPECT_CALL(
98 *delegate_, 108 *delegate_,
99 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY)) 109 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
100 .Times(1); 110 .Times(1);
101 EXPECT_CALL(*delegate_, 111 EXPECT_CALL(*delegate_,
102 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST)) 112 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST))
103 .Times(1); 113 .Times(1);
104 114
105 location_provider_->StartProvider(true); 115 location_provider_->StartProvider(true);
106 location_provider_.reset(); 116 location_provider_.reset();
107 } 117 }
108 118
109 TEST_F(BlimpLocationProviderTest, OnPermissionGranted) { 119 TEST_F(BlimpLocationProviderTest, OnPermissionGranted) {
110 EXPECT_CALL(*delegate_, OnPermissionGranted()).Times(1); 120 EXPECT_CALL(*delegate_, OnPermissionGranted()).Times(1);
121 EXPECT_CALL(
122 *delegate_,
123 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
124 .Times(1);
125 EXPECT_CALL(*delegate_,
126 RequestAccuracy(GeolocationSetInterestLevelMessage::NO_INTEREST))
127 .Times(1);
111 128
112 location_provider_->StartProvider(true); 129 location_provider_->StartProvider(true);
113 location_provider_->OnPermissionGranted(); 130 location_provider_->OnPermissionGranted();
114 } 131 }
115 132
116 TEST_F(BlimpLocationProviderTest, OnPermissionGrantedHandlesNullDelegate) { 133 TEST_F(BlimpLocationProviderTest, OnPermissionGrantedHandlesNullDelegate) {
117 EXPECT_CALL(*delegate_, OnPermissionGranted()).Times(0); 134 EXPECT_CALL(
135 *delegate_,
136 RequestAccuracy(GeolocationSetInterestLevelMessage::HIGH_ACCURACY))
137 .Times(1);
118 138
119 location_provider_->StartProvider(true); 139 location_provider_->StartProvider(true);
140 base::RunLoop().RunUntilIdle();
120 delegate_.reset(); 141 delegate_.reset();
121 location_provider_->OnPermissionGranted(); 142 location_provider_->OnPermissionGranted();
122 } 143 }
123 144
124 TEST_F(BlimpLocationProviderTest, SetUpdateCallbackPropagatesCallback) { 145 TEST_F(BlimpLocationProviderTest, SetUpdateCallbackPropagatesCallback) {
125 base::Callback<void(const device::Geoposition&)> callback; 146 base::Callback<void(const device::Geoposition&)> callback;
126 EXPECT_CALL(*delegate_, SetUpdateCallback(_)).WillOnce(SaveArg<0>(&callback)); 147 EXPECT_CALL(*delegate_, SetUpdateCallback(_));
127 EXPECT_CALL(*this, OnLocationUpdate(location_provider_.get(), _)).Times(1);
128 148
129 location_provider_->SetUpdateCallback(mock_callback_); 149 location_provider_->SetUpdateCallback(mock_callback_);
130 callback.Run(device::Geoposition());
131 } 150 }
132 151
133 TEST_F(BlimpLocationProviderTest, SetUpdateCallbackHandlesNullDelegate) { 152 TEST_F(BlimpLocationProviderTest, SetUpdateCallbackHandlesNullDelegate) {
134 EXPECT_CALL(*delegate_, SetUpdateCallback(_)).Times(0); 153 EXPECT_CALL(*delegate_, SetUpdateCallback(_)).Times(0);
135 154
136 delegate_.reset(); 155 delegate_.reset();
137 location_provider_->SetUpdateCallback(mock_callback_); 156 location_provider_->SetUpdateCallback(mock_callback_);
138 } 157 }
139 158
140 } // namespace engine 159 } // namespace engine
141 } // namespace blimp 160 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698