File indexing completed on 2024-04-28 03:58:56

0001 /*
0002     SPDX-FileCopyrightText: 2011 John Layt <john@layt.net>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "kdatetimeedittest.h"
0008 
0009 #include <QAction>
0010 #include <QComboBox>
0011 #include <QDate>
0012 #include <QMenu>
0013 
0014 #include "kdatecombobox.h"
0015 #include "kdatetimeedit.h"
0016 #include <QTest>
0017 
0018 QTEST_MAIN(KDateTimeEditTest)
0019 
0020 void KDateTimeEditTest::testDefaults()
0021 {
0022     m_edit = new KDateTimeEdit(nullptr);
0023     QCOMPARE(m_edit->dateTime(), QDateTime(QDate::currentDate(), QTime(0, 0, 0)));
0024     QCOMPARE(m_edit->date(), QDate::currentDate());
0025     QCOMPARE(m_edit->time(), QTime(0, 0, 0));
0026     // Missing support in QLocale
0027     // QCOMPARE(m_edit->minimumDateTime(), KDateTime(KLocale::global()->calendar()->earliestValidDate(), QTime(0, 0, 0)));
0028     // QCOMPARE(m_edit->maximumDateTime(), KDateTime(KLocale::global()->calendar()->latestValidDate(), QTime(23, 59, 59, 999)));
0029     QCOMPARE(m_edit->isValid(), true);
0030     QCOMPARE(m_edit->isNull(), false);
0031     QCOMPARE(m_edit->options(),
0032              KDateTimeEdit::ShowDate | KDateTimeEdit::EditDate | KDateTimeEdit::SelectDate | KDateTimeEdit::DatePicker | KDateTimeEdit::DateKeywords
0033                  | KDateTimeEdit::ShowTime | KDateTimeEdit::EditTime | KDateTimeEdit::SelectTime);
0034     QCOMPARE(m_edit->dateDisplayFormat(), QLocale::ShortFormat);
0035     QCOMPARE(m_edit->timeListInterval(), 15);
0036     QCOMPARE(m_edit->timeDisplayFormat(), QLocale::ShortFormat);
0037     delete m_edit;
0038 }
0039 
0040 void KDateTimeEditTest::testValidNull()
0041 {
0042     m_edit = new KDateTimeEdit(nullptr);
0043     QCOMPARE(m_edit->isValid(), true);
0044     QCOMPARE(m_edit->isNull(), false);
0045     m_edit->setDateTime(QDateTime());
0046     QCOMPARE(m_edit->isValid(), false);
0047     QCOMPARE(m_edit->isNull(), true);
0048     delete m_edit;
0049 }
0050 
0051 void KDateTimeEditTest::testDateTimeRange()
0052 {
0053     m_edit = new KDateTimeEdit(nullptr);
0054     m_edit->setDateTime(QDateTime(QDate(2000, 1, 1), QTime(12, 0, 0)));
0055     // Missing support in QLocale
0056     // QCOMPARE(m_edit->minimumDateTime(), KDateTime(KLocale::global()->calendar()->earliestValidDate(), QTime(0, 0, 0)));
0057     // QCOMPARE(m_edit->maximumDateTime(), KDateTime(KLocale::global()->calendar()->latestValidDate(), QTime(23, 59, 59, 999)));
0058     QCOMPARE(m_edit->isValid(), true);
0059 
0060     m_edit->setDateTimeRange(QDateTime(QDate(2001, 1, 1), QTime(10, 0, 0)), QDateTime(QDate(2002, 1, 1), QTime(20, 0, 0)));
0061     QCOMPARE(m_edit->minimumDateTime(), QDateTime(QDate(2001, 1, 1), QTime(10, 0, 0)));
0062     QCOMPARE(m_edit->maximumDateTime(), QDateTime(QDate(2002, 1, 1), QTime(20, 0, 0)));
0063     QCOMPARE(m_edit->isValid(), false);
0064 
0065     m_edit->setDateTime(QDateTime(QDate(2001, 1, 1), QTime(9, 59, 59, 999)));
0066     QCOMPARE(m_edit->isValid(), false);
0067     m_edit->setDateTime(QDateTime(QDate(2001, 1, 1), QTime(10, 0, 0)));
0068     QCOMPARE(m_edit->isValid(), true);
0069     m_edit->setDateTime(QDateTime(QDate(2002, 1, 1), QTime(20, 0, 0, 1)));
0070     QCOMPARE(m_edit->isValid(), false);
0071     m_edit->setDateTime(QDateTime(QDate(2002, 1, 1), QTime(20, 0, 0, 0)));
0072     QCOMPARE(m_edit->isValid(), true);
0073 
0074     m_edit->setDateTimeRange(QDateTime(QDate(1995, 1, 1), QTime(10, 0, 0)), QDateTime(QDate(1990, 1, 1), QTime(20, 0, 0)));
0075     QCOMPARE(m_edit->minimumDateTime(), QDateTime(QDate(2001, 1, 1), QTime(10, 0, 0)));
0076     QCOMPARE(m_edit->maximumDateTime(), QDateTime(QDate(2002, 1, 1), QTime(20, 0, 0)));
0077 
0078     m_edit->setMinimumDateTime(QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0)));
0079     QCOMPARE(m_edit->minimumDateTime(), QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0)));
0080     QCOMPARE(m_edit->maximumDateTime(), QDateTime(QDate(2002, 1, 1), QTime(20, 0, 0)));
0081 
0082     m_edit->setMaximumDateTime(QDateTime(QDate(2003, 1, 1), QTime(0, 0, 0)));
0083     QCOMPARE(m_edit->minimumDateTime(), QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0)));
0084     QCOMPARE(m_edit->maximumDateTime(), QDateTime(QDate(2003, 1, 1), QTime(0, 0, 0)));
0085 
0086     delete m_edit;
0087 }
0088 
0089 void KDateTimeEditTest::testDateList()
0090 {
0091     m_edit = new KDateTimeEdit(nullptr);
0092     QMap<QDate, QString> map;
0093 
0094     // KDateTimeEditTest default map
0095     QCOMPARE(m_edit->dateMap(), map);
0096 
0097     // KDateTimeEditTest basic map
0098     map.clear();
0099     map.insert(QDate(2000, 1, 1), QStringLiteral("New Years Day"));
0100     map.insert(QDate(2000, 1, 2), QString());
0101     map.insert(QDate(2000, 1, 3), QStringLiteral("separator"));
0102     map.insert(QDate(), QStringLiteral("No Date"));
0103     m_edit->setDateMap(map);
0104     QCOMPARE(m_edit->dateMap(), map);
0105 
0106     delete m_edit;
0107 }
0108 
0109 void KDateTimeEditTest::testOptions()
0110 {
0111     m_edit = new KDateTimeEdit(nullptr);
0112     KDateTimeEdit::Options options = KDateTimeEdit::ShowDate | KDateTimeEdit::EditDate | KDateTimeEdit::SelectDate | KDateTimeEdit::DatePicker
0113         | KDateTimeEdit::DateKeywords | KDateTimeEdit::ShowTime | KDateTimeEdit::EditTime | KDateTimeEdit::SelectTime;
0114     QCOMPARE(m_edit->options(), options);
0115     options = KDateTimeEdit::EditDate | KDateTimeEdit::WarnOnInvalid;
0116     m_edit->setOptions(options);
0117     QCOMPARE(m_edit->options(), options);
0118     delete m_edit;
0119 }
0120 
0121 void KDateTimeEditTest::testDateDisplayFormat()
0122 {
0123     m_edit = new KDateTimeEdit(nullptr);
0124     QLocale::FormatType format = QLocale::ShortFormat;
0125     QCOMPARE(m_edit->dateDisplayFormat(), format);
0126     format = QLocale::NarrowFormat;
0127     m_edit->setDateDisplayFormat(format);
0128     QCOMPARE(m_edit->dateDisplayFormat(), format);
0129     delete m_edit;
0130 }
0131 
0132 void KDateTimeEditTest::testTimeListInterval()
0133 {
0134     m_edit = new KDateTimeEdit();
0135     QCOMPARE(m_edit->timeListInterval(), 15);
0136     m_edit->setTimeListInterval(60);
0137     QCOMPARE(m_edit->timeListInterval(), 60);
0138     delete m_edit;
0139 }
0140 
0141 void KDateTimeEditTest::testTimeList()
0142 {
0143     m_edit = new KDateTimeEdit();
0144     QList<QTime> list;
0145 
0146     // KDateTimeEditTest default list
0147     QTime thisTime = QTime(0, 0, 0);
0148     for (int i = 0; i < 1440; i = i + 15) {
0149         list << thisTime.addSecs(i * 60);
0150     }
0151     list << QTime(23, 59, 59, 999);
0152     QCOMPARE(m_edit->timeList(), list);
0153 
0154     // KDateTimeEditTest basic list
0155     list.clear();
0156     list << QTime(3, 0, 0) << QTime(15, 16, 17);
0157     m_edit->setTimeList(list);
0158     QCOMPARE(m_edit->timeList(), list);
0159 
0160     delete m_edit;
0161 }
0162 
0163 void KDateTimeEditTest::testTimeDisplayFormat()
0164 {
0165     m_edit = new KDateTimeEdit();
0166     QLocale::FormatType format = QLocale::ShortFormat;
0167     QCOMPARE(m_edit->timeDisplayFormat(), format);
0168     format = QLocale::NarrowFormat;
0169     m_edit->setTimeDisplayFormat(format);
0170     QCOMPARE(m_edit->timeDisplayFormat(), format);
0171     delete m_edit;
0172 }
0173 
0174 void KDateTimeEditTest::testCalendarSystem()
0175 {
0176     m_edit = new KDateTimeEdit();
0177     QList<QLocale> calendars;
0178     calendars << QLocale();
0179 
0180     QCOMPARE(m_edit->locale(), QLocale());
0181     QCOMPARE(m_edit->calendarLocalesList(), calendars);
0182 
0183     m_edit->setLocale(QLocale(QLocale::Hebrew));
0184     QCOMPARE(m_edit->locale(), QLocale(QLocale::Hebrew));
0185 
0186     calendars.clear();
0187     calendars.append(QLocale(QLocale::Hebrew));
0188     calendars.append(QLocale(QLocale::Chinese));
0189     m_edit->setCalendarLocalesList(calendars);
0190     QCOMPARE(m_edit->calendarLocalesList(), calendars);
0191 
0192     delete m_edit;
0193 }
0194 
0195 void KDateTimeEditTest::testTimeSpec()
0196 {
0197     m_edit = new KDateTimeEdit();
0198 
0199     QCOMPARE(m_edit->timeZone(), QDateTime::currentDateTime().timeZone());
0200     QList<QTimeZone> zones;
0201     const auto zoneIds = QTimeZone::availableTimeZoneIds();
0202     for (const QByteArray &zoneId : zoneIds) {
0203         zones << QTimeZone(zoneId);
0204     }
0205     QCOMPARE(m_edit->timeZones(), zones);
0206 
0207     QTimeZone zone(3600);
0208     m_edit->setTimeZone(zone);
0209     QCOMPARE(m_edit->timeZone(), zone);
0210 
0211     zones << zone;
0212     m_edit->setTimeZones(zones);
0213     QCOMPARE(m_edit->timeZones(), zones);
0214 
0215     delete m_edit;
0216 }
0217 
0218 template<typename T>
0219 static T findVisibleChild(QWidget *parent)
0220 {
0221     const auto children = parent->findChildren<T>();
0222     for (T child : children) {
0223         if (child->isVisible()) {
0224             return child;
0225         }
0226     }
0227     return nullptr;
0228 }
0229 
0230 void KDateTimeEditTest::testDateMenu()
0231 {
0232     m_edit = new KDateTimeEdit();
0233     KDateTimeEdit::Options options =
0234         KDateTimeEdit::ShowDate | KDateTimeEdit::EditDate | KDateTimeEdit::SelectDate | KDateTimeEdit::DatePicker | KDateTimeEdit::DateKeywords;
0235     m_edit->setOptions(options);
0236     m_edit->setDate(QDate(2002, 1, 1));
0237     m_edit->show();
0238     QComboBox *combo = findVisibleChild<QComboBox *>(m_edit);
0239     QVERIFY(combo);
0240     combo->showPopup();
0241     QMenu *menu = findVisibleChild<QMenu *>(combo);
0242     QVERIFY(menu);
0243     QAction *nextMonthAction = menu->actions().at(3);
0244     QCOMPARE(nextMonthAction->text(), KDateComboBox::tr("Next Month", "@option next month"));
0245     nextMonthAction->trigger();
0246     QCOMPARE(m_edit->date(), QDate::currentDate().addMonths(1));
0247 }
0248 
0249 #include "moc_kdatetimeedittest.cpp"