diff options
Diffstat (limited to 'tests/auto/qnearfieldmanager/tst_qnearfieldmanager.cpp')
-rw-r--r-- | tests/auto/qnearfieldmanager/tst_qnearfieldmanager.cpp | 268 |
1 files changed, 72 insertions, 196 deletions
diff --git a/tests/auto/qnearfieldmanager/tst_qnearfieldmanager.cpp b/tests/auto/qnearfieldmanager/tst_qnearfieldmanager.cpp index c3c457e9..a902ac5d 100644 --- a/tests/auto/qnearfieldmanager/tst_qnearfieldmanager.cpp +++ b/tests/auto/qnearfieldmanager/tst_qnearfieldmanager.cpp @@ -1,39 +1,14 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNfc 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) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtTest/QtTest> -#include <private/qnearfieldmanager_emulator_p.h> -#include <qnearfieldmanager.h> -#include <qndefnfctextrecord.h> -#include <qndefnfcurirecord.h> -#include <qndefmessage.h> -#include <qndefrecord.h> +#include <qnearfieldmanager_emulator_p.h> +#include <QtNfc/qnearfieldmanager.h> +#include <QtNfc/qndefnfctextrecord.h> +#include <QtNfc/qndefnfcurirecord.h> +#include <QtNfc/qndefmessage.h> +#include <QtNfc/qndefrecord.h> QT_USE_NAMESPACE @@ -52,18 +27,13 @@ public: private slots: void initTestCase(); - void targetDetected_data(); - void targetDetected(); - - void unregisterNdefMessageHandler(); - - void registerNdefMessageHandler(); + void isSupported(); + void isSupported_data(); - void registerNdefMessageHandler_type_data(); - void registerNdefMessageHandler_type(); + void userInformation(); - void registerNdefMessageHandler_filter_data(); - void registerNdefMessageHandler_filter(); + void targetDetected_data(); + void targetDetected(); }; tst_QNearFieldManager::tst_QNearFieldManager() @@ -79,202 +49,108 @@ void tst_QNearFieldManager::initTestCase() QNearFieldManagerPrivateImpl *emulatorBackend = new QNearFieldManagerPrivateImpl; QNearFieldManager manager(emulatorBackend, 0); - QVERIFY(manager.isAvailable()); + QVERIFY(manager.isEnabled()); } -void tst_QNearFieldManager::targetDetected_data() +void tst_QNearFieldManager::isSupported() { - QTest::addColumn<bool>("deleteTarget"); - - QTest::newRow("AnyTarget") << false; - QTest::newRow("NfcTagType1") << false; - QTest::newRow("Delete Target") << true; -} - -void tst_QNearFieldManager::targetDetected() -{ - QFETCH(bool, deleteTarget); + QFETCH(QNearFieldTarget::AccessMethod, accessMethod); + QFETCH(bool, supported); QNearFieldManagerPrivateImpl *emulatorBackend = new QNearFieldManagerPrivateImpl; - QNearFieldManager manager(emulatorBackend, 0); + QNearFieldManager manager(emulatorBackend, nullptr); - QSignalSpy targetDetectedSpy(&manager, SIGNAL(targetDetected(QNearFieldTarget*))); - QSignalSpy targetLostSpy(&manager, SIGNAL(targetLost(QNearFieldTarget*))); - - manager.startTargetDetection(); - - QTRY_VERIFY(!targetDetectedSpy.isEmpty()); - - QNearFieldTarget *target = targetDetectedSpy.first().at(0).value<QNearFieldTarget *>(); - - QSignalSpy disconnectedSpy(target, SIGNAL(disconnected())); - - QVERIFY(target); - - QVERIFY(!target->uid().isEmpty()); - - if (!deleteTarget) { - QTRY_VERIFY(!targetLostSpy.isEmpty()); - - QNearFieldTarget *lostTarget = targetLostSpy.first().at(0).value<QNearFieldTarget *>(); - - QCOMPARE(target, lostTarget); - - QVERIFY(!disconnectedSpy.isEmpty()); - } else { - delete target; - - // wait for another targetDetected() without a targetLost() signal in between. - targetDetectedSpy.clear(); - targetLostSpy.clear(); - - QTRY_VERIFY(targetLostSpy.isEmpty() && !targetDetectedSpy.isEmpty()); - } - - manager.stopTargetDetection(); + QCOMPARE(manager.isSupported(accessMethod), supported); } -void tst_QNearFieldManager::unregisterNdefMessageHandler() +void tst_QNearFieldManager::isSupported_data() { - QNearFieldManagerPrivateImpl *emulatorBackend = new QNearFieldManagerPrivateImpl; - QNearFieldManager manager(emulatorBackend, 0); + QTest::addColumn<QNearFieldTarget::AccessMethod>("accessMethod"); + QTest::addColumn<bool>("supported"); - QVERIFY(!manager.unregisterNdefMessageHandler(-1)); - QVERIFY(!manager.unregisterNdefMessageHandler(0)); + QTest::newRow("UnknownAccess") << QNearFieldTarget::UnknownAccess << false; + QTest::newRow("NdefAccess") << QNearFieldTarget::NdefAccess << true; + QTest::newRow("TagTypeSpecificAccess") << QNearFieldTarget::TagTypeSpecificAccess << false; + QTest::newRow("AnyAccess") << QNearFieldTarget::AnyAccess << true; } -class MessageListener : public QObject -{ - Q_OBJECT - -signals: - void matchedNdefMessage(const QNdefMessage &message, QNearFieldTarget *target); -}; - -void tst_QNearFieldManager::registerNdefMessageHandler() +void tst_QNearFieldManager::userInformation() { QNearFieldManagerPrivateImpl *emulatorBackend = new QNearFieldManagerPrivateImpl; - QNearFieldManager manager(emulatorBackend, 0); + QNearFieldManager manager(emulatorBackend, nullptr); - MessageListener listener; - QSignalSpy messageSpy(&listener, SIGNAL(matchedNdefMessage(QNdefMessage,QNearFieldTarget*))); + QSignalSpy spy(emulatorBackend, &QNearFieldManagerPrivateImpl::userInformationChanged); - int id = manager.registerNdefMessageHandler(&listener, - SIGNAL(matchedNdefMessage(QNdefMessage,QNearFieldTarget*))); + manager.startTargetDetection(QNearFieldTarget::AnyAccess); - QVERIFY(id != -1); + const QString progressString("NFC target detection in progress"); + manager.setUserInformation(progressString); - QTRY_VERIFY(!messageSpy.isEmpty()); + const QString errorString("Failed to detect NFC targets"); + manager.stopTargetDetection(errorString); - const QNdefMessage message = messageSpy.first().at(0).value<QNdefMessage>(); - QNearFieldTarget *target = messageSpy.first().at(1).value<QNearFieldTarget *>(); - - QVERIFY(target); - - QVERIFY(manager.unregisterNdefMessageHandler(id)); + QCOMPARE(spy.size(), 2); + QCOMPARE(spy.at(0).at(0).toString(), progressString); + QCOMPARE(spy.at(1).at(0).toString(), errorString); } -void tst_QNearFieldManager::registerNdefMessageHandler_type_data() +void tst_QNearFieldManager::targetDetected_data() { - QTest::addColumn<QNdefRecord::TypeNameFormat>("typeNameFormat"); - QTest::addColumn<QByteArray>("type"); + QTest::addColumn<QNearFieldTarget::AccessMethod>("accessMethod"); + QTest::addColumn<bool>("deleteTarget"); - QTest::newRow("Image") << QNdefRecord::Mime << QByteArray("image/png"); - QTest::newRow("URI") << QNdefRecord::NfcRtd << QByteArray("U"); - QTest::newRow("Text") << QNdefRecord::NfcRtd << QByteArray("T"); + QTest::newRow("UnknownAccess") << QNearFieldTarget::UnknownAccess << false; + QTest::newRow("NdefAccess, no delete") << QNearFieldTarget::NdefAccess << false; + QTest::newRow("AnyAccess, delete") << QNearFieldTarget::AnyAccess << true; } -void tst_QNearFieldManager::registerNdefMessageHandler_type() +void tst_QNearFieldManager::targetDetected() { - QFETCH(QNdefRecord::TypeNameFormat, typeNameFormat); - QFETCH(QByteArray, type); + QFETCH(QNearFieldTarget::AccessMethod, accessMethod); + QFETCH(bool, deleteTarget); QNearFieldManagerPrivateImpl *emulatorBackend = new QNearFieldManagerPrivateImpl; - QNearFieldManager manager(emulatorBackend, 0); + QNearFieldManager manager(emulatorBackend, nullptr); - MessageListener listener; - QSignalSpy messageSpy(&listener, SIGNAL(matchedNdefMessage(QNdefMessage,QNearFieldTarget*))); + QSignalSpy targetDetectedSpy(&manager, &QNearFieldManager::targetDetected); + QSignalSpy targetLostSpy(&manager, &QNearFieldManager::targetLost); + QSignalSpy detectionStoppedSpy(&manager, &QNearFieldManager::targetDetectionStopped); - int id = manager.registerNdefMessageHandler(typeNameFormat, type, &listener, - SIGNAL(matchedNdefMessage(QNdefMessage,QNearFieldTarget*))); + const bool started = manager.startTargetDetection(accessMethod); - QVERIFY(id != -1); + if (started) { + QTRY_VERIFY(!targetDetectedSpy.isEmpty()); - QTRY_VERIFY(!messageSpy.isEmpty()); + QNearFieldTarget *target = targetDetectedSpy.first().at(0).value<QNearFieldTarget *>(); - const QNdefMessage message = messageSpy.first().at(0).value<QNdefMessage>(); + QSignalSpy disconnectedSpy(target, SIGNAL(disconnected())); - bool hasRecord = false; - for (const QNdefRecord &record : message) { - if (record.typeNameFormat() == typeNameFormat && record.type() == type) { - hasRecord = true; - break; - } - } + QVERIFY(target); - QVERIFY(hasRecord); + QVERIFY(!target->uid().isEmpty()); - QNearFieldTarget *target = messageSpy.first().at(1).value<QNearFieldTarget *>(); + if (!deleteTarget) { + QTRY_VERIFY(!targetLostSpy.isEmpty()); - QVERIFY(target); -} + QNearFieldTarget *lostTarget = targetLostSpy.first().at(0).value<QNearFieldTarget *>(); -void tst_QNearFieldManager::registerNdefMessageHandler_filter_data() -{ - QTest::addColumn<QNdefFilter>("filter"); - - QNdefFilter filter; - - QTest::newRow("Empty") << filter; - - filter.clear(); - filter.setOrderMatch(true); - filter.appendRecord(QNdefRecord::Mime, "image/png"); - filter.appendRecord<QNdefNfcTextRecord>(2, 10); - filter.appendRecord<QNdefNfcUriRecord>(1, 1); - QTest::newRow("Image + Multiple Text + URI") << filter; - - filter.clear(); - filter.setOrderMatch(true); - filter.appendRecord<QNdefNfcTextRecord>(1, 1); - filter.appendRecord<QNdefNfcUriRecord>(1, 1); - QTest::newRow("Text + URI") << filter; - - QNdefFilter::Record record; - - filter.clear(); - filter.setOrderMatch(false); - filter.appendRecord<QNdefNfcUriRecord>(1, 1); - record.typeNameFormat = QNdefRecord::NfcRtd; - record.type = "T"; - record.minimum = 1; - record.maximum = 1; - filter.appendRecord(record); - QTest::newRow("Unordered Text + URI") << filter; -} + QCOMPARE(target, lostTarget); -void tst_QNearFieldManager::registerNdefMessageHandler_filter() -{ - QFETCH(QNdefFilter, filter); + QVERIFY(!disconnectedSpy.isEmpty()); + } else { + delete target; - QNearFieldManagerPrivateImpl *emulatorBackend = new QNearFieldManagerPrivateImpl; - QNearFieldManager manager(emulatorBackend, 0); + // wait for another targetDetected() without a targetLost() signal in between. + targetDetectedSpy.clear(); + targetLostSpy.clear(); - MessageListener listener; - QSignalSpy messageSpy(&listener, SIGNAL(matchedNdefMessage(QNdefMessage,QNearFieldTarget*))); - - int id = manager.registerNdefMessageHandler(filter, &listener, - SIGNAL(matchedNdefMessage(QNdefMessage,QNearFieldTarget*))); - - QVERIFY(id != -1); - - QTRY_VERIFY(!messageSpy.isEmpty()); - - const QNdefMessage message = messageSpy.first().at(0).value<QNdefMessage>(); + QTRY_VERIFY(targetLostSpy.isEmpty() && !targetDetectedSpy.isEmpty()); + } + } - QNearFieldTarget *target = messageSpy.first().at(1).value<QNearFieldTarget *>(); + manager.stopTargetDetection(); - QVERIFY(target); + QCOMPARE(detectionStoppedSpy.size(), 1); } QTEST_MAIN(tst_QNearFieldManager) |