Revert "QStringBuilder: remove unneeded specializations"
This reverts commit 3c6c3eccd1f91bd1ae0a518318ef264f8eff63f5. Reason for revert: They do appear to be needed, and removing them changes behavior: QTBUG-114206 Fixes: QTBUG-114206 Task-number: QTBUG-114238 Change-Id: Iac75bbc1ef14fe89f4282bd58fe996f9a09b8506 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit 4d261c1b544330c5481b2ac2e42fbab764255ab5) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
d6d16aa17f
commit
2c12c9b010
@ -100,6 +100,45 @@ public:
|
||||
const B &b;
|
||||
};
|
||||
|
||||
// This specialization is here for backwards compatibility: appending
|
||||
// two null strings must give back a null string, so we're special
|
||||
// casing this one out.
|
||||
template <>
|
||||
class QStringBuilder <QString, QString> : public QStringBuilderBase<QStringBuilder<QString, QString>, QString>
|
||||
{
|
||||
public:
|
||||
QStringBuilder(const QString &a_, const QString &b_) : a(a_), b(b_) {}
|
||||
QStringBuilder(const QStringBuilder &other) : a(other.a), b(other.b) {}
|
||||
|
||||
operator QString() const
|
||||
{ QString r(a); r += b; return r; }
|
||||
|
||||
const QString &a;
|
||||
const QString &b;
|
||||
|
||||
private:
|
||||
QStringBuilder &operator=(const QStringBuilder &) = delete;
|
||||
};
|
||||
|
||||
// Ditto, but see QTBUG-114238
|
||||
template <>
|
||||
class QStringBuilder <QByteArray, QByteArray> : public QStringBuilderBase<QStringBuilder<QByteArray, QByteArray>, QByteArray>
|
||||
{
|
||||
public:
|
||||
QStringBuilder(const QByteArray &a_, const QByteArray &b_) : a(a_), b(b_) {}
|
||||
QStringBuilder(const QStringBuilder &other) : a(other.a), b(other.b) {}
|
||||
|
||||
operator QByteArray() const
|
||||
{ QByteArray r(a); r += b; return r; }
|
||||
|
||||
const QByteArray &a;
|
||||
const QByteArray &b;
|
||||
|
||||
private:
|
||||
QStringBuilder &operator=(const QStringBuilder &) = delete;
|
||||
};
|
||||
|
||||
|
||||
template <> struct QConcatenable<char> : private QAbstractConcatenable
|
||||
{
|
||||
typedef char type;
|
||||
|
@ -77,6 +77,28 @@ void checkItWorksWithFreeSpaceAtBegin(const String &chunk, const Separator &sepa
|
||||
QCOMPARE(str, expected);
|
||||
}
|
||||
|
||||
template <typename String>
|
||||
void checkNullVsEmpty(const String &empty, const char *failureReason = nullptr)
|
||||
{
|
||||
String a;
|
||||
String b;
|
||||
QVERIFY(a.isNull());
|
||||
QVERIFY(b.isNull());
|
||||
String result = a P b;
|
||||
QVERIFY(result.isNull());
|
||||
|
||||
String d = empty;
|
||||
QVERIFY(d.isEmpty());
|
||||
QVERIFY(!d.isNull());
|
||||
result = a P d;
|
||||
QVERIFY(result.isEmpty());
|
||||
if (failureReason)
|
||||
QEXPECT_FAIL("", failureReason, Continue);
|
||||
QVERIFY(!result.isNull());
|
||||
|
||||
result = a P a P a;
|
||||
QVERIFY(!result.isNull());
|
||||
}
|
||||
|
||||
void runScenario()
|
||||
{
|
||||
@ -357,6 +379,10 @@ void runScenario()
|
||||
QCOMPARE(ba2, QByteArray(withZero + withZero + withZero));
|
||||
}
|
||||
|
||||
// null vs. empty
|
||||
checkNullVsEmpty(QStringLiteral(""));
|
||||
checkNullVsEmpty(QByteArrayLiteral(""), "QTBUG-114238: inconsistent isEmpty/isNull between QString and QByteArray concatenation");
|
||||
|
||||
checkItWorksWithFreeSpaceAtBegin(QByteArray(UTF8_LITERAL), "1234");
|
||||
if (QTest::currentTestFailed())
|
||||
return;
|
||||
|
Loading…
x
Reference in New Issue
Block a user