diff --git a/src/corelib/text/qbytearraylist.cpp b/src/corelib/text/qbytearraylist.cpp index c815e766ab9..5142869c727 100644 --- a/src/corelib/text/qbytearraylist.cpp +++ b/src/corelib/text/qbytearraylist.cpp @@ -115,6 +115,14 @@ QT_BEGIN_NAMESPACE element separated by the given \a separator. */ +/*! + \fn QByteArray QByteArrayList::join(QByteArrayView separator) const + \since 6.3 + + Joins all the byte arrays into a single byte array with each + element separated by the given \a separator. +*/ + /*! \fn QByteArray QByteArrayList::join(char separator) const diff --git a/src/corelib/text/qbytearraylist.h b/src/corelib/text/qbytearraylist.h index e00586291f6..7e8fe89babe 100644 --- a/src/corelib/text/qbytearraylist.h +++ b/src/corelib/text/qbytearraylist.h @@ -77,8 +77,13 @@ public: inline QByteArray join() const { return QtPrivate::QByteArrayList_join(self(), nullptr, 0); } + inline QByteArray join(QByteArrayView sep) const // ### Qt 7: merge with the () overload + { + return QtPrivate::QByteArrayList_join(self(), sep.data(), sep.size()); + } + Q_WEAK_OVERLOAD inline QByteArray join(const QByteArray &sep) const - { return QtPrivate::QByteArrayList_join(self(), sep.constData(), sep.size()); } + { return join(QByteArrayView{sep}); } inline QByteArray join(char sep) const { return QtPrivate::QByteArrayList_join(self(), &sep, 1); } }; diff --git a/tests/auto/corelib/text/qbytearraylist/tst_qbytearraylist.cpp b/tests/auto/corelib/text/qbytearraylist/tst_qbytearraylist.cpp index 29e5b947f6a..82459f21ea1 100644 --- a/tests/auto/corelib/text/qbytearraylist/tst_qbytearraylist.cpp +++ b/tests/auto/corelib/text/qbytearraylist/tst_qbytearraylist.cpp @@ -27,10 +27,13 @@ ** ****************************************************************************/ +#define QT_USE_QSTRINGBUILDER + #include #include #include +#include Q_DECLARE_METATYPE(QByteArrayList) @@ -38,6 +41,7 @@ class tst_QByteArrayList : public QObject { Q_OBJECT private slots: + void join_overloads() const; void join() const; void join_data() const; void joinByteArray() const; @@ -55,12 +59,34 @@ private slots: void initializerList() const; }; +void tst_QByteArrayList::join_overloads() const +{ + // Checks that there are no ambiguities between the different join() overloads: + + const QByteArrayList list = {"a", "b", "c"}; + const QByteArray expected = "aXbXc"; + + QCOMPARE(list.join('X'), expected); + QCOMPARE(list.join("X"), expected); + QCOMPARE(list.join(QByteArrayLiteral("X")), expected); + QCOMPARE(list.join(QByteArray("X")), expected); + QCOMPARE(list.join(QByteArrayView("X")), expected); + const char *sep = "X"; + QCOMPARE(list.join(sep), expected); + QCOMPARE(list.join(QByteArray() % "X"), expected); // QStringBuilder expression + QProperty prop("X"); // implicitly convertible to QByteArray + QCOMPARE(list.join(prop), expected); + QCOMPARE(list.join(std::as_const(prop)), expected); +} + void tst_QByteArrayList::join() const { QFETCH(QByteArrayList, input); QFETCH(QByteArray, expectedResult); QCOMPARE(input.join(), expectedResult); + QCOMPARE(input.join(QByteArrayView{}), expectedResult); + QCOMPARE(input.join(QByteArray{}), expectedResult); } void tst_QByteArrayList::join_data() const @@ -88,6 +114,7 @@ void tst_QByteArrayList::joinByteArray() const QFETCH(QByteArray, expectedResult); QCOMPARE(input.join(separator), expectedResult); + QCOMPARE(input.join(QByteArrayView{separator}), expectedResult); } void tst_QByteArrayList::joinByteArray_data() const @@ -132,6 +159,7 @@ void tst_QByteArrayList::joinChar() const QFETCH(QByteArray, expectedResult); QCOMPARE(input.join(separator), expectedResult); + QCOMPARE(input.join(QByteArrayView{&separator, 1}), expectedResult); } void tst_QByteArrayList::joinChar_data() const