Expand testing of QDateTime's isNull() and isValid()
Bring out the asymmetry between date and time more clearly; when date is valid, an invalid time is ignored in favor of QTime(0, 0). At the same time, eliminate an un-needed variable from the code that implements this special handling. (Left over from when the QTime was passed by const ref, rather than by value.) Change-Id: I81d8a9026cbb7887a8c638a2761b3db54c088af7 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>bb10
parent
a2236c7675
commit
795c94658d
|
|
@ -3180,9 +3180,8 @@ static void setTimeSpec(QDateTimeData &d, Qt::TimeSpec spec, int offsetSeconds)
|
|||
static void setDateTime(QDateTimeData &d, QDate date, QTime time)
|
||||
{
|
||||
// If the date is valid and the time is not we set time to 00:00:00
|
||||
QTime useTime = time;
|
||||
if (!useTime.isValid() && date.isValid())
|
||||
useTime = QTime::fromMSecsSinceStartOfDay(0);
|
||||
if (!time.isValid() && date.isValid())
|
||||
time = QTime::fromMSecsSinceStartOfDay(0);
|
||||
|
||||
QDateTimePrivate::StatusFlags newStatus = { };
|
||||
|
||||
|
|
@ -3195,8 +3194,8 @@ static void setDateTime(QDateTimeData &d, QDate date, QTime time)
|
|||
|
||||
// Set time value and status
|
||||
int ds = 0;
|
||||
if (useTime.isValid()) {
|
||||
ds = useTime.msecsSinceStartOfDay();
|
||||
if (time.isValid()) {
|
||||
ds = time.msecsSinceStartOfDay();
|
||||
newStatus |= QDateTimePrivate::ValidTime;
|
||||
}
|
||||
Q_ASSERT(ds < MSECS_PER_DAY);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2021 The Qt Company Ltd.
|
||||
** Copyright (C) 2022 The Qt Company Ltd.
|
||||
** Copyright (C) 2016 Intel Corporation.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
|
|
@ -341,14 +341,26 @@ void tst_QDateTime::isNull()
|
|||
dt1.setTime(QTime());
|
||||
QVERIFY(dt1.isNull());
|
||||
dt1.setTimeSpec(Qt::UTC);
|
||||
QVERIFY(dt1.isNull()); // maybe it should return false?
|
||||
QVERIFY(dt1.isNull());
|
||||
|
||||
dt1.setTime(QTime(12, 34, 56));
|
||||
QVERIFY(!dt1.isNull());
|
||||
dt1.setTime(QTime()); // Date still invalid, so this really clears time.
|
||||
QVERIFY(dt1.isNull());
|
||||
dt1.setDate(QDate(2004, 1, 2));
|
||||
QVERIFY(!dt1.isNull());
|
||||
dt1.setTime(QTime(12, 34, 56));
|
||||
QVERIFY(!dt1.isNull());
|
||||
dt1.setTime(QTime());
|
||||
dt1.setTime(QTime()); // Actually sets time to QTime(0, 0), as date is still valid.
|
||||
QVERIFY(!dt1.isNull());
|
||||
dt1.setDate(QDate()); // Time remains valid
|
||||
QVERIFY(!dt1.isNull());
|
||||
dt1.setTime(QTime()); // Now really sets time invalid, too
|
||||
QVERIFY(dt1.isNull());
|
||||
|
||||
// Either date or time non-null => date-time isn't null:
|
||||
QVERIFY(!QDateTime(QDate(), QTime(0, 0)).isNull());
|
||||
QVERIFY(!QDateTime(QDate(2022, 2, 16), QTime()).isNull());
|
||||
}
|
||||
|
||||
void tst_QDateTime::isValid()
|
||||
|
|
@ -364,12 +376,21 @@ void tst_QDateTime::isValid()
|
|||
|
||||
dt1.setDate(QDate(2004, 1, 2));
|
||||
QVERIFY(dt1.isValid());
|
||||
dt1.setTime(QTime()); // Effectively QTime(0, 0)
|
||||
QVERIFY(dt1.isValid());
|
||||
dt1.setDate(QDate());
|
||||
QVERIFY(!dt1.isValid());
|
||||
dt1.setTime(QTime(12, 34, 56));
|
||||
QVERIFY(!dt1.isValid());
|
||||
dt1.setTime(QTime());
|
||||
dt1.setTime(QTime()); // Does sets time invalid, as date is invalid
|
||||
QVERIFY(!dt1.isValid());
|
||||
dt1.setDate(QDate(2004, 1, 2)); // Kicks time back to QTime(0, 0)
|
||||
QVERIFY(dt1.isValid());
|
||||
|
||||
// Invalid date => invalid date-time:
|
||||
QVERIFY(!QDateTime(QDate(), QTime(0, 0)).isValid());
|
||||
// Invalid time gets replaced with QTime(0, 0) when date is valid:
|
||||
QVERIFY(QDateTime(QDate(2022, 2, 16), QTime()).isValid());
|
||||
}
|
||||
|
||||
void tst_QDateTime::date()
|
||||
|
|
|
|||
Loading…
Reference in New Issue