Make mid() and midRef() properly return empty, non-null objects
If we request a substring starting at the very end of the string, QString::mid should return an empty string, not a null string. For instance, QString("abc").mid(3, 0) used to return a null one, while this patch makes it return an empty one. The same thing applies to QString::midRef() and QByteArray::mid(). Change-Id: Ie9efd7a0622d429efd0fb682c19856c19e9469af Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
This commit is contained in:
parent
b39df8bf92
commit
601d685849
5
dist/changes-5.0.0
vendored
5
dist/changes-5.0.0
vendored
@ -221,6 +221,11 @@ QtCore
|
|||||||
altering the watchlist in both the singular and QStringList overloads of
|
altering the watchlist in both the singular and QStringList overloads of
|
||||||
addPath and removePath.
|
addPath and removePath.
|
||||||
|
|
||||||
|
* QString::mid, QString::midRef and QByteArray::mid, if the position passed
|
||||||
|
is equal to the length (that is, right after the last character/byte),
|
||||||
|
now return an empty QString, QStringRef or QByteArray respectively.
|
||||||
|
in Qt 4 they returned a null QString or a null QStringRef.
|
||||||
|
|
||||||
QtGui
|
QtGui
|
||||||
-----
|
-----
|
||||||
* Accessibility has been refactored. The hierachy of accessible objects is implemented via
|
* Accessibility has been refactored. The hierachy of accessible objects is implemented via
|
||||||
|
@ -2660,7 +2660,7 @@ QByteArray QByteArray::right(int len) const
|
|||||||
|
|
||||||
QByteArray QByteArray::mid(int pos, int len) const
|
QByteArray QByteArray::mid(int pos, int len) const
|
||||||
{
|
{
|
||||||
if (d == &shared_null.ba || d == &shared_empty.ba || pos >= d->size)
|
if (d == &shared_null.ba || d == &shared_empty.ba || pos > d->size)
|
||||||
return QByteArray();
|
return QByteArray();
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
len = d->size - pos;
|
len = d->size - pos;
|
||||||
|
@ -3385,7 +3385,7 @@ QString QString::right(int n) const
|
|||||||
|
|
||||||
QString QString::mid(int position, int n) const
|
QString QString::mid(int position, int n) const
|
||||||
{
|
{
|
||||||
if (d == &shared_null.str || position >= d->size)
|
if (d == &shared_null.str || position > d->size)
|
||||||
return QString();
|
return QString();
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
n = d->size - position;
|
n = d->size - position;
|
||||||
@ -8024,7 +8024,7 @@ QStringRef QString::rightRef(int n) const
|
|||||||
Returns a substring reference to \a n characters of this string,
|
Returns a substring reference to \a n characters of this string,
|
||||||
starting at the specified \a position.
|
starting at the specified \a position.
|
||||||
|
|
||||||
If the \a position exceeds the length of the string, an empty
|
If the \a position exceeds the length of the string, a null
|
||||||
reference is returned.
|
reference is returned.
|
||||||
|
|
||||||
If there are less than \a n characters available in the string,
|
If there are less than \a n characters available in the string,
|
||||||
@ -8041,7 +8041,7 @@ QStringRef QString::rightRef(int n) const
|
|||||||
|
|
||||||
QStringRef QString::midRef(int position, int n) const
|
QStringRef QString::midRef(int position, int n) const
|
||||||
{
|
{
|
||||||
if (d == &shared_null.str || position >= d->size)
|
if (d == &shared_null.str || position > d->size)
|
||||||
return QStringRef();
|
return QStringRef();
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
n = d->size - position;
|
n = d->size - position;
|
||||||
|
@ -1417,6 +1417,10 @@ void tst_QString::mid()
|
|||||||
|
|
||||||
QCOMPARE(a.mid(3,3),(QString)"DEF");
|
QCOMPARE(a.mid(3,3),(QString)"DEF");
|
||||||
QCOMPARE(a.mid(0,0),(QString)"");
|
QCOMPARE(a.mid(0,0),(QString)"");
|
||||||
|
QVERIFY(!a.mid(15,0).isNull());
|
||||||
|
QVERIFY(a.mid(15,0).isEmpty());
|
||||||
|
QVERIFY(!a.mid(15,1).isNull());
|
||||||
|
QVERIFY(a.mid(15,1).isEmpty());
|
||||||
QVERIFY(a.mid(9999).isNull());
|
QVERIFY(a.mid(9999).isNull());
|
||||||
QVERIFY(a.mid(9999,1).isNull());
|
QVERIFY(a.mid(9999,1).isNull());
|
||||||
|
|
||||||
@ -1439,6 +1443,10 @@ void tst_QString::midRef()
|
|||||||
|
|
||||||
QCOMPARE(a.midRef(3,3).toString(),(QString)"DEF");
|
QCOMPARE(a.midRef(3,3).toString(),(QString)"DEF");
|
||||||
QCOMPARE(a.midRef(0,0).toString(),(QString)"");
|
QCOMPARE(a.midRef(0,0).toString(),(QString)"");
|
||||||
|
QVERIFY(!a.midRef(15,0).toString().isNull());
|
||||||
|
QVERIFY(a.midRef(15,0).toString().isEmpty());
|
||||||
|
QVERIFY(!a.midRef(15,1).toString().isNull());
|
||||||
|
QVERIFY(a.midRef(15,1).toString().isEmpty());
|
||||||
QVERIFY(a.midRef(9999).toString().isEmpty());
|
QVERIFY(a.midRef(9999).toString().isEmpty());
|
||||||
QVERIFY(a.midRef(9999,1).toString().isEmpty());
|
QVERIFY(a.midRef(9999,1).toString().isEmpty());
|
||||||
|
|
||||||
|
@ -1310,8 +1310,8 @@ void tst_Collections::byteArray()
|
|||||||
QVERIFY(hello.mid(0, hello.size()+1) == hello);
|
QVERIFY(hello.mid(0, hello.size()+1) == hello);
|
||||||
|
|
||||||
QVERIFY(hello.mid(hello.size()-0) == "");
|
QVERIFY(hello.mid(hello.size()-0) == "");
|
||||||
|
QVERIFY(hello.mid(hello.size()-0).isEmpty());
|
||||||
QVERIFY(hello.mid(hello.size()-0).isNull()); // weird but valid 3.x semantics
|
QVERIFY(!hello.mid(hello.size()-0).isNull());
|
||||||
QVERIFY(hello.mid(hello.size()-1) == "o");
|
QVERIFY(hello.mid(hello.size()-1) == "o");
|
||||||
QVERIFY(hello.mid(hello.size()-2) == "lo");
|
QVERIFY(hello.mid(hello.size()-2) == "lo");
|
||||||
QVERIFY(hello.mid(hello.size()-200) == "hello");
|
QVERIFY(hello.mid(hello.size()-200) == "hello");
|
||||||
@ -2030,8 +2030,8 @@ void tst_Collections::qstring()
|
|||||||
QVERIFY(hello.mid(0, hello.size()+1) == hello);
|
QVERIFY(hello.mid(0, hello.size()+1) == hello);
|
||||||
|
|
||||||
QVERIFY(hello.mid(hello.size()-0) == "");
|
QVERIFY(hello.mid(hello.size()-0) == "");
|
||||||
|
QVERIFY(hello.mid(hello.size()-0).isEmpty());
|
||||||
QVERIFY(hello.mid(hello.size()-0).isNull());
|
QVERIFY(!hello.mid(hello.size()-0).isNull());
|
||||||
QVERIFY(hello.mid(hello.size()-1) == "o");
|
QVERIFY(hello.mid(hello.size()-1) == "o");
|
||||||
QVERIFY(hello.mid(hello.size()-2) == "lo");
|
QVERIFY(hello.mid(hello.size()-2) == "lo");
|
||||||
QVERIFY(hello.mid(hello.size()-200) == "hello");
|
QVERIFY(hello.mid(hello.size()-200) == "hello");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user