From b4b3b5c69469f67103309cb2f401c243d840cf4e Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Thu, 30 Jan 2020 17:24:01 +0100 Subject: [PATCH] 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 Reviewed-by: Thiago Macieira --- src/corelib/time/qcalendar.cpp | 11 ++++++-- .../corelib/time/qcalendar/tst_qcalendar.cpp | 25 ++++++++++++++++++- 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")));