diff options
Diffstat (limited to 'tests/auto/qbluetoothuuid/tst_qbluetoothuuid.cpp')
-rw-r--r-- | tests/auto/qbluetoothuuid/tst_qbluetoothuuid.cpp | 200 |
1 files changed, 101 insertions, 99 deletions
diff --git a/tests/auto/qbluetoothuuid/tst_qbluetoothuuid.cpp b/tests/auto/qbluetoothuuid/tst_qbluetoothuuid.cpp index 2206826d..377f788a 100644 --- a/tests/auto/qbluetoothuuid/tst_qbluetoothuuid.cpp +++ b/tests/auto/qbluetoothuuid/tst_qbluetoothuuid.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtBluetooth module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtTest/QtTest> #include <QUuid> @@ -33,6 +8,10 @@ #include <qbluetoothuuid.h> +#if defined(Q_OS_DARWIN) +#include <QtCore/private/qcore_mac_p.h> +#endif + #if defined(Q_OS_UNIX) # include <arpa/inet.h> # include <netinet/in.h> @@ -40,8 +19,6 @@ QT_USE_NAMESPACE -Q_DECLARE_METATYPE(quint128) - class tst_QBluetoothUuid : public QObject { Q_OBJECT @@ -59,12 +36,10 @@ private slots: void tst_conversion(); void tst_comparison_data(); void tst_comparison(); - void tst_quint128ToUuid(); }; tst_QBluetoothUuid::tst_QBluetoothUuid() { - qRegisterMetaType<quint128>(); } tst_QBluetoothUuid::~tst_QBluetoothUuid() @@ -84,7 +59,7 @@ void tst_QBluetoothUuid::tst_construction() } { - QBluetoothUuid uuid(QBluetoothUuid::PublicBrowseGroup); + QBluetoothUuid uuid(QBluetoothUuid::ServiceClassUuid::PublicBrowseGroup); QVERIFY(!uuid.isNull()); @@ -94,11 +69,11 @@ void tst_QBluetoothUuid::tst_construction() uuid16 = uuid.toUInt16(&ok); QVERIFY(ok); - QCOMPARE(uuid16, static_cast<quint16>(QBluetoothUuid::PublicBrowseGroup)); + QCOMPARE(uuid16, static_cast<quint16>(QBluetoothUuid::ServiceClassUuid::PublicBrowseGroup)); } { - QBluetoothUuid uuid(QBluetoothUuid::PublicBrowseGroup); + QBluetoothUuid uuid(QBluetoothUuid::ServiceClassUuid::PublicBrowseGroup); QBluetoothUuid copy(uuid); @@ -106,7 +81,7 @@ void tst_QBluetoothUuid::tst_construction() } { - QBluetoothUuid uuid(QBluetoothUuid::L2cap); + QBluetoothUuid uuid(QBluetoothUuid::ProtocolUuid::L2cap); QVERIFY(!uuid.isNull()); @@ -116,7 +91,7 @@ void tst_QBluetoothUuid::tst_construction() uuid16 = uuid.toUInt16(&ok); QVERIFY(ok); - QCOMPARE(uuid16, static_cast<quint16>(QBluetoothUuid::L2cap)); + QCOMPARE(uuid16, static_cast<quint16>(QBluetoothUuid::ProtocolUuid::L2cap)); } { @@ -146,7 +121,7 @@ void tst_QBluetoothUuid::tst_construction() void tst_QBluetoothUuid::tst_assignment() { - QBluetoothUuid uuid(QBluetoothUuid::PublicBrowseGroup); + QBluetoothUuid uuid(QBluetoothUuid::ServiceClassUuid::PublicBrowseGroup); { QBluetoothUuid copy = uuid; @@ -173,42 +148,6 @@ void tst_QBluetoothUuid::tst_assignment() #define BASEUUID "-0000-1000-8000-00805F9B34FB" -#define UUID128_32(x, a, b, c, d) \ - quint128 x = { \ - { \ - a, b, c, d, \ - 0x00, 0x00, \ - 0x10, 0x00, \ - 0x80, 0x00, \ - 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB \ - } \ - } - -#define UUID128_16(x, a, b) UUID128_32(x, 0, 0, a, b) - -#define NEWROW16(text, a, b, s) \ -do { \ - UUID128_16(uuid128, a, b); \ - quint32 uuid32 = a << 8 | b; \ - quint16 uuid16 = a << 8 | b; \ - QTest::newRow(text) << true << uuid16 << true << uuid32 << true << uuid128 \ - << (QLatin1Char('{') + QLatin1String(s) + QLatin1Char('}')); \ -} while (0) - -#define NEWROW32(text, a, b, c, d, s) \ -do { \ - UUID128_32(uuid128, a, b, c, d); \ - quint32 uuid32 = a << 24 | b << 16 | c << 8 | d; \ - quint16 uuid16; \ - bool constructUuid16 = (a == 0) && (b == 0); \ - if (constructUuid16) \ - uuid16 = c << 8 | d; \ - else \ - uuid16 = 0; \ - QTest::newRow(text) << constructUuid16 << uuid16 << true << uuid32 << true << uuid128 \ - << (QLatin1Char('{') + QLatin1String(s) + QLatin1Char('}')); \ -} while (0) - void tst_QBluetoothUuid::tst_conversion_data() { QTest::addColumn<bool>("constructUuid16"); @@ -216,19 +155,53 @@ void tst_QBluetoothUuid::tst_conversion_data() QTest::addColumn<bool>("constructUuid32"); QTest::addColumn<quint32>("uuid32"); QTest::addColumn<bool>("constructUuid128"); - QTest::addColumn<quint128>("uuid128"); + QTest::addColumn<QUuid::Id128Bytes>("uuid128"); QTest::addColumn<QString>("uuidS"); - NEWROW32("base uuid", 0x00, 0x00, 0x00, 0x00, "00000000" BASEUUID); - NEWROW16("0x0001", 0x00, 0x01, "00000001" BASEUUID); - NEWROW16("0xffff", 0xff, 0xff, "0000FFFF" BASEUUID); - NEWROW32("0x00010000", 0x00, 0x01, 0x00, 0x00, "00010000" BASEUUID); - NEWROW32("0x0001ffff", 0x00, 0x01, 0xff, 0xff, "0001FFFF" BASEUUID); - NEWROW32("0xffff0000", 0xff, 0xff, 0x00, 0x00, "FFFF0000" BASEUUID); - NEWROW32("0xffffffff", 0xff, 0xff, 0xff, 0xff, "FFFFFFFF" BASEUUID); + static const auto uuid128_32 = [](quint8 a, quint8 b, quint8 c, quint8 d) { + QUuid::Id128Bytes x = { + { + a, b, c, d, + 0x00, 0x00, + 0x10, 0x00, + 0x80, 0x00, + 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB + } + }; + return x; + }; + + auto newRow32 = [](const char *name, quint8 a, quint8 b, quint8 c, quint8 d, const char *s) { + auto uuid128 = uuid128_32(a, b, c, d); + quint32 uuid32 = a << 24 | b << 16 | c << 8 | d; + quint16 uuid16; \ + bool constructUuid16 = (a == 0) && (b == 0); + if (constructUuid16) + uuid16 = c << 8 | d; + else + uuid16 = 0; + QTest::newRow(name) << constructUuid16 << uuid16 << true << uuid32 << true << uuid128 + << (QLatin1Char('{') + QLatin1String(s) + QLatin1Char('}')); + }; + + auto newRow16 = [](const char *name, quint8 a, quint8 b, const char *s) { + auto uuid128 = uuid128_32(0, 0, a, b); + quint32 uuid32 = a << 8 | b; + quint16 uuid16 = a << 8 | b; + QTest::newRow(name) << true << uuid16 << true << uuid32 << true << uuid128 + << (QLatin1Char('{') + QLatin1String(s) + QLatin1Char('}')); + }; + + newRow32("base uuid", 0x00, 0x00, 0x00, 0x00, "00000000" BASEUUID); + newRow16("0x0001", 0x00, 0x01, "00000001" BASEUUID); + newRow16("0xffff", 0xff, 0xff, "0000FFFF" BASEUUID); + newRow32("0x00010000", 0x00, 0x01, 0x00, 0x00, "00010000" BASEUUID); + newRow32("0x0001ffff", 0x00, 0x01, 0xff, 0xff, "0001FFFF" BASEUUID); + newRow32("0xffff0000", 0xff, 0xff, 0x00, 0x00, "FFFF0000" BASEUUID); + newRow32("0xffffffff", 0xff, 0xff, 0xff, 0xff, "FFFFFFFF" BASEUUID); { - quint128 uuid128 = { + QUuid::Id128Bytes uuid128 = { { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, @@ -251,7 +224,7 @@ void tst_QBluetoothUuid::tst_conversion() QFETCH(bool, constructUuid32); QFETCH(quint32, uuid32); QFETCH(bool, constructUuid128); - QFETCH(quint128, uuid128); + QFETCH(QUuid::Id128Bytes, uuid128); QFETCH(QString, uuidS); int minimumSize = 16; @@ -260,9 +233,21 @@ void tst_QBluetoothUuid::tst_conversion() else if (constructUuid32) minimumSize = 4; +#if defined(Q_OS_DARWIN) +#define CHECK_PLATFORM_CONVERSION(qtUuid) \ + const QMacAutoReleasePool pool; \ + CBUUID *nativeUuid = qtUuid.toCBUUID(); \ + QVERIFY(nativeUuid); \ + QCOMPARE(qtUuid, QBluetoothUuid::fromCBUUID(nativeUuid)); +#else +#define CHECK_PLATFORM_CONVERSION(qtUuid) +#endif // Q_OS_DARWIN + if (constructUuid16) { QBluetoothUuid uuid(uuid16); + QCOMPARE(uuid, QBluetoothUuid(QStringView{uuidS})); + bool ok; QCOMPARE(uuid.toUInt16(&ok), uuid16); @@ -271,16 +256,20 @@ void tst_QBluetoothUuid::tst_conversion() QCOMPARE(uuid.toUInt32(&ok), uuid32); QVERIFY(ok); - QVERIFY(memcmp(uuid.toUInt128().data, uuid128.data, 16) == 0); + QVERIFY(memcmp(uuid.toBytes().data, uuid128.data, 16) == 0); QCOMPARE(uuid.toString().toUpper(), uuidS.toUpper()); QCOMPARE(uuid.minimumSize(), minimumSize); + + CHECK_PLATFORM_CONVERSION(uuid) } if (constructUuid32) { QBluetoothUuid uuid(uuid32); + QCOMPARE(uuid, QBluetoothUuid(QLatin1StringView{uuidS.toLatin1()})); + bool ok; quint16 tmp = uuid.toUInt16(&ok); @@ -292,16 +281,20 @@ void tst_QBluetoothUuid::tst_conversion() QCOMPARE(uuid.toUInt32(&ok), uuid32); QVERIFY(ok); - QVERIFY(memcmp(uuid.toUInt128().data, uuid128.data, 16) == 0); + QVERIFY(memcmp(uuid.toBytes().data, uuid128.data, 16) == 0); QCOMPARE(uuid.toString().toUpper(), uuidS.toUpper()); QCOMPARE(uuid.minimumSize(), minimumSize); + + CHECK_PLATFORM_CONVERSION(uuid) } if (constructUuid128) { QBluetoothUuid uuid(uuid128); + QCOMPARE(uuid, QBluetoothUuid(QUtf8StringView{uuidS.toUtf8()})); + bool ok; quint16 tmpUuid16 = uuid.toUInt16(&ok); @@ -314,12 +307,15 @@ void tst_QBluetoothUuid::tst_conversion() if (ok) QCOMPARE(tmpUuid32, uuid32); - QVERIFY(memcmp(uuid.toUInt128().data, uuid128.data, 16) == 0); + QVERIFY(memcmp(uuid.toBytes().data, uuid128.data, 16) == 0); QCOMPARE(uuid.toString().toUpper(), uuidS.toUpper()); QCOMPARE(uuid.minimumSize(), minimumSize); + + CHECK_PLATFORM_CONVERSION(uuid) } +#undef CHECK_PLATFORM_CONVERSION } void tst_QBluetoothUuid::tst_comparison_data() @@ -334,7 +330,7 @@ void tst_QBluetoothUuid::tst_comparison() QFETCH(bool, constructUuid32); QFETCH(quint32, uuid32); QFETCH(bool, constructUuid128); - QFETCH(quint128, uuid128); + QFETCH(QUuid::Id128Bytes, uuid128); QVERIFY(QBluetoothUuid() == QBluetoothUuid()); @@ -367,22 +363,28 @@ void tst_QBluetoothUuid::tst_comparison() QBluetoothUuid quuid128(uuid128); for (int var = 0; var < 16; ++var) { - QVERIFY(quuid128.toUInt128().data[var] == uuid128.data[var]); + QVERIFY(quuid128.toBytes().data[var] == uuid128.data[var]); } - } -} -void tst_QBluetoothUuid::tst_quint128ToUuid() -{ - QBluetoothUuid temp(QString("{67C8770B-44F1-410A-AB9A-F9B5446F13EE}")); - quint128 array = temp.toUInt128(); - QBluetoothUuid u(array); - QVERIFY(temp == u); - - QBENCHMARK { - QBluetoothUuid u(array); + // check that toUInt128() call returns the value in the same format as + // QUuid::Id128Bytes, no matter what version we use (it can be + // QUuid::toUint128() on platforms that define __SIZEOF_INT128__ or + // QBluetoothUuid::toUint128() on other platforms). + const quint128 i128 = quuid128.toUInt128(); + static_assert(sizeof(i128) == 16); // uint128 or QUuid::Id128Bytes + uchar dst[16]; + memcpy(dst, &i128, sizeof(i128)); + for (int var = 0; var < 16; ++var) + QCOMPARE_EQ(dst[var], uuid128.data[var]); + + // check that we always have a c-tor taking quint128 + QBluetoothUuid other{i128}; + const auto bytes = other.toBytes(); + for (int var = 0; var < 16; ++var) + QCOMPARE_EQ(bytes.data[var], uuid128.data[var]); } } + QTEST_MAIN(tst_QBluetoothUuid) #include "tst_qbluetoothuuid.moc" |