Return invalid datetime when calling addMSecs with invalid QDateTime.
authorMitch Curtis <mitch.curtis@digia.com>
Wed, 17 Oct 2012 11:56:50 +0000 (13:56 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 23 Oct 2012 23:38:58 +0000 (01:38 +0200)
This is in line with what QTime::addMSecs and QDate::addDays do, for
example.

Change-Id: I902112486727f74f669a97bde6c42028e0838f8d
Reviewed-by: Jon Severinsson <jon@severinsson.net>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
src/corelib/tools/qdatetime.cpp
tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp

index 7845273..7d18e93 100644 (file)
@@ -2692,6 +2692,9 @@ QDateTime QDateTime::addYears(int nyears) const
 
 QDateTime QDateTimePrivate::addMSecs(const QDateTime &dt, qint64 msecs)
 {
+    if (!dt.isValid())
+        return QDateTime();
+
     QDate utcDate;
     QTime utcTime;
     dt.d->getUTC(utcDate, utcTime);
@@ -2742,6 +2745,8 @@ void QDateTimePrivate::addMSecs(QDate &utcDate, QTime &utcTime, qint64 msecs)
     later than the datetime of this object (or earlier if \a s is
     negative).
 
+    If this datetime is invalid, an invalid datetime will be returned.
+
     \sa addMSecs(), secsTo(), addDays(), addMonths(), addYears()
 */
 
@@ -2755,6 +2760,8 @@ QDateTime QDateTime::addSecs(qint64 s) const
     later than the datetime of this object (or earlier if \a msecs is
     negative).
 
+    If this datetime is invalid, an invalid datetime will be returned.
+
     \sa addSecs(), msecsTo(), addDays(), addMonths(), addYears()
 */
 QDateTime QDateTime::addMSecs(qint64 msecs) const
index c6945f4..9e71a32 100644 (file)
@@ -728,6 +728,8 @@ void tst_QDateTime::addSecs_data()
     QTest::newRow("toPositive") << QDateTime(QDate(-1, 12, 31), QTime(23, 59, 59), Qt::UTC)
                                 << 1
                                 << QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), Qt::UTC);
+
+    QTest::newRow("invalid") << invalidDateTime() << 1 << invalidDateTime();
 }
 
 void tst_QDateTime::addSecs()
@@ -915,17 +917,22 @@ void tst_QDateTime::secsTo()
     QFETCH(int, nsecs);
     QFETCH(QDateTime, result);
 
-#ifdef Q_OS_IRIX
-    QEXPECT_FAIL("cet4", "IRIX databases say 1970 had DST", Abort);
-#endif
-    QCOMPARE(dt.secsTo(result), (qint64)nsecs);
-    QCOMPARE(result.secsTo(dt), (qint64)-nsecs);
-    QVERIFY((dt == result) == (0 == nsecs));
-    QVERIFY((dt != result) == (0 != nsecs));
-    QVERIFY((dt < result) == (0 < nsecs));
-    QVERIFY((dt <= result) == (0 <= nsecs));
-    QVERIFY((dt > result) == (0 > nsecs));
-    QVERIFY((dt >= result) == (0 >= nsecs));
+    if (dt.isValid()) {
+    #ifdef Q_OS_IRIX
+        QEXPECT_FAIL("cet4", "IRIX databases say 1970 had DST", Abort);
+    #endif
+        QCOMPARE(dt.secsTo(result), (qint64)nsecs);
+        QCOMPARE(result.secsTo(dt), (qint64)-nsecs);
+        QVERIFY((dt == result) == (0 == nsecs));
+        QVERIFY((dt != result) == (0 != nsecs));
+        QVERIFY((dt < result) == (0 < nsecs));
+        QVERIFY((dt <= result) == (0 <= nsecs));
+        QVERIFY((dt > result) == (0 > nsecs));
+        QVERIFY((dt >= result) == (0 >= nsecs));
+    } else {
+        QVERIFY(dt.secsTo(result) == 0);
+        QVERIFY(result.secsTo(dt) == 0);
+    }
 }
 
 void tst_QDateTime::msecsTo_data()
@@ -939,17 +946,22 @@ void tst_QDateTime::msecsTo()
     QFETCH(int, nsecs);
     QFETCH(QDateTime, result);
 
-#ifdef Q_OS_IRIX
-    QEXPECT_FAIL("cet4", "IRIX databases say 1970 had DST", Abort);
-#endif
-    QCOMPARE(dt.msecsTo(result), qint64(nsecs) * 1000);
-    QCOMPARE(result.msecsTo(dt), -qint64(nsecs) * 1000);
-    QVERIFY((dt == result) == (0 == (qint64(nsecs) * 1000)));
-    QVERIFY((dt != result) == (0 != (qint64(nsecs) * 1000)));
-    QVERIFY((dt < result) == (0 < (qint64(nsecs) * 1000)));
-    QVERIFY((dt <= result) == (0 <= (qint64(nsecs) * 1000)));
-    QVERIFY((dt > result) == (0 > (qint64(nsecs) * 1000)));
-    QVERIFY((dt >= result) == (0 >= (qint64(nsecs) * 1000)));
+    if (dt.isValid()) {
+    #ifdef Q_OS_IRIX
+        QEXPECT_FAIL("cet4", "IRIX databases say 1970 had DST", Abort);
+    #endif
+        QCOMPARE(dt.msecsTo(result), qint64(nsecs) * 1000);
+        QCOMPARE(result.msecsTo(dt), -qint64(nsecs) * 1000);
+        QVERIFY((dt == result) == (0 == (qint64(nsecs) * 1000)));
+        QVERIFY((dt != result) == (0 != (qint64(nsecs) * 1000)));
+        QVERIFY((dt < result) == (0 < (qint64(nsecs) * 1000)));
+        QVERIFY((dt <= result) == (0 <= (qint64(nsecs) * 1000)));
+        QVERIFY((dt > result) == (0 > (qint64(nsecs) * 1000)));
+        QVERIFY((dt >= result) == (0 >= (qint64(nsecs) * 1000)));
+    } else {
+        QVERIFY(dt.msecsTo(result) == 0);
+        QVERIFY(result.msecsTo(dt) == 0);
+    }
 }
 
 void tst_QDateTime::currentDateTime()