diff options
Diffstat (limited to 'tests/auto/corelib/text/qbytearrayview/tst_qbytearrayview.cpp')
-rw-r--r-- | tests/auto/corelib/text/qbytearrayview/tst_qbytearrayview.cpp | 129 |
1 files changed, 101 insertions, 28 deletions
diff --git a/tests/auto/corelib/text/qbytearrayview/tst_qbytearrayview.cpp b/tests/auto/corelib/text/qbytearrayview/tst_qbytearrayview.cpp index 2953fc5c04..894f0430dd 100644 --- a/tests/auto/corelib/text/qbytearrayview/tst_qbytearrayview.cpp +++ b/tests/auto/corelib/text/qbytearrayview/tst_qbytearrayview.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** 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$ -** -****************************************************************************/ +// Copyright (C) 2020 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QByteArrayView> @@ -33,6 +8,7 @@ // for negative testing (can't convert from) #include <deque> #include <list> +#include <QVarLengthArray> template <typename T> constexpr bool CanConvert = std::is_convertible_v<T, QByteArrayView>; @@ -195,6 +171,7 @@ private slots: void comparison() const; void compare() const; + void std_stringview_conversion(); private: template <typename Data> @@ -220,6 +197,10 @@ void tst_QByteArrayView::constExpr() const static_assert(bv.isEmpty()); static_assert(bv.data() == nullptr); + constexpr std::string_view sv = bv; + static_assert(sv.size() == 0); + static_assert(sv.data() == nullptr); + constexpr QByteArrayView bv2(bv.data(), bv.data() + bv.size()); static_assert(bv2.isNull()); static_assert(bv2.empty()); @@ -232,6 +213,10 @@ void tst_QByteArrayView::constExpr() const static_assert(bv.isEmpty()); static_assert(bv.data() != nullptr); + constexpr std::string_view sv = bv; + static_assert(sv.size() == bv.size()); + static_assert(sv.data() == bv.data()); + constexpr QByteArrayView bv2(bv.data(), bv.data() + bv.size()); static_assert(!bv2.isNull()); static_assert(bv2.empty()); @@ -264,11 +249,23 @@ void tst_QByteArrayView::constExpr() const static_assert(bv.rbegin() != bv.rend()); static_assert(bv.crbegin() != bv.crend()); + constexpr std::string_view sv = bv; + static_assert(sv.size() == bv.size()); + static_assert(sv.data() == bv.data()); +#ifdef AMBIGUOUS_CALL // QTBUG-108805 + static_assert(sv == bv); + static_assert(bv == sv); +#endif + constexpr QByteArrayView bv2(bv.data(), bv.data() + bv.size()); static_assert(!bv2.isNull()); static_assert(!bv2.empty()); static_assert(bv2.size() == 5); } +#if !defined(Q_CC_GNU) || defined(Q_CC_CLANG) + // Below checks are disabled because of a compilation issue with GCC and + // -fsanitize=undefined. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71962. + // Note: Q_CC_GNU is also defined for Clang, so we need to check that too. { static constexpr char hello[] = "Hello"; constexpr QByteArrayView bv(hello); @@ -285,6 +282,13 @@ void tst_QByteArrayView::constExpr() const static_assert(bv.at(4) == 'o'); static_assert(bv.back() == 'o'); static_assert(bv.last() == 'o'); + + constexpr std::string_view sv = bv; + static_assert(bv.size() == sv.size()); +#ifdef AMBIGUOUS_CALL // QTBUG-108805 + static_assert(bv == sv); + static_assert(sv == bv); +#endif } { static constexpr char hello[] = { 'H', 'e', 'l', 'l', 'o' }; @@ -302,13 +306,57 @@ void tst_QByteArrayView::constExpr() const static_assert(bv.at(4) == 'o'); static_assert(bv.back() == 'o'); static_assert(bv.last() == 'o'); + + constexpr std::string_view sv = bv; + static_assert(bv.size() == sv.size()); +#ifdef AMBIGUOUS_CALL // QTBUG-108805 + static_assert(bv == sv); + static_assert(sv == bv); +#endif } +#endif { constexpr char *null = nullptr; constexpr QByteArrayView bv(null); static_assert(bv.isNull()); static_assert(bv.isEmpty()); static_assert(bv.size() == 0); + + constexpr std::string_view sv = bv; + static_assert(sv.size() == 0); + static_assert(sv.data() == nullptr); + } + { + constexpr QByteArrayView bv(QLatin1StringView("Hello")); + static_assert(bv.size() == 5); + static_assert(!bv.empty()); + static_assert(!bv.isEmpty()); + static_assert(!bv.isNull()); + static_assert(*bv.data() == 'H'); + static_assert(bv[0] == 'H'); + static_assert(bv.at(0) == 'H'); + static_assert(bv.front() == 'H'); + static_assert(bv.first() == 'H'); + static_assert(bv[4] == 'o'); + static_assert(bv.at(4) == 'o'); + static_assert(bv.back() == 'o'); + static_assert(bv.last() == 'o'); + } + { + constexpr QByteArrayView bv(QUtf8StringView("Hello")); + static_assert(bv.size() == 5); + static_assert(!bv.empty()); + static_assert(!bv.isEmpty()); + static_assert(!bv.isNull()); + static_assert(*bv.data() == 'H'); + static_assert(bv[0] == 'H'); + static_assert(bv.at(0) == 'H'); + static_assert(bv.front() == 'H'); + static_assert(bv.first() == 'H'); + static_assert(bv[4] == 'o'); + static_assert(bv.at(4) == 'o'); + static_assert(bv.back() == 'o'); + static_assert(bv.last() == 'o'); } } @@ -451,7 +499,7 @@ void tst_QByteArrayView::fromQByteArray() const QByteArray empty = ""; QVERIFY(QByteArrayView(null).isNull()); - QVERIFY(!qToByteArrayViewIgnoringNull(null).isNull()); + QVERIFY(qToByteArrayViewIgnoringNull(null).isNull()); QVERIFY(QByteArrayView(null).isEmpty()); QVERIFY(qToByteArrayViewIgnoringNull(null).isEmpty()); @@ -651,5 +699,30 @@ void tst_QByteArrayView::compare() const QVERIFY(alpha.compare(beta, Qt::CaseSensitive) > 0); } +void tst_QByteArrayView::std_stringview_conversion() +{ + static_assert(std::is_convertible_v<QByteArrayView, std::string_view>); + + QByteArrayView bav; + std::string_view sv(bav); + QCOMPARE(sv, std::string_view()); + + bav = ""; + sv = bav; + QCOMPARE(bav.size(), 0); + QCOMPARE(sv.size(), size_t(0)); + QCOMPARE(sv, std::string_view()); + + bav = "Hello"; + sv = bav; + QCOMPARE(sv, std::string_view("Hello")); + + bav = QByteArrayView::fromArray("Hello\0world"); + sv = bav; + QCOMPARE(bav.size(), 12); + QCOMPARE(sv.size(), size_t(12)); + QCOMPARE(sv, std::string_view("Hello\0world", 12)); +} + QTEST_APPLESS_MAIN(tst_QByteArrayView) #include "tst_qbytearrayview.moc" |