Chromium Code Reviews| Index: components/arc/bluetooth/bluetooth_type_converters_unittest.cc |
| diff --git a/components/arc/bluetooth/bluetooth_type_converters_unittest.cc b/components/arc/bluetooth/bluetooth_type_converters_unittest.cc |
| index 57e296d2516ab7544bd68f75f861ed5c1b859fea..1b764d8202270f0179f9dba2a7b7eceaf8930a3d 100644 |
| --- a/components/arc/bluetooth/bluetooth_type_converters_unittest.cc |
| +++ b/components/arc/bluetooth/bluetooth_type_converters_unittest.cc |
| @@ -4,15 +4,20 @@ |
| #include "components/arc/bluetooth/bluetooth_type_converters.h" |
| +#include <algorithm> |
| +#include <memory> |
| #include <string> |
| #include <vector> |
| +#include "base/values.h" |
| #include "device/bluetooth/bluetooth_gatt_service.h" |
| #include "device/bluetooth/bluetooth_uuid.h" |
| +#include "device/bluetooth/bluez/bluetooth_service_attribute_value_bluez.h" |
| #include "mojo/public/cpp/bindings/array.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| namespace { |
| + |
| constexpr char kAddressStr[] = "1A:2B:3C:4D:5E:6F"; |
| constexpr char kInvalidAddressStr[] = "00:00:00:00:00:00"; |
| constexpr uint8_t kAddressArray[] = {0x1a, 0x2b, 0x3c, 0x4d, 0x5e, 0x6f}; |
| @@ -23,6 +28,66 @@ constexpr uint8_t kUuidArray[] = {0x12, 0x34, 0x56, 0x78, 0x12, 0x34, |
| 0x23, 0x45, 0x67, 0x89}; |
| constexpr size_t kUuidSize = 16; |
| constexpr uint8_t kFillerByte = 0x79; |
| + |
| +arc::mojom::BluetoothSdpAttributePtr CreateDeepMojoSequenceAttribute( |
| + int layer) { |
| + auto value = arc::mojom::BluetoothSdpAttribute::New(); |
| + |
| + if (layer < mojo::BLUETOOTH_SDP_MAX_LAYER + 3) { |
| + value->type = bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE; |
| + value->value.Clear(); |
| + value->sequence.push_back(CreateDeepMojoSequenceAttribute(layer + 1)); |
| + value->type_size = static_cast<uint32_t>(value->sequence.size()); |
| + } else { |
| + uint16_t data = 3; |
| + value->type = bluez::BluetoothServiceAttributeValueBlueZ::UINT; |
| + value->type_size = static_cast<uint32_t>(sizeof(data)); |
| + value->value.AppendInteger(static_cast<int>(data)); |
| + value->sequence = mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0); |
| + } |
| + return value; |
| +} |
| + |
| +int CountDepthOfBlueZAttribute( |
|
rickyz (no longer on Chrome)
2016/09/02 02:25:20
I think the normal way to write this is without th
Miao
2016/09/02 18:10:08
Done.
|
| + int layer, |
| + const bluez::BluetoothServiceAttributeValueBlueZ& attribute) { |
| + if (attribute.type() == |
| + bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE) { |
| + int depth = 0; |
| + for (const auto& value : attribute.sequence()) |
| + depth = std::max(CountDepthOfBlueZAttribute(layer + 1, value), depth); |
| + return depth; |
| + } |
| + return layer; |
| +} |
| + |
| +bluez::BluetoothServiceAttributeValueBlueZ CreateDeepBlueZSequenceAttribute( |
| + int layer) { |
| + if (layer < mojo::BLUETOOTH_SDP_MAX_LAYER + 3) { |
| + std::unique_ptr<bluez::BluetoothServiceAttributeValueBlueZ::Sequence> |
| + sequence(new bluez::BluetoothServiceAttributeValueBlueZ::Sequence()); |
| + sequence->push_back(CreateDeepBlueZSequenceAttribute(layer + 1)); |
| + |
| + return bluez::BluetoothServiceAttributeValueBlueZ(std::move(sequence)); |
| + } else { |
| + return bluez::BluetoothServiceAttributeValueBlueZ( |
| + bluez::BluetoothServiceAttributeValueBlueZ::UINT, sizeof(uint16_t), |
| + base::WrapUnique(new base::FundamentalValue(3))); |
| + } |
| +} |
| + |
| +int CountDepthOfMojoAttribute( |
| + int layer, |
| + const arc::mojom::BluetoothSdpAttributePtr& attribute) { |
| + if (attribute->type == bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE) { |
| + int depth = 0; |
| + for (const auto& value : attribute->sequence) |
| + depth = std::max(CountDepthOfMojoAttribute(layer + 1, value), depth); |
| + return depth; |
| + } |
| + return layer; |
| +} |
| + |
| } // namespace |
| namespace mojo { |
| @@ -80,4 +145,370 @@ TEST(BluetoothTypeConvertorTest, |
| EXPECT_FALSE(uuidMojo.To<device::BluetoothUUID>().IsValid()); |
| } |
| +TEST(BluetoothTypeConvertorTest, ConvertMojoValueAttributeToBlueZAttribute) { |
| + // Construct Mojo attribute with NULLTYPE value. |
| + auto nulltypeAttributeMojo = arc::mojom::BluetoothSdpAttribute::New(); |
| + nulltypeAttributeMojo->type = |
| + bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE; |
| + nulltypeAttributeMojo->type_size = 0; |
| + nulltypeAttributeMojo->value.Append(base::Value::CreateNullValue()); |
| + nulltypeAttributeMojo->sequence = |
| + mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0); |
| + |
| + auto nulltypeAttributeBlueZ = |
| + nulltypeAttributeMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>(); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE, |
| + nulltypeAttributeBlueZ.type()); |
| + EXPECT_EQ((size_t)0, nulltypeAttributeBlueZ.size()); |
|
rickyz (no longer on Chrome)
2016/09/02 02:25:20
nit: Would prefer 0u or size_t(0) here and elsewhe
Miao
2016/09/02 18:10:08
Done.
|
| + EXPECT_EQ(base::Value::TYPE_NULL, nulltypeAttributeBlueZ.value().GetType()); |
| + |
| + // Construct Mojo attribute with TYPE_BOOLEAN value. |
| + bool valueBool = true; |
| + auto boolAttributeMojo = arc::mojom::BluetoothSdpAttribute::New(); |
| + boolAttributeMojo->type = bluez::BluetoothServiceAttributeValueBlueZ::BOOL; |
| + boolAttributeMojo->type_size = static_cast<uint32_t>(sizeof(valueBool)); |
| + boolAttributeMojo->value.AppendBoolean(valueBool); |
| + boolAttributeMojo->sequence = |
| + mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0); |
| + |
| + auto boolAttributeBlueZ = |
| + boolAttributeMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>(); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::BOOL, |
| + boolAttributeBlueZ.type()); |
| + EXPECT_EQ(sizeof(valueBool), boolAttributeBlueZ.size()); |
| + EXPECT_EQ(base::Value::TYPE_BOOLEAN, boolAttributeBlueZ.value().GetType()); |
| + EXPECT_TRUE(boolAttributeBlueZ.value().GetAsBoolean(&valueBool)); |
| + EXPECT_TRUE(valueBool); |
| + |
| + // Construct Mojo attribute with TYPE_UINT value. |
| + uint16_t valueUint16 = 10; |
| + int valueUint16AsInt = 0; |
| + auto uintAttributeMojo = arc::mojom::BluetoothSdpAttribute::New(); |
| + uintAttributeMojo->type = bluez::BluetoothServiceAttributeValueBlueZ::UINT; |
| + uintAttributeMojo->type_size = static_cast<uint32_t>(sizeof(valueUint16)); |
| + uintAttributeMojo->value.AppendInteger(static_cast<int>(valueUint16)); |
| + uintAttributeMojo->sequence = |
| + mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0); |
| + |
| + auto uintAttributeBlueZ = |
| + uintAttributeMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>(); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UINT, |
| + uintAttributeBlueZ.type()); |
| + EXPECT_EQ(sizeof(valueUint16), uintAttributeBlueZ.size()); |
| + EXPECT_EQ(base::Value::TYPE_INTEGER, uintAttributeBlueZ.value().GetType()); |
| + EXPECT_TRUE(uintAttributeBlueZ.value().GetAsInteger(&valueUint16AsInt)); |
| + EXPECT_EQ(valueUint16, static_cast<uint16_t>(valueUint16AsInt)); |
| + |
| + // Construct Mojo attribute with TYPE_INT value. |
| + int16_t valueInt16 = 20; |
| + int valueInt16AsInt = 0; |
| + auto intAttributeMojo = arc::mojom::BluetoothSdpAttribute::New(); |
| + intAttributeMojo->type = bluez::BluetoothServiceAttributeValueBlueZ::INT; |
| + intAttributeMojo->type_size = static_cast<uint32_t>(sizeof(valueInt16)); |
| + intAttributeMojo->value.AppendInteger(static_cast<int>(valueInt16)); |
| + intAttributeMojo->sequence = |
| + mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0); |
| + |
| + auto intAttributeBlueZ = |
| + intAttributeMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>(); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::INT, |
| + intAttributeBlueZ.type()); |
| + EXPECT_EQ(sizeof(valueInt16), intAttributeBlueZ.size()); |
| + EXPECT_EQ(base::Value::TYPE_INTEGER, intAttributeBlueZ.value().GetType()); |
| + EXPECT_TRUE(intAttributeBlueZ.value().GetAsInteger(&valueInt16AsInt)); |
| + EXPECT_EQ(valueInt16, static_cast<int16_t>(valueInt16AsInt)); |
| + |
| + // Construct Mojo attribute with TYPE_UUID. |
| + std::string expectedUUID("00000000-0000-1000-8000-00805f9b34fb"); |
| + std::string actualUUID; |
| + auto uuidAttributeMojo = arc::mojom::BluetoothSdpAttribute::New(); |
| + uuidAttributeMojo->type = bluez::BluetoothServiceAttributeValueBlueZ::UUID; |
| + // UUIDs are all stored in string form, but it can be converted to one of |
| + // UUID16, UUID32 and UUID128. |
| + uuidAttributeMojo->type_size = static_cast<uint32_t>(sizeof(uint16_t)); |
| + uuidAttributeMojo->value.AppendString(expectedUUID); |
| + uuidAttributeMojo->sequence = |
| + mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0); |
| + |
| + auto uuidAttributeBlueZ = |
| + uuidAttributeMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>(); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UUID, |
| + uuidAttributeBlueZ.type()); |
| + EXPECT_EQ(sizeof(uint16_t), uuidAttributeBlueZ.size()); |
| + EXPECT_EQ(base::Value::TYPE_STRING, uuidAttributeBlueZ.value().GetType()); |
| + EXPECT_TRUE(uuidAttributeBlueZ.value().GetAsString(&actualUUID)); |
| + EXPECT_EQ(expectedUUID, actualUUID); |
| + |
| + // Construct Mojo attribute with TYPE_STRING. TYPE_URL is the same case as |
| + // TYPE_STRING. |
| + std::string expectedString("Some SDP service"); |
| + std::string actualString; |
| + auto stringAttributeMojo = arc::mojom::BluetoothSdpAttribute::New(); |
| + stringAttributeMojo->type = |
| + bluez::BluetoothServiceAttributeValueBlueZ::STRING; |
| + stringAttributeMojo->type_size = |
| + static_cast<uint32_t>(expectedString.length()); |
| + stringAttributeMojo->value.AppendString(expectedString); |
| + stringAttributeMojo->sequence = |
| + mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0); |
| + |
| + auto stringAttributeBlueZ = |
| + stringAttributeMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>(); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::STRING, |
| + stringAttributeBlueZ.type()); |
| + EXPECT_EQ(expectedString.length(), stringAttributeBlueZ.size()); |
| + EXPECT_EQ(base::Value::TYPE_STRING, stringAttributeBlueZ.value().GetType()); |
| + EXPECT_TRUE(stringAttributeBlueZ.value().GetAsString(&actualString)); |
| + EXPECT_EQ(expectedString, actualString); |
| +} |
| + |
| +TEST(BluetoothTypeConvertorTest, ConvertMojoSequenceAttributeToBlueZAttribute) { |
| + // Create an UUID value. |
| + std::string l2capUUID("00000100-0000-1000-8000-00805f9b34fb"); |
| + auto valueUUID = arc::mojom::BluetoothSdpAttribute::New(); |
| + valueUUID->type = bluez::BluetoothServiceAttributeValueBlueZ::UUID; |
| + valueUUID->type_size = static_cast<uint32_t>(sizeof(uint16_t)); |
| + valueUUID->value.AppendString(l2capUUID); |
| + valueUUID->sequence = |
| + mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0); |
| + |
| + // Create an UINT value. |
| + uint16_t l2capChannel = 3; |
| + auto valueUint16 = arc::mojom::BluetoothSdpAttribute::New(); |
| + valueUint16->type = bluez::BluetoothServiceAttributeValueBlueZ::UINT; |
| + valueUint16->type_size = static_cast<uint32_t>(sizeof(l2capChannel)); |
| + valueUint16->value.AppendInteger(static_cast<int>(l2capChannel)); |
| + valueUint16->sequence = |
| + mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0); |
| + |
| + // Create a sequence with the above two values. |
| + auto sequenceMojo = arc::mojom::BluetoothSdpAttribute::New(); |
| + sequenceMojo->type = bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE; |
| + sequenceMojo->sequence.push_back(std::move(valueUUID)); |
| + sequenceMojo->sequence.push_back(std::move(valueUint16)); |
| + sequenceMojo->type_size = sequenceMojo->sequence.size(); |
| + sequenceMojo->value.Clear(); |
| + |
| + auto sequenceBlueZ = |
| + sequenceMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>(); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE, |
| + sequenceBlueZ.type()); |
| + EXPECT_EQ(sequenceMojo->sequence.size(), sequenceBlueZ.sequence().size()); |
| + |
| + const auto& sequence = sequenceBlueZ.sequence(); |
| + std::string uuid; |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UUID, |
| + sequence.at(0).type()); |
| + EXPECT_EQ(sizeof(uint16_t), sequence.at(0).size()); |
| + EXPECT_TRUE(sequence.at(0).value().GetAsString(&uuid)); |
| + EXPECT_EQ(l2capUUID, uuid); |
| + |
| + int channel; |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UINT, |
| + sequence.at(1).type()); |
| + EXPECT_EQ(sizeof(l2capChannel), sequence.at(1).size()); |
| + EXPECT_TRUE(sequence.at(1).value().GetAsInteger(&channel)); |
| + EXPECT_EQ(l2capChannel, static_cast<uint16_t>(channel)); |
| +} |
| + |
| +TEST(BluetoothTypeConvertorTest, |
| + ConvertInvalidMojoValueAttributeToBlueZAttribute) { |
| + // Create a Mojo attribute without value defined. |
| + auto valueNoData = arc::mojom::BluetoothSdpAttribute::New(); |
| + valueNoData->type = bluez::BluetoothServiceAttributeValueBlueZ::UINT; |
| + valueNoData->type_size = static_cast<uint32_t>(sizeof(uint32_t)); |
| + valueNoData->value.Clear(); |
| + valueNoData->sequence = |
| + mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0); |
| + |
| + auto valueNoDataBlueZ = |
| + valueNoData.To<bluez::BluetoothServiceAttributeValueBlueZ>(); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE, |
| + valueNoDataBlueZ.type()); |
| + EXPECT_EQ((size_t)0, valueNoDataBlueZ.size()); |
| + EXPECT_EQ(base::Value::TYPE_NULL, valueNoDataBlueZ.value().GetType()); |
| +} |
| + |
| +TEST(BluetoothTypeConvertorTest, |
| + ConvertInvalidMojoSequenceAttributeToBlueZAttribute) { |
| + // Create a Mojo attribute with an empty sequence. |
| + auto sequenceNoData = arc::mojom::BluetoothSdpAttribute::New(); |
| + sequenceNoData->type = bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE; |
| + sequenceNoData->type_size = 0; |
| + sequenceNoData->value.Append(base::Value::CreateNullValue()); |
| + sequenceNoData->sequence = |
| + mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0); |
| + |
| + auto sequenceNoDataBlueZ = |
| + sequenceNoData.To<bluez::BluetoothServiceAttributeValueBlueZ>(); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE, |
| + sequenceNoDataBlueZ.type()); |
| + EXPECT_EQ((size_t)0, sequenceNoDataBlueZ.size()); |
| + EXPECT_EQ(base::Value::TYPE_NULL, sequenceNoDataBlueZ.value().GetType()); |
| + |
| + // Create a Mojo attriubte with the depth = BLUETOOTH_SDP_MAX_LAYER + 3. |
| + auto sequenceTooDeepMojo = CreateDeepMojoSequenceAttribute(0); |
| + auto sequenceTooDeepBlueZ = |
| + sequenceTooDeepMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>(); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE, |
| + sequenceTooDeepBlueZ.type()); |
| + EXPECT_EQ((size_t)1, sequenceTooDeepBlueZ.size()); |
| + EXPECT_EQ(mojo::BLUETOOTH_SDP_MAX_LAYER, |
| + CountDepthOfBlueZAttribute(0, sequenceTooDeepBlueZ)); |
| +} |
| + |
| +TEST(BluetoothTypeConvertorTest, ConvertBlueZValueAttributeToMojoAttribute) { |
| + // Check NULL type. |
| + auto nulltypeAttributeBlueZ = bluez::BluetoothServiceAttributeValueBlueZ(); |
| + base::Value* actualValue; |
| + |
| + auto nulltypeAttributeMojo = |
| + ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(nulltypeAttributeBlueZ); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE, |
| + nulltypeAttributeMojo->type); |
| + EXPECT_EQ((size_t)0, nulltypeAttributeMojo->type_size); |
| + EXPECT_TRUE(nulltypeAttributeMojo->value.Get(0, &actualValue)); |
| + EXPECT_EQ(base::Value::TYPE_NULL, actualValue->GetType()); |
| + |
| + // Check integer types (INT, UINT). |
| + uint16_t valueUint16 = 10; |
| + int valueUint16AsInt; |
| + auto uintAttributeBlueZ = bluez::BluetoothServiceAttributeValueBlueZ( |
| + bluez::BluetoothServiceAttributeValueBlueZ::UINT, sizeof(valueUint16), |
| + base::MakeUnique<base::FundamentalValue>( |
| + base::FundamentalValue(static_cast<int>(valueUint16)))); |
| + |
| + auto uintAttributeMojo = |
| + ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(uintAttributeBlueZ); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UINT, |
| + uintAttributeMojo->type); |
| + EXPECT_EQ(sizeof(valueUint16), uintAttributeMojo->type_size); |
| + EXPECT_TRUE(uintAttributeMojo->value.GetInteger(0, &valueUint16AsInt)); |
| + EXPECT_EQ(valueUint16, static_cast<uint16_t>(valueUint16AsInt)); |
| + |
| + // Check bool type. |
| + bool valueBool = false; |
| + bool actualBool = true; |
| + auto boolAttributeBlueZ = bluez::BluetoothServiceAttributeValueBlueZ( |
| + bluez::BluetoothServiceAttributeValueBlueZ::BOOL, sizeof(bool), |
| + base::MakeUnique<base::FundamentalValue>( |
| + base::FundamentalValue(valueBool))); |
| + |
| + auto boolAttributeMojo = |
| + ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(boolAttributeBlueZ); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::BOOL, |
| + boolAttributeMojo->type); |
| + EXPECT_EQ(static_cast<uint32_t>(sizeof(valueBool)), |
| + boolAttributeMojo->type_size); |
| + EXPECT_TRUE(boolAttributeMojo->value.GetBoolean(0, &actualBool)); |
| + EXPECT_FALSE(valueBool); |
| + |
| + // Check UUID type. |
| + std::string valueUUID("00000100-0000-1000-8000-00805f9b34fb"); |
| + std::string actualUUID; |
| + auto uuidAttributeBlueZ = bluez::BluetoothServiceAttributeValueBlueZ( |
| + bluez::BluetoothServiceAttributeValueBlueZ::UUID, sizeof(uint16_t), |
| + base::MakeUnique<base::StringValue>(base::StringValue(valueUUID))); |
| + |
| + auto uuidAttributeMojo = |
| + ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(uuidAttributeBlueZ); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UUID, |
| + uuidAttributeMojo->type); |
| + EXPECT_EQ(static_cast<uint32_t>(sizeof(uint16_t)), |
| + uuidAttributeMojo->type_size); |
| + EXPECT_TRUE(uuidAttributeMojo->value.GetString(0, &actualUUID)); |
| + EXPECT_EQ(valueUUID, actualUUID); |
| + |
| + // Check string types (STRING, URL). |
| + std::string valueString("Some Service Name"); |
| + std::string actualString; |
| + auto stringAttributeBlueZ = bluez::BluetoothServiceAttributeValueBlueZ( |
| + bluez::BluetoothServiceAttributeValueBlueZ::STRING, valueString.length(), |
| + base::MakeUnique<base::StringValue>(valueString)); |
| + |
| + auto stringAttributeMojo = |
| + ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(stringAttributeBlueZ); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::STRING, |
| + stringAttributeMojo->type); |
| + EXPECT_EQ(static_cast<uint32_t>(valueString.length()), |
| + stringAttributeMojo->type_size); |
| + EXPECT_TRUE(stringAttributeMojo->value.GetString(0, &actualString)); |
| + EXPECT_EQ(valueString, actualString); |
| +} |
| + |
| +TEST(BluetoothTypeConvertorTest, ConvertBlueZSequenceAttributeToMojoAttribute) { |
| + std::string l2capUUID("00000100-0000-1000-8000-00805f9b34fb"); |
| + uint16_t l2capChannel = 3; |
| + |
| + std::unique_ptr<bluez::BluetoothServiceAttributeValueBlueZ::Sequence> |
| + sequence(new bluez::BluetoothServiceAttributeValueBlueZ::Sequence()); |
| + sequence->push_back(bluez::BluetoothServiceAttributeValueBlueZ( |
| + bluez::BluetoothServiceAttributeValueBlueZ::UUID, sizeof(uint16_t), |
| + base::MakeUnique<base::StringValue>(base::StringValue(l2capUUID)))); |
| + sequence->push_back(bluez::BluetoothServiceAttributeValueBlueZ( |
| + bluez::BluetoothServiceAttributeValueBlueZ::UINT, sizeof(uint16_t), |
| + base::MakeUnique<base::FundamentalValue>( |
| + base::FundamentalValue(l2capChannel)))); |
| + |
| + auto sequenceBlueZ = |
| + bluez::BluetoothServiceAttributeValueBlueZ(std::move(sequence)); |
| + |
| + ASSERT_EQ((size_t)2, sequenceBlueZ.sequence().size()); |
| + |
| + auto sequenceMojo = |
| + ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(sequenceBlueZ); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE, |
| + sequenceMojo->type); |
| + EXPECT_EQ(static_cast<uint32_t>(sequenceBlueZ.size()), |
| + sequenceMojo->type_size); |
| + EXPECT_EQ(sequenceMojo->type_size, sequenceMojo->sequence.size()); |
| + |
| + std::string uuid; |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UUID, |
| + sequenceMojo->sequence[0]->type); |
| + EXPECT_EQ(static_cast<uint32_t>(sizeof(uint16_t)), |
| + sequenceMojo->sequence[0]->type_size); |
| + EXPECT_TRUE(sequenceMojo->sequence[0]->value.GetString(0, &uuid)); |
| + EXPECT_EQ(l2capUUID, uuid); |
| + |
| + int channel; |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UINT, |
| + sequenceMojo->sequence[1]->type); |
| + EXPECT_EQ(static_cast<uint32_t>(sizeof(uint16_t)), |
| + sequenceMojo->sequence[1]->type_size); |
| + EXPECT_TRUE(sequenceMojo->sequence[1]->value.GetInteger(0, &channel)); |
| + EXPECT_EQ(l2capChannel, static_cast<uint16_t>(channel)); |
| +} |
| + |
| +TEST(BluetoothTypeConvertorTest, |
| + ConvertDeepBlueZSequenceAttributeToBlueZAttribute) { |
| + bluez::BluetoothServiceAttributeValueBlueZ sequenceBlueZ = |
| + CreateDeepBlueZSequenceAttribute(0); |
| + |
| + auto sequenceMojo = |
| + ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(sequenceBlueZ); |
| + |
| + EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE, |
| + sequenceMojo->type); |
| + EXPECT_EQ((uint32_t)1, sequenceMojo->type_size); |
| + EXPECT_EQ(mojo::BLUETOOTH_SDP_MAX_LAYER, |
| + CountDepthOfMojoAttribute(0, sequenceMojo)); |
| +} |
| + |
| } // namespace mojo |