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

Unified Diff: chrome/browser/geolocation/wifi_data_provider_common_unittest.cc

Issue 604019: Refactor the state-machine & threading out of the windows wifi provider into ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/geolocation/wifi_data_provider_common_unittest.cc
===================================================================
--- chrome/browser/geolocation/wifi_data_provider_common_unittest.cc (revision 38486)
+++ chrome/browser/geolocation/wifi_data_provider_common_unittest.cc (working copy)
@@ -2,17 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/geolocation/wifi_data_provider_win.h"
+#include "chrome/browser/geolocation/wifi_data_provider_common.h"
#include <vector>
#include "base/scoped_ptr.h"
#include "base/string_util.h"
-#include "chrome/browser/geolocation/wifi_data_provider_common.h"
#include "testing/gtest/include/gtest/gtest.h"
-namespace {
-class MockWlanApi : public Win32WifiDataProvider::WlanApiInterface {
+class MockWlanApi : public WifiDataProviderCommon::WlanApiInterface {
public:
MockWlanApi() : calls_(0), bool_return_(true) {
}
@@ -26,82 +24,82 @@
WifiData::AccessPointDataSet data_out_;
};
-class MockPollingPolicy : public PollingPolicyInterface {
- public:
- virtual void UpdatePollingInterval(bool scan_results_differ) {
- results_differed_.push_back(scan_results_differ);
- }
- virtual int PollingInterval() { return 1; }
- std::vector<bool> results_differed_;
-};
-
// Stops the specified (nested) message loop when the listener is called back.
class MessageLoopQuitListener
- : public Win32WifiDataProvider::ListenerInterface {
+ : public WifiDataProviderCommon::ListenerInterface {
public:
explicit MessageLoopQuitListener(MessageLoop* message_loop)
: message_loop_to_quit_(message_loop) {
- DCHECK(message_loop_to_quit_ != NULL);
+ CHECK(message_loop_to_quit_ != NULL);
}
// ListenerInterface
virtual void DeviceDataUpdateAvailable(
DeviceDataProvider<WifiData>* provider) {
- // We expect the callback to come from the provider's internal worker
- // thread. This is not a strict requirement, just a lot of the complexity
- // here is predicated on the need to cope with this scenario!
- EXPECT_NE(MessageLoop::current(), message_loop_to_quit_);
+ // Provider should call back on client's thread.
+ EXPECT_EQ(MessageLoop::current(), message_loop_to_quit_);
provider_ = provider;
- // Can't call Quit() directly on another thread's message loop.
- message_loop_to_quit_->PostTask(FROM_HERE, new MessageLoop::QuitTask);
+ message_loop_to_quit_->Quit();
}
MessageLoop* message_loop_to_quit_;
DeviceDataProvider<WifiData>* provider_;
};
-// Main test fixture
-class Win32WifiDataProviderTest : public testing::Test {
+class WifiDataProviderCommonWithMock : public WifiDataProviderCommon {
public:
- static Win32WifiDataProvider* CreateWin32WifiDataProvider(
- MockWlanApi** wlan_api_out) {
- Win32WifiDataProvider* provider = new Win32WifiDataProvider;
- *wlan_api_out = new MockWlanApi;
- provider->inject_mock_wlan_api(*wlan_api_out); // Takes ownership.
- provider->inject_mock_polling_policy(new MockPollingPolicy); // ditto
- return provider;
+ WifiDataProviderCommonWithMock()
+ : new_wlan_api_(new MockWlanApi) {}
+
+ // WifiDataProviderCommon
+ virtual WlanApiInterface* NewWlanApi() {
+ CHECK(new_wlan_api_ != NULL);
+ return new_wlan_api_.release();
}
+ virtual PollingPolicyInterface* NewPolicyPolicy() {
+ return new GenericPollingPolicy<1, 2, 3>;
+ }
+
+ scoped_ptr<MockWlanApi> new_wlan_api_;
+
+ DISALLOW_COPY_AND_ASSIGN(WifiDataProviderCommonWithMock);
+};
+
+
+WifiDataProviderImplBase* CreateWifiDataProviderCommonWithMock() {
+ return new WifiDataProviderCommonWithMock;
+}
+
+// Main test fixture
+class GeolocationWifiDataProviderCommonTest : public testing::Test {
+ public:
virtual void SetUp() {
- provider_.reset(CreateWin32WifiDataProvider(&wlan_api_));
+ provider_ = new WifiDataProviderCommonWithMock;
+ wlan_api_ = provider_->new_wlan_api_.get();
}
virtual void TearDown() {
- provider_.reset();
+ provider_->StopDataProvider();
+ provider_ = NULL;
}
protected:
MessageLoop main_message_loop_;
- scoped_ptr<Win32WifiDataProvider> provider_;
+ scoped_refptr<WifiDataProviderCommonWithMock> provider_;
MockWlanApi* wlan_api_;
};
-WifiDataProviderImplBase* CreateWin32WifiDataProviderStatic() {
- MockWlanApi* wlan_api;
- return Win32WifiDataProviderTest::CreateWin32WifiDataProvider(&wlan_api);
-}
-} // namespace
-
-TEST_F(Win32WifiDataProviderTest, CreateDestroy) {
+TEST_F(GeolocationWifiDataProviderCommonTest, CreateDestroy) {
// Test fixture members were SetUp correctly.
EXPECT_EQ(&main_message_loop_, MessageLoop::current());
EXPECT_TRUE(NULL != provider_.get());
EXPECT_TRUE(NULL != wlan_api_);
}
-TEST_F(Win32WifiDataProviderTest, StartThread) {
+TEST_F(GeolocationWifiDataProviderCommonTest, StartThread) {
EXPECT_TRUE(provider_->StartDataProvider());
- provider_.reset(); // Stop()s the thread.
+ provider_->StopDataProvider();
SUCCEED();
}
-TEST_F(Win32WifiDataProviderTest, DoAnEmptyScan) {
+TEST_F(GeolocationWifiDataProviderCommonTest, DoAnEmptyScan) {
MessageLoopQuitListener quit_listener(&main_message_loop_);
provider_->AddListener(&quit_listener);
EXPECT_TRUE(provider_->StartDataProvider());
@@ -111,11 +109,11 @@
EXPECT_GT(wlan_api_->calls_, 0);
WifiData data;
EXPECT_TRUE(provider_->GetData(&data));
- EXPECT_EQ(0, data.access_point_data.size());
+ EXPECT_EQ(0, static_cast<int>(data.access_point_data.size()));
provider_->RemoveListener(&quit_listener);
}
-TEST_F(Win32WifiDataProviderTest, DoScanWithResults) {
+TEST_F(GeolocationWifiDataProviderCommonTest, DoScanWithResults) {
MessageLoopQuitListener quit_listener(&main_message_loop_);
provider_->AddListener(&quit_listener);
AccessPointData single_access_point;
@@ -124,7 +122,7 @@
single_access_point.mac_address = 3;
single_access_point.radio_signal_strength = 4;
single_access_point.signal_to_noise = 5;
- single_access_point.ssid = L"foossid";
+ single_access_point.ssid = ASCIIToUTF16("foossid");
wlan_api_->data_out_.insert(single_access_point);
EXPECT_TRUE(provider_->StartDataProvider());
@@ -132,15 +130,16 @@
EXPECT_GT(wlan_api_->calls_, 0);
WifiData data;
EXPECT_TRUE(provider_->GetData(&data));
- EXPECT_EQ(1, data.access_point_data.size());
+ EXPECT_EQ(1, static_cast<int>(data.access_point_data.size()));
EXPECT_EQ(single_access_point.age, data.access_point_data.begin()->age);
EXPECT_EQ(single_access_point.ssid, data.access_point_data.begin()->ssid);
provider_->RemoveListener(&quit_listener);
}
-TEST_F(Win32WifiDataProviderTest, StartThreadViaDeviceDataProvider) {
+TEST_F(GeolocationWifiDataProviderCommonTest,
+ StartThreadViaDeviceDataProvider) {
MessageLoopQuitListener quit_listener(&main_message_loop_);
- WifiDataProvider::SetFactory(CreateWin32WifiDataProviderStatic);
+ WifiDataProvider::SetFactory(CreateWifiDataProviderCommonWithMock);
DeviceDataProvider<WifiData>::Register(&quit_listener);
main_message_loop_.Run();
DeviceDataProvider<WifiData>::Unregister(&quit_listener);

Powered by Google App Engine
This is Rietveld 408576698