diff --git a/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp b/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp index 16e28cc1d6..ebf1da0cc9 100644 --- a/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp +++ b/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Copyright (C) 2016 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** @@ -74,10 +74,6 @@ private slots: void qstrnlen(); void qstrcpy(); void qstrncpy(); - void qstricmp_data(); - void qstricmp(); - void qstricmp_singularities(); - void qstrnicmp_singularities(); void chop_data(); void chop(); void prepend(); @@ -122,6 +118,9 @@ private slots: void toPercentEncoding2_data(); void toPercentEncoding2(); + void qstrcmp_data(); + void qstrcmp(); + void compare_singular(); void compare_data(); void compare(); void compareCharStar_data(); @@ -915,80 +914,6 @@ void tst_QByteArray::qstrncpy() QByteArray("Tumdelidum")); } -void tst_QByteArray::qstricmp_data() -{ - QTest::addColumn("str1"); - QTest::addColumn("str2"); - - QTest::newRow("equal 1") << "abcEdb" << "abcEdb"; - QTest::newRow("equal 2") << "abcEdb" << "ABCeDB"; - QTest::newRow("equal 3") << "ABCEDB" << "abcedb"; - QTest::newRow("less 1") << "abcdef" << "abcdefg"; - QTest::newRow("less 2") << "abcdeF" << "abcdef"; - QTest::newRow("greater 1") << "abcdef" << "abcdeF"; - QTest::newRow("greater 2") << "abcdefg" << "abcdef"; -} - -void tst_QByteArray::qstricmp() -{ - QFETCH(QString, str1); - QFETCH(QString, str2); - - int expected = strcmp(str1.toUpper().toUtf8(), - str2.toUpper().toUtf8()); - if ( expected != 0 ) { - expected = (expected < 0 ? -1 : 1); - } - int actual = ::qstricmp(str1.toUtf8(), str2.toUtf8()); - if ( actual != 0 ) { - actual = (actual < 0 ? -1 : 1); - } - QCOMPARE(actual, expected); - - actual = ::qstricmp("012345679abcd" + str1.toUtf8(), "012345679AbCd" + str2.toUtf8()); - if ( actual != 0 ) { - actual = (actual < 0 ? -1 : 1); - } - QCOMPARE(actual, expected); - - actual = str1.toUtf8().compare(str2.toUtf8(), Qt::CaseInsensitive); - if ( actual != 0 ) { - actual = (actual < 0 ? -1 : 1); - } - QCOMPARE(actual, expected); - - actual = str1.toUtf8().compare(str2.toUtf8().constData(), Qt::CaseInsensitive); - if ( actual != 0 ) { - actual = (actual < 0 ? -1 : 1); - } - QCOMPARE(actual, expected); -} - -void tst_QByteArray::qstricmp_singularities() -{ - QCOMPARE(::qstricmp(0, 0), 0); - QVERIFY(::qstricmp(0, "a") < 0); - QVERIFY(::qstricmp("a", 0) > 0); - QCOMPARE(::qstricmp("", ""), 0); - QCOMPARE(QByteArray().compare(nullptr, Qt::CaseInsensitive), 0); - QCOMPARE(QByteArray().compare("", Qt::CaseInsensitive), 0); - QVERIFY(QByteArray("a").compare(nullptr, Qt::CaseInsensitive) > 0); - QVERIFY(QByteArray("a").compare("", Qt::CaseInsensitive) > 0); - QVERIFY(QByteArray().compare("a", Qt::CaseInsensitive) < 0); -} - -void tst_QByteArray::qstrnicmp_singularities() -{ - QCOMPARE(::qstrnicmp(0, 0, 123), 0); - QVERIFY(::qstrnicmp(0, "a", 123) != 0); - QVERIFY(::qstrnicmp("a", 0, 123) != 0); - QCOMPARE(::qstrnicmp("", "", 123), 0); - QCOMPARE(::qstrnicmp("a", "B", 0), 0); - QCOMPARE(QByteArray().compare(QByteArray(), Qt::CaseInsensitive), 0); - QVERIFY(QByteArray().compare(QByteArray("a"), Qt::CaseInsensitive) < 0); - QVERIFY(QByteArray("a").compare(QByteArray(), Qt::CaseInsensitive) > 0); -} - void tst_QByteArray::chop_data() { QTest::addColumn("src"); @@ -1867,6 +1792,83 @@ void tst_QByteArray::toPercentEncoding2() QCOMPARE(original, QByteArray::fromPercentEncoding(encodedData)); } +struct StringComparisonData +{ + const char *const left; + const char *const right; + const unsigned int clip; + const int cmp, icmp, ncmp, nicmp; + static int sign(int val) { return val < 0 ? -1 : val > 0 ? +1 : 0; } +}; +Q_DECLARE_METATYPE(StringComparisonData); + +void tst_QByteArray::qstrcmp_data() +{ + QTest::addColumn("data"); + + QTest::newRow("equal") + << StringComparisonData{"abcEdb", "abcEdb", 3, 0, 0, 0, 0}; + QTest::newRow("upper") + << StringComparisonData{"ABCedb", "ABCEDB", 3, 1, 0, 0, 0}; + QTest::newRow("lower") + << StringComparisonData{"ABCEDB", "abcedb", 3, -1, 0, -1, 0}; + QTest::newRow("upper-late") + << StringComparisonData{"abcEdb", "abcEDB", 3, 1, 0, 0, 0}; + QTest::newRow("lower-late") + << StringComparisonData{"ABCEDB", "ABCedb", 3, -1, 0, 0, 0}; + QTest::newRow("longer") + << StringComparisonData{"abcdef", "abcdefg", 6, -1, -1, 0, 0}; + QTest::newRow("long-up") + << StringComparisonData{"abcdef", "abcdeFg", 6, 1, -1, 1, 0}; + QTest::newRow("long-down") + << StringComparisonData{"abcdeF", "abcdefg", 6, -1, -1, -1, 0}; + QTest::newRow("shorter") + << StringComparisonData{"abcdefg", "abcdef", 6, 1, 1, 0, 0}; + QTest::newRow("short-up") + << StringComparisonData{"abcdefg", "abcdeF", 6, 1, 1, 1, 0}; + QTest::newRow("short-down") + << StringComparisonData{"abcdeFg", "abcdef", 6, -1, 1, -1, 0}; + QTest::newRow("zero-length") + << StringComparisonData{"abcdefg", "T", 0, 1, -1, 0, 0}; + QTest::newRow("null-null") + << StringComparisonData{nullptr, nullptr, 6, 0, 0, 0, 0}; + QTest::newRow("null-empty") + << StringComparisonData{nullptr, "", 0, -1, -1, -1, -1}; + QTest::newRow("empty-null") + << StringComparisonData{"", nullptr, 0, 1, 1, 1, 1}; + QTest::newRow("empty-empty") + << StringComparisonData{"", "", 0, 0, 0, 0, 0}; + QTest::newRow("null-some") + << StringComparisonData{nullptr, "some", 0, -1, -1, -1, -1}; + QTest::newRow("some-null") + << StringComparisonData{"some", nullptr, 0, 1, 1, 1, 1}; + QTest::newRow("empty-some") + << StringComparisonData{"", "some", 0, -1, -1, 0, 0}; + QTest::newRow("some-empty") + << StringComparisonData{"some", "", 0, 1, 1, 0, 0}; +} + +void tst_QByteArray::qstrcmp() +{ + QFETCH(StringComparisonData, data); + QCOMPARE(data.sign(::qstrcmp(data.left, data.right)), data.cmp); + QCOMPARE(data.sign(::qstricmp(data.left, data.right)), data.icmp); + QCOMPARE(data.sign(::qstrncmp(data.left, data.right, data.clip)), data.ncmp); + QCOMPARE(data.sign(::qstrnicmp(data.left, data.right, data.clip)), data.nicmp); +} + +void tst_QByteArray::compare_singular() +{ + QCOMPARE(QByteArray().compare(nullptr, Qt::CaseInsensitive), 0); + QCOMPARE(QByteArray().compare("", Qt::CaseInsensitive), 0); + QVERIFY(QByteArray("a").compare(nullptr, Qt::CaseInsensitive) > 0); + QVERIFY(QByteArray("a").compare("", Qt::CaseInsensitive) > 0); + QVERIFY(QByteArray().compare("a", Qt::CaseInsensitive) < 0); + QCOMPARE(QByteArray().compare(QByteArray(), Qt::CaseInsensitive), 0); + QVERIFY(QByteArray().compare(QByteArray("a"), Qt::CaseInsensitive) < 0); + QVERIFY(QByteArray("a").compare(QByteArray(), Qt::CaseInsensitive) > 0); +} + void tst_QByteArray::compare_data() { QTest::addColumn("str1");