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

Unified Diff: chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_apitest.cc

Issue 255053002: chrome.bluetoothLowEnergy: Implement getCharacteristics. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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/extensions/api/bluetooth_low_energy/bluetooth_low_energy_apitest.cc
diff --git a/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_apitest.cc b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_apitest.cc
index fb1da7087624c13736d3dc55b69dc1dd6430c044..3519ac8b8d5839e0036bf2e19cf1042538aa7f0a 100644
--- a/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_apitest.cc
+++ b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_apitest.cc
@@ -10,17 +10,21 @@
#include "chrome/browser/extensions/extension_test_message_listener.h"
#include "device/bluetooth/test/mock_bluetooth_adapter.h"
#include "device/bluetooth/test/mock_bluetooth_device.h"
+#include "device/bluetooth/test/mock_bluetooth_gatt_characteristic.h"
#include "device/bluetooth/test/mock_bluetooth_gatt_service.h"
#include "testing/gmock/include/gmock/gmock.h"
using device::BluetoothUUID;
using device::BluetoothAdapter;
using device::BluetoothDevice;
+using device::BluetoothGattCharacteristic;
using device::BluetoothGattService;
using device::MockBluetoothAdapter;
using device::MockBluetoothDevice;
+using device::MockBluetoothGattCharacteristic;
using device::MockBluetoothGattService;
using testing::Return;
+using testing::ReturnRefOfCopy;
using testing::_;
namespace utils = extension_function_test_utils;
@@ -32,9 +36,32 @@ const char kTestLeDeviceName[] = "Test LE Device";
const char kTestServiceId0[] = "service_id0";
const char kTestServiceUuid0[] = "1234";
+
const char kTestServiceId1[] = "service_id1";
const char kTestServiceUuid1[] = "5678";
+const char kTestCharacteristicId0[] = "char_id0";
+const char kTestCharacteristicUuid0[] = "1211";
+const BluetoothGattCharacteristic::Properties kTestCharacteristicProperties0 =
+ BluetoothGattCharacteristic::kPropertyBroadcast |
+ BluetoothGattCharacteristic::kPropertyRead |
+ BluetoothGattCharacteristic::kPropertyWriteWithoutResponse |
+ BluetoothGattCharacteristic::kPropertyIndicate;
+const uint8 kTestCharacteristicDefaultValue0[] = {0x01, 0x02, 0x03, 0x04, 0x05};
+
+const char kTestCharacteristicId1[] = "char_id1";
+const char kTestCharacteristicUuid1[] = "1212";
+const BluetoothGattCharacteristic::Properties kTestCharacteristicProperties1 =
+ BluetoothGattCharacteristic::kPropertyRead |
+ BluetoothGattCharacteristic::kPropertyWrite |
+ BluetoothGattCharacteristic::kPropertyNotify;
+const uint8 kTestCharacteristicDefaultValue1[] = {0x06, 0x07, 0x08};
+
+const char kTestCharacteristicId2[] = "char_id1";
+const char kTestCharacteristicUuid2[] = "1213";
+const BluetoothGattCharacteristic::Properties kTestCharacteristicProperties2 =
+ BluetoothGattCharacteristic::kPropertyNone;
+
class BluetoothLowEnergyApiTest : public ExtensionApiTest {
public:
BluetoothLowEnergyApiTest() {}
@@ -79,6 +106,43 @@ class BluetoothLowEnergyApiTest : public ExtensionApiTest {
BluetoothUUID(kTestServiceUuid1),
false /* is_primary */,
false /* is_local */));
+
+ // Assign characteristics some random properties and permissions. They don't
+ // need to reflect what the characteristic is actually capable of, since
+ // the JS API just passes values through from
+ // device::BluetoothGattCharacteristic.
+ std::vector<uint8> default_value;
+ chrc0_.reset(new testing::NiceMock<MockBluetoothGattCharacteristic>(
+ service0_.get(),
+ kTestCharacteristicId0,
+ BluetoothUUID(kTestCharacteristicUuid0),
+ false /* is_local */,
+ kTestCharacteristicProperties0,
+ BluetoothGattCharacteristic::kPermissionNone));
+ default_value.assign(kTestCharacteristicDefaultValue0,
+ (kTestCharacteristicDefaultValue0 +
+ sizeof(kTestCharacteristicDefaultValue0)));
+ ON_CALL(*chrc0_, GetValue()).WillByDefault(ReturnRefOfCopy(default_value));
+
+ chrc1_.reset(new testing::NiceMock<MockBluetoothGattCharacteristic>(
+ service0_.get(),
+ kTestCharacteristicId1,
+ BluetoothUUID(kTestCharacteristicUuid1),
+ false /* is_local */,
+ kTestCharacteristicProperties1,
+ BluetoothGattCharacteristic::kPermissionNone));
+ default_value.assign(kTestCharacteristicDefaultValue1,
+ (kTestCharacteristicDefaultValue1 +
+ sizeof(kTestCharacteristicDefaultValue1)));
+ ON_CALL(*chrc1_, GetValue()).WillByDefault(ReturnRefOfCopy(default_value));
+
+ chrc2_.reset(new testing::NiceMock<MockBluetoothGattCharacteristic>(
+ service1_.get(),
+ kTestCharacteristicId2,
+ BluetoothUUID(kTestCharacteristicUuid2),
+ false /* is_local */,
+ kTestCharacteristicProperties2,
+ BluetoothGattCharacteristic::kPermissionNone));
}
protected:
@@ -91,6 +155,9 @@ class BluetoothLowEnergyApiTest : public ExtensionApiTest {
scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device_;
scoped_ptr<testing::NiceMock<MockBluetoothGattService> > service0_;
scoped_ptr<testing::NiceMock<MockBluetoothGattService> > service1_;
+ scoped_ptr<testing::NiceMock<MockBluetoothGattCharacteristic> > chrc0_;
+ scoped_ptr<testing::NiceMock<MockBluetoothGattCharacteristic> > chrc1_;
+ scoped_ptr<testing::NiceMock<MockBluetoothGattCharacteristic> > chrc2_;
private:
scoped_refptr<extensions::Extension> empty_extension_;
@@ -256,6 +323,41 @@ IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetIncludedServices) {
listener.Reply("go");
listener.Reset();
+
+ EXPECT_TRUE(listener.WaitUntilSatisfied());
+
+ listener.Reply("go");
+
+ EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
+ event_router()->GattServiceRemoved(device_.get(), service0_.get());
+ event_router()->DeviceRemoved(mock_adapter_, device_.get());
+}
+
+IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetCharacteristics) {
+ ResultCatcher catcher;
+ catcher.RestrictToProfile(browser()->profile());
+
+ std::vector<BluetoothGattCharacteristic*> characteristics;
+ characteristics.push_back(chrc0_.get());
+ characteristics.push_back(chrc1_.get());
+
+ event_router()->DeviceAdded(mock_adapter_, device_.get());
+ event_router()->GattServiceAdded(device_.get(), service0_.get());
+
+ EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(3).WillRepeatedly(
+ Return(device_.get()));
+ EXPECT_CALL(*device_, GetGattService(kTestServiceId0))
+ .Times(3)
+ .WillOnce(Return(static_cast<BluetoothGattService*>(NULL)))
+ .WillRepeatedly(Return(service0_.get()));
+ EXPECT_CALL(*service0_, GetCharacteristics())
+ .Times(2)
+ .WillOnce(Return(std::vector<BluetoothGattCharacteristic*>()))
+ .WillOnce(Return(characteristics));
+
+ ExtensionTestMessageListener listener("ready", true);
+ ASSERT_TRUE(LoadExtension(
+ test_data_dir_.AppendASCII("bluetooth_low_energy/get_characteristics")));
EXPECT_TRUE(listener.WaitUntilSatisfied());
listener.Reply("go");

Powered by Google App Engine
This is Rietveld 408576698