blob: 09ce41337ed6d4cfb4d1408139777bc4c2d5b2a5 [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2014 by Southwest Research Institute (R)
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtCore 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$
**
****************************************************************************/
#include <QtTest/QtTest>
#include <qbytearraylist.h>
#include <qmetatype.h>
Q_DECLARE_METATYPE(QByteArrayList)
class tst_QByteArrayList : public QObject
{
Q_OBJECT
private slots:
void join() const;
void join_data() const;
void joinByteArray() const;
void joinByteArray_data() const;
void joinChar() const;
void joinChar_data() const;
void joinEmptiness() const;
void operator_plus() const;
void operator_plus_data() const;
void indexOf_data() const;
void indexOf() const;
void initializerList() const;
};
void tst_QByteArrayList::join() const
{
QFETCH(QByteArrayList, input);
QFETCH(QByteArray, expectedResult);
QCOMPARE(input.join(), expectedResult);
}
void tst_QByteArrayList::join_data() const
{
QTest::addColumn<QByteArrayList>("input");
QTest::addColumn<QByteArray>("expectedResult");
QTest::newRow("data1") << QByteArrayList()
<< QByteArray();
QTest::newRow("data2") << (QByteArrayList() << "one")
<< QByteArray("one");
QTest::newRow("data3") << (QByteArrayList() << "a" << "b")
<< QByteArray("ab");
QTest::newRow("data4") << (QByteArrayList() << "a" << "b" << "c")
<< QByteArray("abc");
}
void tst_QByteArrayList::joinByteArray() const
{
QFETCH(QByteArrayList, input);
QFETCH(QByteArray, separator);
QFETCH(QByteArray, expectedResult);
QCOMPARE(input.join(separator), expectedResult);
}
void tst_QByteArrayList::joinByteArray_data() const
{
QTest::addColumn<QByteArrayList>("input");
QTest::addColumn<QByteArray>("separator");
QTest::addColumn<QByteArray>("expectedResult");
QTest::newRow("data1") << QByteArrayList()
<< QByteArray()
<< QByteArray();
QTest::newRow("data2") << QByteArrayList()
<< QByteArray("separator")
<< QByteArray();
QTest::newRow("data3") << (QByteArrayList() << "one")
<< QByteArray("separator")
<< QByteArray("one");
QTest::newRow("data4") << (QByteArrayList() << "a" << "b")
<< QByteArray(" ")
<< QByteArray("a b");
QTest::newRow("data5") << (QByteArrayList() << "a" << "b" << "c")
<< QByteArray(" ")
<< QByteArray("a b c");
QTest::newRow("data6") << (QByteArrayList() << "a" << "b" << "c")
<< QByteArray()
<< QByteArray("abc");
QTest::newRow("data7") << (QByteArrayList() << "a" << "b" << "c")
<< QByteArray("") //empty
<< QByteArray("abc");
}
void tst_QByteArrayList::joinChar() const
{
QFETCH(QByteArrayList, input);
QFETCH(char, separator);
QFETCH(QByteArray, expectedResult);
QCOMPARE(input.join(separator), expectedResult);
}
void tst_QByteArrayList::joinChar_data() const
{
QTest::addColumn<QByteArrayList>("input");
QTest::addColumn<char>("separator");
QTest::addColumn<QByteArray>("expectedResult");
QTest::newRow("data1") << QByteArrayList()
<< ' '
<< QByteArray();
QTest::newRow("data2") << (QByteArrayList() << "a a" << "b")
<< ' '
<< QByteArray("a a b");
QTest::newRow("data3") << (QByteArrayList() << "a" << "b" << "c c")
<< ' '
<< QByteArray("a b c c");
}
void tst_QByteArrayList::joinEmptiness() const
{
QByteArrayList list;
QByteArray string = list.join(QByteArray());
QVERIFY(string.isEmpty());
QVERIFY(string.isNull());
}
void tst_QByteArrayList::operator_plus() const
{
QFETCH(QByteArrayList, lhs);
QFETCH(QByteArrayList, rhs);
QFETCH(QByteArrayList, expectedResult);
// operator+ for const lvalues
{
const QByteArrayList bal1 = lhs;
const QByteArrayList bal2 = rhs;
QCOMPARE(bal1 + bal2, expectedResult);
}
{
const QList<QByteArray> lba1 = lhs;
const QByteArrayList bal2 = rhs;
QCOMPARE(lba1 + bal2, expectedResult);
}
{
const QByteArrayList bal1 = lhs;
const QList<QByteArray> lba2 = rhs;
QCOMPARE(bal1 + lba2, expectedResult);
}
{
const QList<QByteArray> lba1 = lhs;
const QList<QByteArray> lba2 = rhs;
QCOMPARE(lba1 + lba2, QList<QByteArray>(expectedResult)); // check we don't mess with old code
}
// operator+ for rvalues (only lhs)
{
QByteArrayList bal1 = lhs;
const QByteArrayList bal2 = rhs;
QCOMPARE(std::move(bal1) + bal2, expectedResult);
}
{
QList<QByteArray> lba1 = lhs;
const QByteArrayList bal2 = rhs;
QCOMPARE(std::move(lba1) + bal2, expectedResult);
}
{
QByteArrayList bal1 = lhs;
const QList<QByteArray> lba2 = rhs;
QCOMPARE(std::move(bal1) + lba2, expectedResult);
}
{
QList<QByteArray> lba1 = lhs;
const QList<QByteArray> lba2 = rhs;
QCOMPARE(std::move(lba1) + lba2, QList<QByteArray>(expectedResult)); // check we don't mess with old code
}
// operator += for const lvalues
{
QByteArrayList bal1 = lhs;
const QByteArrayList bal2 = rhs;
QCOMPARE(bal1 += bal2, expectedResult);
}
{
QByteArrayList bal1 = lhs;
const QList<QByteArray> lba2 = rhs;
QCOMPARE(bal1 += lba2, expectedResult);
}
{
QList<QByteArray> lba1 = lhs;
const QByteArrayList bal2 = rhs;
QCOMPARE(lba1 += bal2, QList<QByteArray>(expectedResult));
}
QByteArrayList t1 = lhs;
QByteArrayList t2 = rhs;
QCOMPARE(std::move(t1) + t2, expectedResult);
}
void tst_QByteArrayList::operator_plus_data() const
{
QTest::addColumn<QByteArrayList>("lhs");
QTest::addColumn<QByteArrayList>("rhs");
QTest::addColumn<QByteArrayList>("expectedResult");
QTest::newRow("simpl") << ( QByteArrayList() << "a" )
<< ( QByteArrayList() << "b" << "c" )
<< ( QByteArrayList() << "a" << "b" << "c" );
QTest::newRow("blank1") << QByteArrayList()
<< QByteArrayList()
<< QByteArrayList();
QTest::newRow("blank2") << ( QByteArrayList() )
<< ( QByteArrayList() << "b" << "c" )
<< ( QByteArrayList() << "b" << "c" );
QTest::newRow("empty1") << ( QByteArrayList() << "" )
<< ( QByteArrayList() << "b" << "c" )
<< ( QByteArrayList() << "" << "b" << "c" );
QTest::newRow("empty2") << ( QByteArrayList() << "a" )
<< ( QByteArrayList() << "" << "c" )
<< ( QByteArrayList() << "a" << "" << "c" );
}
void tst_QByteArrayList::indexOf_data() const
{
QTest::addColumn<QByteArrayList>("list");
QTest::addColumn<QByteArray>("item");
QTest::addColumn<int>("expectedResult");
QTest::newRow("empty") << QByteArrayList() << QByteArray("a") << -1;
QTest::newRow("found_1") << ( QByteArrayList() << "a" ) << QByteArray("a") << 0;
QTest::newRow("not_found_1") << ( QByteArrayList() << "a" ) << QByteArray("b") << -1;
QTest::newRow("found_2") << ( QByteArrayList() << "hello" << "world" ) << QByteArray("world") << 1;
QTest::newRow("returns_first") << ( QByteArrayList() << "hello" << "world" << "hello" << "again" ) << QByteArray("hello") << 0;
}
void tst_QByteArrayList::indexOf() const
{
QFETCH(QByteArrayList, list);
QFETCH(QByteArray, item);
QFETCH(int, expectedResult);
QCOMPARE(list.indexOf(item), expectedResult);
QCOMPARE(list.indexOf(item.constData()), expectedResult);
}
void tst_QByteArrayList::initializerList() const
{
// constructor
QByteArrayList v1 = {QByteArray("hello"),"world",QByteArray("plop")};
QCOMPARE(v1, (QByteArrayList() << "hello" << "world" << "plop"));
QCOMPARE(v1, (QByteArrayList{"hello","world","plop"}));
// assignment operator (through implicit temporary)
QByteArrayList v2;
v2 = {QByteArray("hello"),"world",QByteArray("plop")};
QCOMPARE(v2, v1);
}
QTEST_APPLESS_MAIN(tst_QByteArrayList)
#include "tst_qbytearraylist.moc"