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"