summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2014-07-26 17:55:43 +0400
committerDenis Shienkov <denis.shienkov@gmail.com>2014-08-03 12:08:25 +0200
commit1be34e49c2255625f317415ffcaaa27ba6ff0cdf (patch)
treeeb394b9e4acea81cb65e97d7ace623123ef71e8f
parentd402b2cd84fc55c6c9399bb4fc9e1ad764c07cde (diff)
downloadqtserialport-1be34e49c2255625f317415ffcaaa27ba6ff0cdf.tar.gz
Move the synchronous loopback test from benchmarks to auto tests
Previous commit 76f293bfb0fd7bab391f96ac822eacc40e4c5176 with adding of this test to the benchmarks were hasty. After all it makes sense to place it to auto tests to have opportunity to run with others together. Besides, this test is renamed since it is not a loopback, it is an I/O test with the synchronous approach. Change-Id: I043a6e0075561167bb29a59a384554ef98dbbd4a Reviewed-by: Sergey Belyashov <Sergey.Belyashov@gmail.com> Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
-rw-r--r--tests/auto/qserialport/tst_qserialport.cpp28
-rw-r--r--tests/benchmarks/benchmarks.pro2
-rw-r--r--tests/benchmarks/qserialport/qserialport.pro11
-rw-r--r--tests/benchmarks/qserialport/tst_qserialport.cpp144
-rw-r--r--tests/tests.pro2
5 files changed, 29 insertions, 158 deletions
diff --git a/tests/auto/qserialport/tst_qserialport.cpp b/tests/auto/qserialport/tst_qserialport.cpp
index 4709d13..9e8f659 100644
--- a/tests/auto/qserialport/tst_qserialport.cpp
+++ b/tests/auto/qserialport/tst_qserialport.cpp
@@ -106,6 +106,8 @@ private slots:
void twoStageSynchronousLoopback();
+ void synchronousReadWrite();
+
protected slots:
void handleBytesWrittenAndExitLoopSlot(qint64 bytesWritten);
void handleBytesWrittenAndExitLoopSlot2(qint64 bytesWritten);
@@ -483,5 +485,31 @@ void tst_QSerialPort::twoStageSynchronousLoopback()
QCOMPARE(newlineArray, senderPort.readAll());
}
+void tst_QSerialPort::synchronousReadWrite()
+{
+#ifdef Q_OS_WIN
+ clearReceiver();
+#endif
+
+ QSerialPort senderPort(m_senderPortName);
+ QVERIFY(senderPort.open(QSerialPort::WriteOnly));
+
+ QSerialPort receiverPort(m_receiverPortName);
+ QVERIFY(receiverPort.open(QSerialPort::ReadOnly));
+
+ QByteArray writeData;
+ for (int i = 0; i < 1024; ++i)
+ writeData.append(static_cast<char>(i));
+
+ senderPort.write(writeData);
+ senderPort.waitForBytesWritten(-1);
+
+ QByteArray readData;
+ while ((readData.size() < writeData.size()) && receiverPort.waitForReadyRead(100))
+ readData.append(receiverPort.readAll());
+
+ QCOMPARE(writeData, readData);
+}
+
QTEST_MAIN(tst_QSerialPort)
#include "tst_qserialport.moc"
diff --git a/tests/benchmarks/benchmarks.pro b/tests/benchmarks/benchmarks.pro
deleted file mode 100644
index 8878128..0000000
--- a/tests/benchmarks/benchmarks.pro
+++ /dev/null
@@ -1,2 +0,0 @@
-TEMPLATE = subdirs
-SUBDIRS = qserialport
diff --git a/tests/benchmarks/qserialport/qserialport.pro b/tests/benchmarks/qserialport/qserialport.pro
deleted file mode 100644
index c16cd5e..0000000
--- a/tests/benchmarks/qserialport/qserialport.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-QT = core testlib
-TARGET = tst_qserialport
-#CONFIG += testcase
-
-greaterThan(QT_MAJOR_VERSION, 4) {
- QT += serialport
-} else {
- include($$QTSERIALPORT_PROJECT_ROOT/src/serialport/qt4support/serialport.prf)
-}
-
-SOURCES = tst_qserialport.cpp
diff --git a/tests/benchmarks/qserialport/tst_qserialport.cpp b/tests/benchmarks/qserialport/tst_qserialport.cpp
deleted file mode 100644
index 0ff2050..0000000
--- a/tests/benchmarks/qserialport/tst_qserialport.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Denis Shienkov <denis.shienkov@gmail.com>
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the QtSerialPort module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** 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 Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtTest/QtTest>
-#include <QtSerialPort/QSerialPort>
-
-class tst_QSerialPort : public QObject
-{
- Q_OBJECT
-public:
- explicit tst_QSerialPort();
-
- static void enterLoopMsecs(int msecs)
- {
- ++loopLevel;
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
- QTestEventLoop::instance().enterLoopMSecs(msecs);
-#else
- Q_UNUSED(msecs);
- QTestEventLoop::instance().enterLoop(1);
-#endif
- --loopLevel;
- }
-
-private slots:
- void initTestCase();
-
- void synchronousLoopbackDataVerificationTest();
-
-private:
-#ifdef Q_OS_WIN
- void clearReceiver();
-#endif
-
- QString m_senderPortName;
- QString m_receiverPortName;
-
- static int loopLevel;
-};
-
-int tst_QSerialPort::loopLevel = 0;
-
-tst_QSerialPort::tst_QSerialPort()
-{
-}
-
-#ifdef Q_OS_WIN
-// This method is a workaround for the "com0com" virtual serial port
-// driver, which is installed on CI. The problem is that the close/clear
-// methods have no effect on sender serial port. If any data didn't manage
-// to be transferred before closing, then this data will continue to be
-// transferred at next opening of sender port.
-// Thus, this behavior influences other tests and leads to the wrong results
-// (e.g. the receiver port on other test can receive some data which are
-// not expected). It is recommended to use this method for cleaning of
-// read FIFO of receiver for those tests in which reception of data is
-// required.
-void tst_QSerialPort::clearReceiver()
-{
- QSerialPort receiver(m_receiverPortName);
- if (receiver.open(QIODevice::ReadOnly))
- enterLoopMsecs(100);
-}
-#endif
-
-void tst_QSerialPort::initTestCase()
-{
- m_senderPortName = QString::fromLocal8Bit(qgetenv("QTEST_SERIALPORT_SENDER"));
- m_receiverPortName = QString::fromLocal8Bit(qgetenv("QTEST_SERIALPORT_RECEIVER"));
- if (m_senderPortName.isEmpty() || m_receiverPortName.isEmpty()) {
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
- QSKIP("Test doesn't work because the names of serial ports aren't found in env.");
-#else
- QSKIP("Test doesn't work because the names of serial ports aren't set found env.", SkipAll);
-#endif
- }
-}
-
-void tst_QSerialPort::synchronousLoopbackDataVerificationTest()
-{
-#ifdef Q_OS_WIN
- clearReceiver();
-#endif
-
- QSerialPort senderPort(m_senderPortName);
- QVERIFY(senderPort.open(QSerialPort::WriteOnly));
-
- QSerialPort receiverPort(m_receiverPortName);
- QVERIFY(receiverPort.open(QSerialPort::ReadOnly));
-
- QByteArray writeData;
- for (int i = 0; i < 1024; ++i)
- writeData.append(static_cast<char>(i));
-
- senderPort.write(writeData);
- senderPort.waitForBytesWritten(-1);
-
- QByteArray readData;
- while ((readData.size() < writeData.size()) && receiverPort.waitForReadyRead(100))
- readData.append(receiverPort.readAll());
-
- QCOMPARE(writeData, readData);
-}
-
-QTEST_MAIN(tst_QSerialPort)
-#include "tst_qserialport.moc"
diff --git a/tests/tests.pro b/tests/tests.pro
index dc3e10c..dcc8531 100644
--- a/tests/tests.pro
+++ b/tests/tests.pro
@@ -1,2 +1,2 @@
TEMPLATE = subdirs
-SUBDIRS += auto manual benchmarks
+SUBDIRS += auto manual