From a9aa206b7b8ac4e69f8c46233b4080e00e845ff5 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Mon, 27 May 2019 19:13:54 +0200 Subject: Move text-related code out of corelib/tools/ to corelib/text/ This includes byte array, string, char, unicode, locale, collation and regular expressions. Change-Id: I8b125fa52c8c513eb57a0f1298b91910e5a0d786 Reviewed-by: Volker Hilsheimer --- .../text/qbytedatabuffer/tst_qbytedatabuffer.cpp | 161 +++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 tests/auto/corelib/text/qbytedatabuffer/tst_qbytedatabuffer.cpp (limited to 'tests/auto/corelib/text/qbytedatabuffer/tst_qbytedatabuffer.cpp') diff --git a/tests/auto/corelib/text/qbytedatabuffer/tst_qbytedatabuffer.cpp b/tests/auto/corelib/text/qbytedatabuffer/tst_qbytedatabuffer.cpp new file mode 100644 index 0000000000..59f4d153e6 --- /dev/null +++ b/tests/auto/corelib/text/qbytedatabuffer/tst_qbytedatabuffer.cpp @@ -0,0 +1,161 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Hewlett-Packard Development Company, L.P. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite 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$ +** +****************************************************************************/ + +#include +#include +// for QIODEVICE_BUFFERSIZE macro (== 16384): +#include + +class tst_QByteDataBuffer : public QObject +{ + Q_OBJECT +private Q_SLOTS: + void canReadLine(); + void positionHandling(); + void appendBuffer(); + void readCompleteBuffer_data(); + void readCompleteBuffer(); + void readPartialBuffer_data(); + void readPartialBuffer(); +private: + void readBuffer(int size, int readSize); +}; + +void tst_QByteDataBuffer::canReadLine() +{ + QByteDataBuffer buf; + buf.append(QByteArray("a")); + buf.append(QByteArray("\nb")); + QVERIFY(buf.canReadLine()); + QVERIFY(buf.getChar() == 'a'); + QVERIFY(buf.canReadLine()); + QVERIFY(buf.getChar() == '\n'); + QVERIFY(!buf.canReadLine()); +} + +void tst_QByteDataBuffer::positionHandling() +{ + QByteDataBuffer buf; + buf.append(QByteArray("abc")); + buf.append(QByteArray("def")); + + QCOMPARE(buf.byteAmount(), (qlonglong)6); + QCOMPARE(buf.sizeNextBlock(), (qlonglong)3); + + QCOMPARE(buf.getChar(), 'a'); + QCOMPARE(buf.byteAmount(), (qlonglong)5); + QCOMPARE(buf.sizeNextBlock(), (qlonglong)2); + + QVERIFY(!strcmp(buf[0].constData(), "bc")); + QCOMPARE(buf.getChar(), 'b'); + QCOMPARE(buf.byteAmount(), (qlonglong)4); + QCOMPARE(buf.sizeNextBlock(), (qlonglong)1); + + QByteArray tmp("ab"); + buf.prepend(tmp); + QCOMPARE(buf.byteAmount(), (qlonglong)6); + QVERIFY(!strcmp(buf.readAll().constData(), "abcdef")); + QCOMPARE(buf.byteAmount(), (qlonglong)0); + + QByteDataBuffer buf2; + buf2.append(QByteArray("abc")); + buf2.getChar(); + QCOMPARE(buf2.read(), QByteArray("bc")); +} + +void tst_QByteDataBuffer::appendBuffer() +{ + QByteDataBuffer buf; + buf.append(QByteArray("\1\2\3")); + buf.getChar(); + + QByteDataBuffer tmp; + tmp.append(buf); + QCOMPARE(tmp.readAll(), buf.readAll()); +} + +static QByteArray makeByteArray(int size) +{ + QByteArray array; + array.resize(size); + char *data = array.data(); + for (int i = 0; i < size; ++i) + data[i] = i % 256; + return array; +} + + +void tst_QByteDataBuffer::readBuffer(int size, int readSize) +{ + QByteArray data = makeByteArray(size); + + QByteDataBuffer buf; + buf.append(data); + + QByteArray tmp; + tmp.resize(size); + + QBENCHMARK_ONCE { + for (int i = 0; i < (size - 1) / readSize + 1; ++i) + buf.read(tmp.data() + i * readSize, readSize); + } + + QCOMPARE(data.size(), tmp.size()); + QCOMPARE(data, tmp); +} + +void tst_QByteDataBuffer::readCompleteBuffer_data() +{ + QTest::addColumn("size"); + QTest::newRow("10B") << (int)10; + QTest::newRow("1MB") << (int)1e6; + QTest::newRow("5MB") << (int)5e6; + QTest::newRow("10MB") << (int)10e6; +} + +void tst_QByteDataBuffer::readCompleteBuffer() +{ + QFETCH(int, size); + readBuffer(size, size); +} + +void tst_QByteDataBuffer::readPartialBuffer_data() +{ + readCompleteBuffer_data(); +} + +void tst_QByteDataBuffer::readPartialBuffer() +{ + QFETCH(int, size); + // QIODevice::readAll() reads in QIODEVICE_BUFFERSIZE size + // increments. + readBuffer(size, QIODEVICE_BUFFERSIZE); +} + +QTEST_MAIN(tst_QByteDataBuffer) +#include "tst_qbytedatabuffer.moc" -- cgit v1.2.3