| // Copyright 2018 The Chromium OS 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 "bluetooth/newblued/uuid.h" |
| |
| #include <stdint.h> |
| |
| #include <algorithm> |
| #include <array> |
| #include <vector> |
| |
| #include <gtest/gtest.h> |
| |
| namespace bluetooth { |
| |
| TEST(UUIDTest, UuidConstruction) { |
| std::vector<uint8_t> value_invalid = {0x01, 0x02, 0x03}; |
| |
| std::vector<uint8_t> value16 = {0x01, 0x02}; |
| std::array<uint8_t, 16> uuid16_value = { |
| 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x10, 0x00, |
| 0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb, |
| }; |
| |
| std::vector<uint8_t> value32 = {0x01, 0x02, 0x03, 0x04}; |
| std::array<uint8_t, 16> uuid32_value = { |
| 0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x10, 0x00, |
| 0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb, |
| }; |
| |
| std::vector<uint8_t> value128 = { |
| 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, |
| 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, |
| }; |
| std::array<uint8_t, 16> uuid128_value; |
| |
| std::copy(value128.begin(), value128.end(), uuid128_value.begin()); |
| |
| Uuid uuid16(value16); |
| Uuid uuid32(value32); |
| Uuid uuid128(value128); |
| Uuid uuid_invalid(value_invalid); |
| |
| EXPECT_EQ(UuidFormat::UUID16, uuid16.format()); |
| EXPECT_EQ(UuidFormat::UUID32, uuid32.format()); |
| EXPECT_EQ(UuidFormat::UUID128, uuid128.format()); |
| EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_invalid.format()); |
| |
| EXPECT_EQ(uuid16_value, uuid16.value()); |
| EXPECT_EQ(uuid32_value, uuid32.value()); |
| EXPECT_EQ(uuid128_value, uuid128.value()); |
| |
| Uuid uuid_16("0102"); |
| Uuid uuid_16_invalid("102"); |
| EXPECT_EQ(UuidFormat::UUID16, uuid_16.format()); |
| EXPECT_EQ(uuid16_value, uuid_16.value()); |
| EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_16_invalid.format()); |
| |
| Uuid uuid_32("01020304"); |
| Uuid uuid_32_invalid("0102030405"); |
| EXPECT_EQ(UuidFormat::UUID32, uuid_32.format()); |
| EXPECT_EQ(uuid32_value, uuid_32.value()); |
| EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_32_invalid.format()); |
| |
| Uuid uuid_128("00010203-0405-0607-0809-101112131415"); |
| Uuid uuid_too_long("00010203-0405-0607-0809-1011-1213-1415"); |
| Uuid uuid_too_short("00010203-0405-0607-0809101112131415"); |
| Uuid uuid_non_digit("00010203-0405-0607-0809-1011-2131415"); |
| Uuid uuid_misplaced("0001-002030405-0607-0809-101112131415"); |
| Uuid uuid_at("00010203-0405-0607@0809-101112131415"); |
| EXPECT_EQ(UuidFormat::UUID128, uuid_128.format()); |
| EXPECT_EQ(uuid128_value, uuid_128.value()); |
| EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_too_long.format()); |
| EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_too_short.format()); |
| EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_non_digit.format()); |
| EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_misplaced.format()); |
| EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_at.format()); |
| |
| Uuid uuid_empty; |
| EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_empty.format()); |
| } |
| |
| TEST(UUIDTest, UuidOperators) { |
| std::vector<uint8_t> value16 = {0x01, 0x02}; |
| std::vector<uint8_t> value16_in_128 = { |
| 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x10, 0x00, |
| 0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb, |
| }; |
| |
| std::vector<uint8_t> value32 = {0x01, 0x02, 0x03, 0x04}; |
| std::vector<uint8_t> value_invalid1 = {0x01}; |
| std::vector<uint8_t> value_invalid2 = {0x01, 0x02, 0x03}; |
| |
| Uuid uuid16(value16); |
| Uuid uuid16_in_128(value16_in_128); |
| Uuid uuid32(value32); |
| Uuid uuid_invalid1(value_invalid1); |
| Uuid uuid_invalid2(value_invalid2); |
| |
| EXPECT_EQ(uuid16, uuid16_in_128); |
| EXPECT_NE(uuid16, uuid_invalid1); |
| EXPECT_NE(uuid16, uuid32); |
| |
| EXPECT_FALSE(uuid_invalid1 < uuid_invalid2); |
| EXPECT_LT(uuid_invalid1, uuid16); |
| EXPECT_LT(uuid16, uuid32); |
| } |
| |
| } // namespace bluetooth |