Fix QString::operator=(QLatin1String) for substrings
authorKent Hansen <kent.hansen@nokia.com>
Wed, 1 Feb 2012 20:08:30 +0000 (21:08 +0100)
committerQt by Nokia <qt-info@nokia.com>
Thu, 2 Feb 2012 10:10:04 +0000 (11:10 +0100)
QLatin1String now has a constructor that takes explicit length, which
makes it possible to create a QLatin1String that isn't null-terminated.
Made QString::operator=(QLatin1String) work in that case.

Change-Id: Ie77eabd2f8f036531d67cd8051a7b6305b386ccf
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
src/corelib/tools/qstring.h
tests/auto/corelib/tools/qstring/tst_qstring.cpp

index 285369a..f1bad5c 100644 (file)
@@ -711,7 +711,7 @@ inline bool QString::isDetached() const
 { return d->ref == 1; }
 inline QString &QString::operator=(const QLatin1String &s)
 {
-    *this = fromLatin1(s.latin1());
+    *this = fromLatin1(s.latin1(), s.size());
     return *this;
 }
 inline void QString::clear()
index 781377f..dae1dc4 100644 (file)
@@ -224,6 +224,7 @@ private slots:
     void operatorGreaterWithQLatin1String();
     void compareQLatin1Strings();
     void fromQLatin1StringWithLength();
+    void assignQLatin1String();
 };
 
 typedef QList<int> IntList;
@@ -5286,6 +5287,28 @@ void tst_QString::fromQLatin1StringWithLength()
     QCOMPARE(foo, QString::fromLatin1("foo"));
 }
 
+void tst_QString::assignQLatin1String()
+{
+    QString empty = QLatin1String("");
+    QVERIFY(empty.isEmpty());
+    QVERIFY(!empty.isNull());
+
+    QString null = QLatin1String(0);
+    QVERIFY(null.isEmpty());
+    QVERIFY(null.isNull());
+
+    QLatin1String latin1foo("foo");
+    QString foo = latin1foo;
+    QCOMPARE(foo.size(), latin1foo.size());
+    QCOMPARE(foo, QString::fromLatin1("foo"));
+
+    QLatin1String latin1subfoo("foobar", 3);
+    foo = latin1subfoo;
+    QCOMPARE(foo.size(), latin1subfoo.size());
+    QCOMPARE(foo, QString::fromLatin1("foo"));
+
+}
+
 QTEST_APPLESS_MAIN(tst_QString)
 
 #include "tst_qstring.moc"