| Index: content/browser/geolocation/gps_location_provider_unittest_linux.cc
|
| ===================================================================
|
| --- content/browser/geolocation/gps_location_provider_unittest_linux.cc (revision 76230)
|
| +++ content/browser/geolocation/gps_location_provider_unittest_linux.cc (working copy)
|
| @@ -1,194 +0,0 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "content/browser/browser_thread.h"
|
| -#include "content/browser/geolocation/gps_location_provider_linux.h"
|
| -#include "content/browser/geolocation/libgps_wrapper_linux.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -struct gps_data_t {
|
| -};
|
| -
|
| -namespace {
|
| -class MockLibGps : public LibGps {
|
| - public:
|
| - MockLibGps();
|
| - ~MockLibGps();
|
| -
|
| - virtual bool StartStreaming() {
|
| - ++start_streaming_calls_;
|
| - return start_streaming_ret_;
|
| - }
|
| - virtual bool DataWaiting() {
|
| - EXPECT_GT(start_streaming_calls_, 0);
|
| - ++data_waiting_calls_;
|
| - // Toggle the return value, so the poll loop will exit once per test step.
|
| - return (data_waiting_calls_ & 1) != 0;
|
| - }
|
| - virtual bool GetPositionIfFixed(Geoposition* position) {
|
| - CHECK(position);
|
| - EXPECT_GT(start_streaming_calls_, 0);
|
| - EXPECT_GT(data_waiting_calls_, 0);
|
| - ++get_position_calls_;
|
| - *position = get_position_;
|
| - return get_position_ret_;
|
| -
|
| - }
|
| - int start_streaming_calls_;
|
| - bool start_streaming_ret_;
|
| - int data_waiting_calls_;
|
| - int get_position_calls_;
|
| - Geoposition get_position_;
|
| - bool get_position_ret_;
|
| - static MockLibGps* g_instance_;
|
| -};
|
| -
|
| -class LocaionProviderListenerLoopQuitter
|
| - : public LocationProviderBase::ListenerInterface {
|
| - // LocationProviderBase::ListenerInterface
|
| - virtual void LocationUpdateAvailable(LocationProviderBase* provider) {
|
| - MessageLoop::current()->Quit();
|
| - }
|
| -};
|
| -
|
| -class GeolocationGpsProviderLinuxTests : public testing::Test {
|
| - public:
|
| - GeolocationGpsProviderLinuxTests();
|
| - ~GeolocationGpsProviderLinuxTests();
|
| -
|
| - static LibGps* NewMockLibGps() {
|
| - return new MockLibGps;
|
| - }
|
| - static LibGps* NoLibGpsFactory() {
|
| - return NULL;
|
| - }
|
| -
|
| - protected:
|
| - MessageLoop message_loop_;
|
| - BrowserThread ui_thread_;
|
| - LocaionProviderListenerLoopQuitter location_listener_;
|
| - scoped_ptr<GpsLocationProviderLinux> provider_;
|
| -};
|
| -
|
| -gps_data_t* gps_open_stub(const char*, const char*) {
|
| - // Need to return a non-NULL value here to indicate success, however we don't
|
| - // need (or want) a valid pointer as it should never be dereferenced.
|
| - return static_cast<gps_data_t*>(NULL) + 1;
|
| -}
|
| -int gps_close_stub(gps_data_t*) {
|
| - return 0;
|
| -}
|
| -int gps_poll_stub(gps_data_t*) {
|
| - return 0;
|
| -}
|
| -// v2.34 only
|
| -int gps_query_stub(gps_data_t*, const char*, ...) {
|
| - return 0;
|
| -}
|
| -// v2.90+
|
| -int gps_stream_stub(gps_data_t*, unsigned int, void*) {
|
| - return 0;
|
| -}
|
| -bool gps_waiting_stub(gps_data_t*) {
|
| - return 0;
|
| -}
|
| -
|
| -void CheckValidPosition(const Geoposition& expected,
|
| - const Geoposition& actual) {
|
| - EXPECT_TRUE(actual.IsValidFix());
|
| - EXPECT_DOUBLE_EQ(expected.latitude, actual.latitude);
|
| - EXPECT_DOUBLE_EQ(expected.longitude, actual.longitude);
|
| - EXPECT_DOUBLE_EQ(expected.accuracy, actual.accuracy);
|
| -}
|
| -
|
| -MockLibGps* MockLibGps::g_instance_ = NULL;
|
| -
|
| -MockLibGps::MockLibGps()
|
| - : LibGps(new LibGpsLibraryWrapper(NULL,
|
| - gps_open_stub,
|
| - gps_close_stub,
|
| - gps_poll_stub,
|
| - gps_query_stub,
|
| - gps_stream_stub,
|
| - gps_waiting_stub)),
|
| - start_streaming_calls_(0),
|
| - start_streaming_ret_(true),
|
| - data_waiting_calls_(0),
|
| - get_position_calls_(0),
|
| - get_position_ret_(true) {
|
| - get_position_.error_code = Geoposition::ERROR_CODE_POSITION_UNAVAILABLE;
|
| - EXPECT_FALSE(g_instance_);
|
| - g_instance_ = this;
|
| -}
|
| -
|
| -MockLibGps::~MockLibGps() {
|
| - EXPECT_EQ(this, g_instance_);
|
| - g_instance_ = NULL;
|
| -}
|
| -
|
| -GeolocationGpsProviderLinuxTests::GeolocationGpsProviderLinuxTests()
|
| - : ui_thread_(BrowserThread::IO, &message_loop_),
|
| - provider_(new GpsLocationProviderLinux(NewMockLibGps)) {
|
| - provider_->RegisterListener(&location_listener_);
|
| -}
|
| -
|
| -GeolocationGpsProviderLinuxTests::~GeolocationGpsProviderLinuxTests() {
|
| - provider_->UnregisterListener(&location_listener_);
|
| -}
|
| -
|
| -TEST_F(GeolocationGpsProviderLinuxTests, NoLibGpsInstalled) {
|
| - provider_.reset(new GpsLocationProviderLinux(NoLibGpsFactory));
|
| - ASSERT_TRUE(provider_.get());
|
| - const bool ok = provider_->StartProvider(true);
|
| - EXPECT_FALSE(ok);
|
| - Geoposition position;
|
| - provider_->GetPosition(&position);
|
| - EXPECT_TRUE(position.IsInitialized());
|
| - EXPECT_FALSE(position.IsValidFix());
|
| - EXPECT_EQ(Geoposition::ERROR_CODE_POSITION_UNAVAILABLE, position.error_code);
|
| -}
|
| -
|
| -TEST_F(GeolocationGpsProviderLinuxTests, GetPosition) {
|
| - ASSERT_TRUE(provider_.get());
|
| - const bool ok = provider_->StartProvider(true);
|
| - EXPECT_TRUE(ok);
|
| - ASSERT_TRUE(MockLibGps::g_instance_);
|
| - EXPECT_EQ(0, MockLibGps::g_instance_->start_streaming_calls_);
|
| - EXPECT_EQ(0, MockLibGps::g_instance_->data_waiting_calls_);
|
| - EXPECT_EQ(0, MockLibGps::g_instance_->get_position_calls_);
|
| - Geoposition position;
|
| - provider_->GetPosition(&position);
|
| - EXPECT_TRUE(position.IsInitialized());
|
| - EXPECT_FALSE(position.IsValidFix());
|
| - EXPECT_EQ(Geoposition::ERROR_CODE_POSITION_UNAVAILABLE, position.error_code);
|
| - MockLibGps::g_instance_->get_position_.error_code =
|
| - Geoposition::ERROR_CODE_NONE;
|
| - MockLibGps::g_instance_->get_position_.latitude = 4.5;
|
| - MockLibGps::g_instance_->get_position_.longitude = -34.1;
|
| - MockLibGps::g_instance_->get_position_.accuracy = 345;
|
| - MockLibGps::g_instance_->get_position_.timestamp =
|
| - base::Time::FromDoubleT(200);
|
| - EXPECT_TRUE(MockLibGps::g_instance_->get_position_.IsValidFix());
|
| -
|
| - MessageLoop::current()->Run();
|
| - EXPECT_GT(MockLibGps::g_instance_->start_streaming_calls_, 0);
|
| - EXPECT_GT(MockLibGps::g_instance_->data_waiting_calls_, 0);
|
| - EXPECT_EQ(1, MockLibGps::g_instance_->get_position_calls_);
|
| - provider_->GetPosition(&position);
|
| - CheckValidPosition(MockLibGps::g_instance_->get_position_, position);
|
| -
|
| - // Movement. This will block for up to half a second.
|
| - MockLibGps::g_instance_->get_position_.latitude += 0.01;
|
| - MessageLoop::current()->Run();
|
| - provider_->GetPosition(&position);
|
| - EXPECT_EQ(2, MockLibGps::g_instance_->get_position_calls_);
|
| - CheckValidPosition(MockLibGps::g_instance_->get_position_, position);
|
| -}
|
| -
|
| -// TODO(joth): Add a test for LibGps::Start() returning false (i.e. gpsd not
|
| -// running). Need to work around the 10s reconnect delay (either by injecting
|
| -// a shorter retry interval, or adapt MessageLoop / Time::Now to be more test
|
| -// friendly).
|
| -
|
| -} // namespace
|
|
|