summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdward Welbourne <edward.welbourne@qt.io>2020-01-30 17:24:01 +0100
committerEdward Welbourne <edward.welbourne@qt.io>2020-01-31 12:26:34 +0100
commitb4b3b5c69469f67103309cb2f401c243d840cf4e (patch)
treec0ac2c56a5dfb0605efe61626f27f9de2bb3db5f
parenta5be18cc7d4bfee177923a4afbe51f9fd81ffbc6 (diff)
Clarify handling of unspecified year in two QCalendar methods
[ChangeLog][QtCore] QCalendar::monthsInYear(QCalendar::Unspecified) now returns maximumMonthsInYear(). QCalendar::daysInYear() now makes clear that its handling of unspecified year is undefined. Change-Id: Ifef8723193868c666f6afeb7f190af4929d30dea Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--src/corelib/time/qcalendar.cpp11
-rw-r--r--tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp25
2 files changed, 33 insertions, 3 deletions
diff --git a/src/corelib/time/qcalendar.cpp b/src/corelib/time/qcalendar.cpp
index 9d485f181e..32f0a511a3 100644
--- a/src/corelib/time/qcalendar.cpp
+++ b/src/corelib/time/qcalendar.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2019 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -750,6 +750,8 @@ int QCalendar::daysInMonth(int month, int year) const
/*!
Returns the number of days in the given \a year.
+
+ Handling of \c Unspecified as \a year is undefined.
*/
int QCalendar::daysInYear(int year) const
{
@@ -758,10 +760,15 @@ int QCalendar::daysInYear(int year) const
/*!
Returns the number of months in the given \a year.
+
+ If \a year is \c Unspecified, returns the maximum number of months in a
+ year.
+
+ \sa maximumMonthsInYear()
*/
int QCalendar::monthsInYear(int year) const
{
- return d ? d->monthsInYear(year) : 0;
+ return d ? year == Unspecified ? d->maximumMonthsInYear() : d->monthsInYear(year) : 0;
}
/*!
diff --git a/tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp b/tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp
index 9b41014394..5da69e76a5 100644
--- a/tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp
+++ b/tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2018 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -40,6 +40,8 @@ private:
private slots:
void basic_data();
void basic();
+ void unspecified_data() { basic_data(); }
+ void unspecified();
void nameCase();
void specific_data();
void specific();
@@ -145,6 +147,27 @@ void tst_QCalendar::basic()
NORMALYEAR(cal, year);
}
+void tst_QCalendar::unspecified()
+{
+ QFETCH(QCalendar::System, system);
+ QCalendar cal(system);
+
+ const QDate today = QDate::currentDate();
+ const int thisYear = today.year();
+ QCOMPARE(cal.monthsInYear(QCalendar::Unspecified), cal.maximumMonthsInYear());
+ for (int month = cal.maximumMonthsInYear(); month > 0; month--) {
+ const int days = cal.daysInMonth(month);
+ int count = 0;
+ // 19 years = one Metonic cycle (used by some lunar calendars)
+ for (int i = 19; i > 0; --i) {
+ if (cal.daysInMonth(month, thisYear - i) == days)
+ count++;
+ }
+ // Require a majority of the years tested:
+ QVERIFY2(count > 9, "Default daysInMonth() should be for a normal year");
+ }
+}
+
void tst_QCalendar::nameCase()
{
QVERIFY(QCalendar::availableCalendars().contains(QStringLiteral("Gregorian")));