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

Side by Side Diff: content/browser/geolocation/gps_location_provider_unittest_linux.cc

Issue 10316007: Make the Geoposition helper class public (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix forward-declaration of struct as class. Created 8 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
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 "content/browser/browser_thread_impl.h" 5 #include "content/browser/browser_thread_impl.h"
6 #include "content/browser/geolocation/gps_location_provider_linux.h" 6 #include "content/browser/geolocation/gps_location_provider_linux.h"
7 #include "content/browser/geolocation/libgps_wrapper_linux.h" 7 #include "content/browser/geolocation/libgps_wrapper_linux.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 11
12 using content::BrowserThread; 12 using content::BrowserThread;
13 using content::BrowserThreadImpl; 13 using content::BrowserThreadImpl;
14 14
15 namespace { 15 namespace {
16 class MockLibGps : public LibGps { 16 class MockLibGps : public LibGps {
17 public: 17 public:
18 MockLibGps(); 18 MockLibGps();
19 ~MockLibGps(); 19 ~MockLibGps();
20 20
21 virtual bool GetPositionIfFixed(Geoposition* position) { 21 virtual bool GetPositionIfFixed(content::Geoposition* position) {
22 CHECK(position); 22 CHECK(position);
23 ++get_position_calls_; 23 ++get_position_calls_;
24 *position = get_position_; 24 *position = get_position_;
25 return get_position_ret_; 25 return get_position_ret_;
26 } 26 }
27 27
28 static int gps_open_stub(const char*, const char*, struct gps_data_t*) { 28 static int gps_open_stub(const char*, const char*, struct gps_data_t*) {
29 CHECK(g_instance_); 29 CHECK(g_instance_);
30 g_instance_->gps_open_calls_++; 30 g_instance_->gps_open_calls_++;
31 return g_instance_->gps_open_ret_; 31 return g_instance_->gps_open_ret_;
32 } 32 }
33 33
34 static int gps_close_stub(struct gps_data_t*) { 34 static int gps_close_stub(struct gps_data_t*) {
35 return 0; 35 return 0;
36 } 36 }
37 37
38 static int gps_read_stub(struct gps_data_t*) { 38 static int gps_read_stub(struct gps_data_t*) {
39 CHECK(g_instance_); 39 CHECK(g_instance_);
40 g_instance_->gps_read_calls_++; 40 g_instance_->gps_read_calls_++;
41 return g_instance_->gps_read_ret_; 41 return g_instance_->gps_read_ret_;
42 } 42 }
43 43
44 int get_position_calls_; 44 int get_position_calls_;
45 bool get_position_ret_; 45 bool get_position_ret_;
46 int gps_open_calls_; 46 int gps_open_calls_;
47 int gps_open_ret_; 47 int gps_open_ret_;
48 int gps_read_calls_; 48 int gps_read_calls_;
49 int gps_read_ret_; 49 int gps_read_ret_;
50 Geoposition get_position_; 50 content::Geoposition get_position_;
51 static MockLibGps* g_instance_; 51 static MockLibGps* g_instance_;
52 }; 52 };
53 53
54 class LocaionProviderListenerLoopQuitter 54 class LocaionProviderListenerLoopQuitter
55 : public LocationProviderBase::ListenerInterface { 55 : public LocationProviderBase::ListenerInterface {
56 // LocationProviderBase::ListenerInterface 56 // LocationProviderBase::ListenerInterface
57 virtual void LocationUpdateAvailable(LocationProviderBase* provider) { 57 virtual void LocationUpdateAvailable(LocationProviderBase* provider) {
58 MessageLoop::current()->Quit(); 58 MessageLoop::current()->Quit();
59 } 59 }
60 }; 60 };
(...skipping 10 matching lines...) Expand all
71 return NULL; 71 return NULL;
72 } 72 }
73 73
74 protected: 74 protected:
75 MessageLoop message_loop_; 75 MessageLoop message_loop_;
76 BrowserThreadImpl ui_thread_; 76 BrowserThreadImpl ui_thread_;
77 LocaionProviderListenerLoopQuitter location_listener_; 77 LocaionProviderListenerLoopQuitter location_listener_;
78 scoped_ptr<GpsLocationProviderLinux> provider_; 78 scoped_ptr<GpsLocationProviderLinux> provider_;
79 }; 79 };
80 80
81 void CheckValidPosition(const Geoposition& expected, 81 void CheckValidPosition(const content::Geoposition& expected,
82 const Geoposition& actual) { 82 const content::Geoposition& actual) {
83 EXPECT_TRUE(actual.IsValidFix()); 83 EXPECT_TRUE(actual.Validate());
84 EXPECT_DOUBLE_EQ(expected.latitude, actual.latitude); 84 EXPECT_DOUBLE_EQ(expected.latitude, actual.latitude);
85 EXPECT_DOUBLE_EQ(expected.longitude, actual.longitude); 85 EXPECT_DOUBLE_EQ(expected.longitude, actual.longitude);
86 EXPECT_DOUBLE_EQ(expected.accuracy, actual.accuracy); 86 EXPECT_DOUBLE_EQ(expected.accuracy, actual.accuracy);
87 } 87 }
88 88
89 MockLibGps* MockLibGps::g_instance_ = NULL; 89 MockLibGps* MockLibGps::g_instance_ = NULL;
90 90
91 MockLibGps::MockLibGps() 91 MockLibGps::MockLibGps()
92 : LibGps(NULL, gps_open_stub, gps_close_stub, gps_read_stub), 92 : LibGps(NULL, gps_open_stub, gps_close_stub, gps_read_stub),
93 get_position_calls_(0), 93 get_position_calls_(0),
94 get_position_ret_(true), 94 get_position_ret_(true),
95 gps_open_calls_(0), 95 gps_open_calls_(0),
96 gps_open_ret_(0), 96 gps_open_ret_(0),
97 gps_read_calls_(0), 97 gps_read_calls_(0),
98 gps_read_ret_(0) { 98 gps_read_ret_(0) {
99 get_position_.error_code = Geoposition::ERROR_CODE_POSITION_UNAVAILABLE; 99 get_position_.error_code =
100 content::Geoposition::ERROR_CODE_POSITION_UNAVAILABLE;
100 EXPECT_FALSE(g_instance_); 101 EXPECT_FALSE(g_instance_);
101 g_instance_ = this; 102 g_instance_ = this;
102 } 103 }
103 104
104 MockLibGps::~MockLibGps() { 105 MockLibGps::~MockLibGps() {
105 EXPECT_EQ(this, g_instance_); 106 EXPECT_EQ(this, g_instance_);
106 g_instance_ = NULL; 107 g_instance_ = NULL;
107 } 108 }
108 109
109 GeolocationGpsProviderLinuxTests::GeolocationGpsProviderLinuxTests() 110 GeolocationGpsProviderLinuxTests::GeolocationGpsProviderLinuxTests()
110 : ui_thread_(BrowserThread::IO, &message_loop_), 111 : ui_thread_(BrowserThread::IO, &message_loop_),
111 provider_(new GpsLocationProviderLinux(NewMockLibGps)) { 112 provider_(new GpsLocationProviderLinux(NewMockLibGps)) {
112 provider_->RegisterListener(&location_listener_); 113 provider_->RegisterListener(&location_listener_);
113 } 114 }
114 115
115 GeolocationGpsProviderLinuxTests::~GeolocationGpsProviderLinuxTests() { 116 GeolocationGpsProviderLinuxTests::~GeolocationGpsProviderLinuxTests() {
116 provider_->UnregisterListener(&location_listener_); 117 provider_->UnregisterListener(&location_listener_);
117 } 118 }
118 119
119 TEST_F(GeolocationGpsProviderLinuxTests, NoLibGpsInstalled) { 120 TEST_F(GeolocationGpsProviderLinuxTests, NoLibGpsInstalled) {
120 provider_.reset(new GpsLocationProviderLinux(NoLibGpsFactory)); 121 provider_.reset(new GpsLocationProviderLinux(NoLibGpsFactory));
121 ASSERT_TRUE(provider_.get()); 122 ASSERT_TRUE(provider_.get());
122 const bool ok = provider_->StartProvider(true); 123 const bool ok = provider_->StartProvider(true);
123 EXPECT_FALSE(ok); 124 EXPECT_FALSE(ok);
124 Geoposition position; 125 content::Geoposition position;
125 provider_->GetPosition(&position); 126 provider_->GetPosition(&position);
126 EXPECT_TRUE(position.IsInitialized()); 127 EXPECT_FALSE(position.Validate());
127 EXPECT_FALSE(position.IsValidFix()); 128 EXPECT_EQ(content::Geoposition::ERROR_CODE_POSITION_UNAVAILABLE,
128 EXPECT_EQ(Geoposition::ERROR_CODE_POSITION_UNAVAILABLE, position.error_code); 129 position.error_code);
129 } 130 }
130 131
131 #if defined(OS_CHROMEOS) 132 #if defined(OS_CHROMEOS)
132 133
133 TEST_F(GeolocationGpsProviderLinuxTests, GetPosition) { 134 TEST_F(GeolocationGpsProviderLinuxTests, GetPosition) {
134 ASSERT_TRUE(provider_.get()); 135 ASSERT_TRUE(provider_.get());
135 const bool ok = provider_->StartProvider(true); 136 const bool ok = provider_->StartProvider(true);
136 EXPECT_TRUE(ok); 137 EXPECT_TRUE(ok);
137 ASSERT_TRUE(MockLibGps::g_instance_); 138 ASSERT_TRUE(MockLibGps::g_instance_);
138 EXPECT_EQ(0, MockLibGps::g_instance_->get_position_calls_); 139 EXPECT_EQ(0, MockLibGps::g_instance_->get_position_calls_);
139 EXPECT_EQ(0, MockLibGps::g_instance_->gps_open_calls_); 140 EXPECT_EQ(0, MockLibGps::g_instance_->gps_open_calls_);
140 EXPECT_EQ(0, MockLibGps::g_instance_->gps_read_calls_); 141 EXPECT_EQ(0, MockLibGps::g_instance_->gps_read_calls_);
141 Geoposition position; 142 content::Geoposition position;
142 provider_->GetPosition(&position); 143 provider_->GetPosition(&position);
143 EXPECT_TRUE(position.IsInitialized()); 144 EXPECT_FALSE(position.Validate());
144 EXPECT_FALSE(position.IsValidFix()); 145 EXPECT_EQ(content::Geoposition::ERROR_CODE_POSITION_UNAVAILABLE,
145 EXPECT_EQ(Geoposition::ERROR_CODE_POSITION_UNAVAILABLE, position.error_code); 146 position.error_code);
146 MockLibGps::g_instance_->get_position_.error_code = 147 MockLibGps::g_instance_->get_position_.error_code =
147 Geoposition::ERROR_CODE_NONE; 148 content::Geoposition::ERROR_CODE_NONE;
148 MockLibGps::g_instance_->get_position_.latitude = 4.5; 149 MockLibGps::g_instance_->get_position_.latitude = 4.5;
149 MockLibGps::g_instance_->get_position_.longitude = -34.1; 150 MockLibGps::g_instance_->get_position_.longitude = -34.1;
150 MockLibGps::g_instance_->get_position_.accuracy = 345; 151 MockLibGps::g_instance_->get_position_.accuracy = 345;
151 MockLibGps::g_instance_->get_position_.timestamp = 152 MockLibGps::g_instance_->get_position_.timestamp =
152 base::Time::FromDoubleT(200); 153 base::Time::FromDoubleT(200);
153 EXPECT_TRUE(MockLibGps::g_instance_->get_position_.IsValidFix()); 154 EXPECT_TRUE(MockLibGps::g_instance_->get_position_.Validate());
154 MessageLoop::current()->Run(); 155 MessageLoop::current()->Run();
155 EXPECT_EQ(1, MockLibGps::g_instance_->get_position_calls_); 156 EXPECT_EQ(1, MockLibGps::g_instance_->get_position_calls_);
156 EXPECT_EQ(1, MockLibGps::g_instance_->gps_open_calls_); 157 EXPECT_EQ(1, MockLibGps::g_instance_->gps_open_calls_);
157 EXPECT_EQ(1, MockLibGps::g_instance_->gps_read_calls_); 158 EXPECT_EQ(1, MockLibGps::g_instance_->gps_read_calls_);
158 provider_->GetPosition(&position); 159 provider_->GetPosition(&position);
159 CheckValidPosition(MockLibGps::g_instance_->get_position_, position); 160 CheckValidPosition(MockLibGps::g_instance_->get_position_, position);
160 161
161 // Movement. This will block for up to half a second. 162 // Movement. This will block for up to half a second.
162 MockLibGps::g_instance_->get_position_.latitude += 0.01; 163 MockLibGps::g_instance_->get_position_.latitude += 0.01;
163 MessageLoop::current()->Run(); 164 MessageLoop::current()->Run();
(...skipping 12 matching lines...) Expand all
176 TEST_F(GeolocationGpsProviderLinuxTests, LibGpsReconnect) { 177 TEST_F(GeolocationGpsProviderLinuxTests, LibGpsReconnect) {
177 // Setup gpsd reconnect interval to be 1000ms to speed up test. 178 // Setup gpsd reconnect interval to be 1000ms to speed up test.
178 provider_->SetGpsdReconnectIntervalMillis(1000); 179 provider_->SetGpsdReconnectIntervalMillis(1000);
179 provider_->SetPollPeriodMovingMillis(200); 180 provider_->SetPollPeriodMovingMillis(200);
180 const bool ok = provider_->StartProvider(true); 181 const bool ok = provider_->StartProvider(true);
181 EXPECT_TRUE(ok); 182 EXPECT_TRUE(ok);
182 ASSERT_TRUE(MockLibGps::g_instance_); 183 ASSERT_TRUE(MockLibGps::g_instance_);
183 // Let gps_open() fails, and so will LibGps::Start(). 184 // Let gps_open() fails, and so will LibGps::Start().
184 // Reconnect will happen in 1000ms. 185 // Reconnect will happen in 1000ms.
185 MockLibGps::g_instance_->gps_open_ret_ = 1; 186 MockLibGps::g_instance_->gps_open_ret_ = 1;
186 Geoposition position; 187 content::Geoposition position;
187 MockLibGps::g_instance_->get_position_.error_code = 188 MockLibGps::g_instance_->get_position_.error_code =
188 Geoposition::ERROR_CODE_NONE; 189 content::Geoposition::ERROR_CODE_NONE;
189 MockLibGps::g_instance_->get_position_.latitude = 4.5; 190 MockLibGps::g_instance_->get_position_.latitude = 4.5;
190 MockLibGps::g_instance_->get_position_.longitude = -34.1; 191 MockLibGps::g_instance_->get_position_.longitude = -34.1;
191 MockLibGps::g_instance_->get_position_.accuracy = 345; 192 MockLibGps::g_instance_->get_position_.accuracy = 345;
192 MockLibGps::g_instance_->get_position_.timestamp = 193 MockLibGps::g_instance_->get_position_.timestamp =
193 base::Time::FromDoubleT(200); 194 base::Time::FromDoubleT(200);
194 EXPECT_TRUE(MockLibGps::g_instance_->get_position_.IsValidFix()); 195 EXPECT_TRUE(MockLibGps::g_instance_->get_position_.Validate());
195 // This task makes gps_open() and LibGps::Start() to succeed after 196 // This task makes gps_open() and LibGps::Start() to succeed after
196 // 1500ms. 197 // 1500ms.
197 MessageLoop::current()->PostDelayedTask( 198 MessageLoop::current()->PostDelayedTask(
198 FROM_HERE, 199 FROM_HERE,
199 base::Bind(&EnableGpsOpenCallback), 200 base::Bind(&EnableGpsOpenCallback),
200 base::TimeDelta::FromMilliseconds(1500)); 201 base::TimeDelta::FromMilliseconds(1500));
201 MessageLoop::current()->Run(); 202 MessageLoop::current()->Run();
202 provider_->GetPosition(&position); 203 provider_->GetPosition(&position);
203 EXPECT_TRUE(position.IsInitialized()); 204 EXPECT_TRUE(position.Validate());
204 EXPECT_TRUE(position.IsValidFix());
205 // 3 gps_open() calls are expected (2 failures and 1 success) 205 // 3 gps_open() calls are expected (2 failures and 1 success)
206 EXPECT_EQ(1, MockLibGps::g_instance_->get_position_calls_); 206 EXPECT_EQ(1, MockLibGps::g_instance_->get_position_calls_);
207 EXPECT_EQ(3, MockLibGps::g_instance_->gps_open_calls_); 207 EXPECT_EQ(3, MockLibGps::g_instance_->gps_open_calls_);
208 EXPECT_EQ(1, MockLibGps::g_instance_->gps_read_calls_); 208 EXPECT_EQ(1, MockLibGps::g_instance_->gps_read_calls_);
209 } 209 }
210 210
211 #endif // #if defined(OS_CHROMEOS) 211 #endif // #if defined(OS_CHROMEOS)
212 212
213 } // namespace 213 } // namespace
OLDNEW
« no previous file with comments | « content/browser/geolocation/gps_location_provider_linux.cc ('k') | content/browser/geolocation/libgps_wrapper_linux.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698