Index: chrome/browser/extensions/api/bluetooth/bluetooth_apitest.cc |
diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_apitest.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_apitest.cc |
deleted file mode 100644 |
index c2016a606eb3e70150bd2bf2022a94bb4fbf7514..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/api/bluetooth/bluetooth_apitest.cc |
+++ /dev/null |
@@ -1,459 +0,0 @@ |
-// Copyright (c) 2012 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 <string.h> |
- |
-#include "base/strings/stringprintf.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "chrome/browser/extensions/api/bluetooth/bluetooth_api.h" |
-#include "chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h" |
-#include "chrome/browser/extensions/extension_apitest.h" |
-#include "chrome/browser/extensions/extension_function_test_utils.h" |
-#include "chrome/browser/extensions/extension_service.h" |
-#include "chrome/browser/extensions/extension_test_message_listener.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/test/base/ui_test_utils.h" |
-#include "device/bluetooth/bluetooth_adapter.h" |
-#include "device/bluetooth/bluetooth_uuid.h" |
-#include "device/bluetooth/test/mock_bluetooth_adapter.h" |
-#include "device/bluetooth/test/mock_bluetooth_device.h" |
-#include "device/bluetooth/test/mock_bluetooth_discovery_session.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
- |
-using device::BluetoothAdapter; |
-using device::BluetoothDevice; |
-using device::BluetoothDiscoverySession; |
-using device::BluetoothUUID; |
-using device::MockBluetoothAdapter; |
-using device::MockBluetoothDevice; |
-using device::MockBluetoothDiscoverySession; |
-using extensions::Extension; |
- |
-namespace utils = extension_function_test_utils; |
-namespace api = extensions::api; |
- |
-namespace { |
- |
-static const char* kAdapterAddress = "A1:A2:A3:A4:A5:A6"; |
-static const char* kName = "whatsinaname"; |
- |
-class BluetoothApiTest : public ExtensionApiTest { |
- public: |
- BluetoothApiTest() {} |
- |
- virtual void SetUpOnMainThread() OVERRIDE { |
- ExtensionApiTest::SetUpOnMainThread(); |
- empty_extension_ = utils::CreateEmptyExtension(); |
- SetUpMockAdapter(); |
- } |
- |
- virtual void TearDownOnMainThread() OVERRIDE { |
- EXPECT_CALL(*mock_adapter_, RemoveObserver(testing::_)); |
- } |
- |
- void SetUpMockAdapter() { |
- // The browser will clean this up when it is torn down |
- mock_adapter_ = new testing::StrictMock<MockBluetoothAdapter>(); |
- event_router()->SetAdapterForTest(mock_adapter_); |
- |
- device1_.reset(new testing::NiceMock<MockBluetoothDevice>( |
- mock_adapter_, 0, "d1", "11:12:13:14:15:16", |
- true /* paired */, true /* connected */)); |
- device2_.reset(new testing::NiceMock<MockBluetoothDevice>( |
- mock_adapter_, 0, "d2", "21:22:23:24:25:26", |
- false /* paired */, false /* connected */)); |
- device3_.reset(new testing::NiceMock<MockBluetoothDevice>( |
- mock_adapter_, 0, "d3", "31:32:33:34:35:36", |
- false /* paired */, false /* connected */)); |
- } |
- |
- void DiscoverySessionCallback( |
- const BluetoothAdapter::DiscoverySessionCallback& callback, |
- const BluetoothAdapter::ErrorCallback& error_callback) { |
- if (mock_session_.get()) { |
- callback.Run( |
- scoped_ptr<BluetoothDiscoverySession>(mock_session_.release())); |
- return; |
- } |
- error_callback.Run(); |
- } |
- |
- template <class T> |
- T* setupFunction(T* function) { |
- function->set_extension(empty_extension_.get()); |
- function->set_has_callback(true); |
- return function; |
- } |
- |
- protected: |
- testing::StrictMock<MockBluetoothAdapter>* mock_adapter_; |
- scoped_ptr<testing::NiceMock<MockBluetoothDiscoverySession> > mock_session_; |
- scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device1_; |
- scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device2_; |
- scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device3_; |
- |
- extensions::BluetoothEventRouter* event_router() { |
- return bluetooth_api()->event_router(); |
- } |
- |
- extensions::BluetoothAPI* bluetooth_api() { |
- return extensions::BluetoothAPI::Get(browser()->profile()); |
- } |
- |
- private: |
- scoped_refptr<Extension> empty_extension_; |
-}; |
- |
-static void StopDiscoverySessionCallback(const base::Closure& callback, |
- const base::Closure& error_callback) { |
- callback.Run(); |
-} |
- |
-} // namespace |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetAdapterState) { |
- EXPECT_CALL(*mock_adapter_, GetAddress()) |
- .WillOnce(testing::Return(kAdapterAddress)); |
- EXPECT_CALL(*mock_adapter_, GetName()) |
- .WillOnce(testing::Return(kName)); |
- EXPECT_CALL(*mock_adapter_, IsPresent()) |
- .WillOnce(testing::Return(false)); |
- EXPECT_CALL(*mock_adapter_, IsPowered()) |
- .WillOnce(testing::Return(true)); |
- EXPECT_CALL(*mock_adapter_, IsDiscovering()) |
- .WillOnce(testing::Return(false)); |
- |
- scoped_refptr<api::BluetoothGetAdapterStateFunction> get_adapter_state; |
- get_adapter_state = setupFunction(new api::BluetoothGetAdapterStateFunction); |
- |
- scoped_ptr<base::Value> result(utils::RunFunctionAndReturnSingleResult( |
- get_adapter_state.get(), "[]", browser())); |
- ASSERT_TRUE(result.get() != NULL); |
- api::bluetooth::AdapterState state; |
- ASSERT_TRUE(api::bluetooth::AdapterState::Populate(*result, &state)); |
- |
- EXPECT_FALSE(state.available); |
- EXPECT_TRUE(state.powered); |
- EXPECT_FALSE(state.discovering); |
- EXPECT_EQ(kName, state.name); |
- EXPECT_EQ(kAdapterAddress, state.address); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothApiTest, DeviceEvents) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth/device_events"))); |
- |
- ExtensionTestMessageListener events_received("ready", true); |
- event_router()->DeviceAdded(mock_adapter_, device1_.get()); |
- event_router()->DeviceAdded(mock_adapter_, device2_.get()); |
- |
- EXPECT_CALL(*device2_.get(), GetDeviceName()) |
- .WillRepeatedly(testing::Return("the real d2")); |
- EXPECT_CALL(*device2_.get(), GetName()) |
- .WillRepeatedly(testing::Return(base::UTF8ToUTF16("the real d2"))); |
- event_router()->DeviceChanged(mock_adapter_, device2_.get()); |
- |
- event_router()->DeviceAdded(mock_adapter_, device3_.get()); |
- event_router()->DeviceRemoved(mock_adapter_, device1_.get()); |
- EXPECT_TRUE(events_received.WaitUntilSatisfied()); |
- events_received.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothApiTest, Discovery) { |
- // Try with a failure to start. This will return an error as we haven't |
- // initialied a session object. |
- EXPECT_CALL(*mock_adapter_, StartDiscoverySession(testing::_, testing::_)) |
- .WillOnce( |
- testing::Invoke(this, &BluetoothApiTest::DiscoverySessionCallback)); |
- |
- // StartDiscovery failure will not reference the adapter. |
- scoped_refptr<api::BluetoothStartDiscoveryFunction> start_function; |
- start_function = setupFunction(new api::BluetoothStartDiscoveryFunction); |
- std::string error( |
- utils::RunFunctionAndReturnError(start_function.get(), "[]", browser())); |
- ASSERT_FALSE(error.empty()); |
- |
- // Reset the adapter and initiate a discovery session. The ownership of the |
- // mock session will be passed to the event router. |
- ASSERT_FALSE(mock_session_.get()); |
- SetUpMockAdapter(); |
- |
- // Create a mock session to be returned as a result. Get a handle to it as |
- // its ownership will be passed and |mock_session_| will be reset. |
- mock_session_.reset(new testing::NiceMock<MockBluetoothDiscoverySession>()); |
- MockBluetoothDiscoverySession* session = mock_session_.get(); |
- EXPECT_CALL(*mock_adapter_, StartDiscoverySession(testing::_, testing::_)) |
- .WillOnce( |
- testing::Invoke(this, &BluetoothApiTest::DiscoverySessionCallback)); |
- start_function = setupFunction(new api::BluetoothStartDiscoveryFunction); |
- (void) |
- utils::RunFunctionAndReturnError(start_function.get(), "[]", browser()); |
- |
- // End the discovery session. The StopDiscovery function should succeed. |
- testing::Mock::VerifyAndClearExpectations(mock_adapter_); |
- EXPECT_CALL(*session, IsActive()).WillOnce(testing::Return(true)); |
- EXPECT_CALL(*session, Stop(testing::_, testing::_)) |
- .WillOnce(testing::Invoke(StopDiscoverySessionCallback)); |
- |
- // StopDiscovery success will remove the session object, unreferencing the |
- // adapter. |
- scoped_refptr<api::BluetoothStopDiscoveryFunction> stop_function; |
- stop_function = setupFunction(new api::BluetoothStopDiscoveryFunction); |
- (void) utils::RunFunctionAndReturnSingleResult( |
- stop_function.get(), "[]", browser()); |
- |
- // Reset the adapter. Simulate failure for stop discovery. The event router |
- // still owns the session. Make it appear inactive. |
- SetUpMockAdapter(); |
- EXPECT_CALL(*session, IsActive()).WillOnce(testing::Return(false)); |
- stop_function = setupFunction(new api::BluetoothStopDiscoveryFunction); |
- error = |
- utils::RunFunctionAndReturnError(stop_function.get(), "[]", browser()); |
- ASSERT_FALSE(error.empty()); |
- SetUpMockAdapter(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothApiTest, DiscoveryCallback) { |
- mock_session_.reset(new testing::NiceMock<MockBluetoothDiscoverySession>()); |
- MockBluetoothDiscoverySession* session = mock_session_.get(); |
- EXPECT_CALL(*mock_adapter_, StartDiscoverySession(testing::_, testing::_)) |
- .WillOnce( |
- testing::Invoke(this, &BluetoothApiTest::DiscoverySessionCallback)); |
- EXPECT_CALL(*session, IsActive()).WillOnce(testing::Return(true)); |
- EXPECT_CALL(*session, Stop(testing::_, testing::_)) |
- .WillOnce(testing::Invoke(StopDiscoverySessionCallback)); |
- |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- ExtensionTestMessageListener discovery_started("ready", true); |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth/discovery_callback"))); |
- EXPECT_TRUE(discovery_started.WaitUntilSatisfied()); |
- |
- event_router()->DeviceAdded(mock_adapter_, device1_.get()); |
- |
- discovery_started.Reply("go"); |
- ExtensionTestMessageListener discovery_stopped("ready", true); |
- EXPECT_CALL(*mock_adapter_, RemoveObserver(testing::_)); |
- EXPECT_TRUE(discovery_stopped.WaitUntilSatisfied()); |
- |
- SetUpMockAdapter(); |
- event_router()->DeviceAdded(mock_adapter_, device2_.get()); |
- discovery_stopped.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothApiTest, DiscoveryInProgress) { |
- EXPECT_CALL(*mock_adapter_, GetAddress()) |
- .WillOnce(testing::Return(kAdapterAddress)); |
- EXPECT_CALL(*mock_adapter_, GetName()) |
- .WillOnce(testing::Return(kName)); |
- EXPECT_CALL(*mock_adapter_, IsPresent()) |
- .WillOnce(testing::Return(true)); |
- EXPECT_CALL(*mock_adapter_, IsPowered()) |
- .WillOnce(testing::Return(true)); |
- |
- // Fake that the adapter is discovering |
- EXPECT_CALL(*mock_adapter_, IsDiscovering()) |
- .WillOnce(testing::Return(true)); |
- event_router()->AdapterDiscoveringChanged(mock_adapter_, true); |
- |
- // Cache a device before the extension starts discovering |
- event_router()->DeviceAdded(mock_adapter_, device1_.get()); |
- |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- mock_session_.reset(new testing::NiceMock<MockBluetoothDiscoverySession>()); |
- MockBluetoothDiscoverySession* session = mock_session_.get(); |
- EXPECT_CALL(*mock_adapter_, StartDiscoverySession(testing::_, testing::_)) |
- .WillOnce( |
- testing::Invoke(this, &BluetoothApiTest::DiscoverySessionCallback)); |
- EXPECT_CALL(*session, IsActive()).WillOnce(testing::Return(true)); |
- EXPECT_CALL(*session, Stop(testing::_, testing::_)) |
- .WillOnce(testing::Invoke(StopDiscoverySessionCallback)); |
- |
- ExtensionTestMessageListener discovery_started("ready", true); |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth/discovery_in_progress"))); |
- EXPECT_TRUE(discovery_started.WaitUntilSatisfied()); |
- |
- // Only this should be received. No additional notification should be sent for |
- // devices discovered before the discovery session started. |
- event_router()->DeviceAdded(mock_adapter_, device2_.get()); |
- |
- discovery_started.Reply("go"); |
- ExtensionTestMessageListener discovery_stopped("ready", true); |
- EXPECT_CALL(*mock_adapter_, RemoveObserver(testing::_)); |
- EXPECT_TRUE(discovery_stopped.WaitUntilSatisfied()); |
- |
- SetUpMockAdapter(); |
- // This should never be received. |
- event_router()->DeviceAdded(mock_adapter_, device2_.get()); |
- discovery_stopped.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothApiTest, OnAdapterStateChanged) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- // Load and wait for setup |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE( |
- LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth/on_adapter_state_changed"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- EXPECT_CALL(*mock_adapter_, GetAddress()) |
- .WillOnce(testing::Return(kAdapterAddress)); |
- EXPECT_CALL(*mock_adapter_, GetName()) |
- .WillOnce(testing::Return(kName)); |
- EXPECT_CALL(*mock_adapter_, IsPresent()) |
- .WillOnce(testing::Return(false)); |
- EXPECT_CALL(*mock_adapter_, IsPowered()) |
- .WillOnce(testing::Return(false)); |
- EXPECT_CALL(*mock_adapter_, IsDiscovering()) |
- .WillOnce(testing::Return(false)); |
- event_router()->AdapterPoweredChanged(mock_adapter_, false); |
- |
- EXPECT_CALL(*mock_adapter_, GetAddress()) |
- .WillOnce(testing::Return(kAdapterAddress)); |
- EXPECT_CALL(*mock_adapter_, GetName()) |
- .WillOnce(testing::Return(kName)); |
- EXPECT_CALL(*mock_adapter_, IsPresent()) |
- .WillOnce(testing::Return(true)); |
- EXPECT_CALL(*mock_adapter_, IsPowered()) |
- .WillOnce(testing::Return(true)); |
- EXPECT_CALL(*mock_adapter_, IsDiscovering()) |
- .WillOnce(testing::Return(true)); |
- event_router()->AdapterPresentChanged(mock_adapter_, true); |
- |
- EXPECT_CALL(*mock_adapter_, GetAddress()) |
- .WillOnce(testing::Return(kAdapterAddress)); |
- EXPECT_CALL(*mock_adapter_, GetName()) |
- .WillOnce(testing::Return(kName)); |
- EXPECT_CALL(*mock_adapter_, IsPresent()) |
- .WillOnce(testing::Return(true)); |
- EXPECT_CALL(*mock_adapter_, IsPowered()) |
- .WillOnce(testing::Return(true)); |
- EXPECT_CALL(*mock_adapter_, IsDiscovering()) |
- .WillOnce(testing::Return(true)); |
- event_router()->AdapterDiscoveringChanged(mock_adapter_, true); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetDevices) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- BluetoothAdapter::ConstDeviceList devices; |
- devices.push_back(device1_.get()); |
- devices.push_back(device2_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevices()) |
- .Times(1) |
- .WillRepeatedly(testing::Return(devices)); |
- |
- // Load and wait for setup |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE( |
- LoadExtension(test_data_dir_.AppendASCII("bluetooth/get_devices"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetDevice) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(device1_->GetAddress())) |
- .WillOnce(testing::Return(device1_.get())); |
- EXPECT_CALL(*mock_adapter_, GetDevice(device2_->GetAddress())) |
- .Times(1) |
- .WillRepeatedly(testing::Return(static_cast<BluetoothDevice*>(NULL))); |
- |
- // Load and wait for setup |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE( |
- LoadExtension(test_data_dir_.AppendASCII("bluetooth/get_device"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothApiTest, DeviceInfo) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- // Set up the first device object to reflect a real-world device. |
- BluetoothAdapter::ConstDeviceList devices; |
- |
- EXPECT_CALL(*device1_.get(), GetAddress()) |
- .WillRepeatedly(testing::Return("A4:17:31:00:00:00")); |
- EXPECT_CALL(*device1_.get(), GetDeviceName()) |
- .WillRepeatedly(testing::Return("Chromebook Pixel")); |
- EXPECT_CALL(*device1_.get(), GetName()) |
- .WillRepeatedly(testing::Return(base::UTF8ToUTF16("Chromebook Pixel"))); |
- EXPECT_CALL(*device1_.get(), GetBluetoothClass()) |
- .WillRepeatedly(testing::Return(0x080104)); |
- EXPECT_CALL(*device1_.get(), GetDeviceType()) |
- .WillRepeatedly(testing::Return(BluetoothDevice::DEVICE_COMPUTER)); |
- EXPECT_CALL(*device1_.get(), GetVendorIDSource()) |
- .WillRepeatedly(testing::Return(BluetoothDevice::VENDOR_ID_BLUETOOTH)); |
- EXPECT_CALL(*device1_.get(), GetVendorID()) |
- .WillRepeatedly(testing::Return(0x00E0)); |
- EXPECT_CALL(*device1_.get(), GetProductID()) |
- .WillRepeatedly(testing::Return(0x240A)); |
- EXPECT_CALL(*device1_.get(), GetDeviceID()) |
- .WillRepeatedly(testing::Return(0x0400)); |
- EXPECT_CALL(*device1_, GetRSSI()).WillRepeatedly(testing::Return(-42)); |
- EXPECT_CALL(*device1_, GetCurrentHostTransmitPower()) |
- .WillRepeatedly(testing::Return(-16)); |
- EXPECT_CALL(*device1_, GetMaximumHostTransmitPower()) |
- .WillRepeatedly(testing::Return(10)); |
- |
- BluetoothDevice::UUIDList uuids; |
- uuids.push_back(BluetoothUUID("1105")); |
- uuids.push_back(BluetoothUUID("1106")); |
- |
- EXPECT_CALL(*device1_.get(), GetUUIDs()) |
- .WillOnce(testing::Return(uuids)); |
- |
- devices.push_back(device1_.get()); |
- |
- // Leave the second largely empty so we can check a device without |
- // available information. |
- devices.push_back(device2_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevices()) |
- .Times(1) |
- .WillRepeatedly(testing::Return(devices)); |
- |
- // Load and wait for setup |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE( |
- LoadExtension(test_data_dir_.AppendASCII("bluetooth/device_info"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |