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;
|
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
|
template <> struct QConcatenable<char> : private QAbstractConcatenable
|
||||||
{
|
{
|
||||||
typedef char type;
|
typedef char type;
|
||||||
|
@ -77,6 +77,28 @@ void checkItWorksWithFreeSpaceAtBegin(const String &chunk, const Separator &sepa
|
|||||||
QCOMPARE(str, expected);
|
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()
|
void runScenario()
|
||||||
{
|
{
|
||||||
@ -357,6 +379,10 @@ void runScenario()
|
|||||||
QCOMPARE(ba2, QByteArray(withZero + withZero + withZero));
|
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");
|
checkItWorksWithFreeSpaceAtBegin(QByteArray(UTF8_LITERAL), "1234");
|
||||||
if (QTest::currentTestFailed())
|
if (QTest::currentTestFailed())
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user