File indexing completed on 2024-04-28 15:31:52
0001 /* 0002 SPDX-FileCopyrightText: 2011 John Layt <john@layt.net> 0003 SPDX-FileCopyrightText: 2022 g10 Code GmbH 0004 SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 #include "kdatecomboboxtest.h" 0010 0011 #include <QDate> 0012 0013 #include "kdatecombobox.h" 0014 #include "kdatepickerpopup.h" 0015 0016 #include <QLineEdit> 0017 #include <QSignalSpy> 0018 #include <QTest> 0019 0020 QTEST_MAIN(KDateComboBoxTest) 0021 0022 #ifndef Q_OS_WIN 0023 void initLocale() 0024 { 0025 setenv("LC_ALL", "en_US.utf-8", 1); 0026 } 0027 Q_CONSTRUCTOR_FUNCTION(initLocale) 0028 #endif 0029 0030 void KDateComboBoxTest::testDefaults() 0031 { 0032 KDateComboBox combo; 0033 QCOMPARE(combo.date(), QDate::currentDate()); 0034 // Missing support in QLocale; 0035 // QCOMPARE(m_combo.minimumDate(), KLocale::global()->calendar()->earliestValidDate()); 0036 // QCOMPARE(m_combo.maximumDate(), KLocale::global()->calendar()->latestValidDate()); 0037 QCOMPARE(combo.isValid(), true); 0038 QCOMPARE(combo.isNull(), false); 0039 QCOMPARE(combo.options(), KDateComboBox::EditDate | KDateComboBox::SelectDate | KDateComboBox::DatePicker | KDateComboBox::DateKeywords); 0040 QCOMPARE(combo.displayFormat(), QLocale::ShortFormat); 0041 } 0042 0043 void KDateComboBoxTest::testValidNull() 0044 { 0045 KDateComboBox combo; 0046 QCOMPARE(combo.isValid(), true); 0047 QCOMPARE(combo.isNull(), false); 0048 combo.setDate(QDate()); 0049 QCOMPARE(combo.isValid(), false); 0050 QCOMPARE(combo.isNull(), true); 0051 combo.setDate(QDate(2000, 1, 1)); 0052 combo.lineEdit()->setText(QStringLiteral("invalid")); 0053 QCOMPARE(combo.isValid(), false); 0054 QCOMPARE(combo.isNull(), false); 0055 } 0056 0057 void KDateComboBoxTest::testDateRange() 0058 { 0059 KDateComboBox combo; 0060 combo.setDate(QDate(2000, 1, 1)); 0061 // Missing support in QLocale; 0062 // QCOMPARE(m_combo.minimumDate(), KLocale::global()->calendar()->earliestValidDate()); 0063 // QCOMPARE(m_combo.maximumDate(), KLocale::global()->calendar()->latestValidDate()); 0064 QCOMPARE(combo.isValid(), true); 0065 0066 combo.setDateRange(QDate(2001, 1, 1), QDate(2002, 1, 1)); 0067 QCOMPARE(combo.minimumDate(), QDate(2001, 1, 1)); 0068 QCOMPARE(combo.maximumDate(), QDate(2002, 1, 1)); 0069 QCOMPARE(combo.isValid(), false); 0070 0071 combo.setDate(QDate(2003, 1, 1)); 0072 QCOMPARE(combo.isValid(), false); 0073 combo.setDate(QDate(2001, 6, 1)); 0074 QCOMPARE(combo.isValid(), true); 0075 combo.setDate(QDate(2001, 1, 1)); 0076 QCOMPARE(combo.isValid(), true); 0077 combo.setDate(QDate(2002, 1, 1)); 0078 QCOMPARE(combo.isValid(), true); 0079 combo.setDate(QDate(2000, 12, 31)); 0080 QCOMPARE(combo.isValid(), false); 0081 combo.setDate(QDate(2002, 1, 2)); 0082 QCOMPARE(combo.isValid(), false); 0083 0084 combo.setDateRange(QDate(1995, 1, 1), QDate(1990, 1, 1)); 0085 QCOMPARE(combo.minimumDate(), QDate(2001, 1, 1)); 0086 QCOMPARE(combo.maximumDate(), QDate(2002, 1, 1)); 0087 0088 combo.setMinimumDate(QDate(2000, 1, 1)); 0089 QCOMPARE(combo.minimumDate(), QDate(2000, 1, 1)); 0090 QCOMPARE(combo.maximumDate(), QDate(2002, 1, 1)); 0091 0092 combo.setMaximumDate(QDate(2003, 1, 1)); 0093 QCOMPARE(combo.minimumDate(), QDate(2000, 1, 1)); 0094 QCOMPARE(combo.maximumDate(), QDate(2003, 1, 1)); 0095 0096 combo.resetDateRange(); 0097 QVERIFY(!combo.minimumDate().isValid()); 0098 QVERIFY(!combo.maximumDate().isValid()); 0099 0100 // Check functioning when the minimum or maximum date is not already set 0101 0102 combo.setMinimumDate(QDate(2000, 1, 1)); 0103 QCOMPARE(combo.minimumDate(), QDate(2000, 1, 1)); 0104 QVERIFY(!combo.maximumDate().isValid()); 0105 0106 combo.resetMinimumDate(); 0107 QVERIFY(!combo.minimumDate().isValid()); 0108 QVERIFY(!combo.maximumDate().isValid()); 0109 0110 combo.setMaximumDate(QDate(2003, 1, 1)); 0111 QVERIFY(!combo.minimumDate().isValid()); 0112 QCOMPARE(combo.maximumDate(), QDate(2003, 1, 1)); 0113 0114 combo.resetMaximumDate(); 0115 QVERIFY(!combo.minimumDate().isValid()); 0116 QVERIFY(!combo.maximumDate().isValid()); 0117 } 0118 0119 void KDateComboBoxTest::testDateList() 0120 { 0121 KDateComboBox combo; 0122 QMap<QDate, QString> map; 0123 0124 // Test default map 0125 QCOMPARE(combo.dateMap(), map); 0126 0127 // Test basic map 0128 map.clear(); 0129 map.insert(QDate(2000, 1, 1), QStringLiteral("New Years Day")); 0130 map.insert(QDate(2000, 1, 2), QString()); 0131 map.insert(QDate(2000, 1, 3), QStringLiteral("separator")); 0132 map.insert(QDate(), QStringLiteral("No Date")); 0133 combo.setDateMap(map); 0134 QCOMPARE(combo.dateMap(), map); 0135 } 0136 0137 void KDateComboBoxTest::testOptions() 0138 { 0139 KDateComboBox combo; 0140 auto datePicker = combo.findChild<KDatePickerPopup *>(); 0141 QVERIFY(datePicker); 0142 KDateComboBox::Options options = KDateComboBox::EditDate | KDateComboBox::SelectDate | KDateComboBox::DatePicker | KDateComboBox::DateKeywords; 0143 QCOMPARE(combo.options(), options); 0144 QCOMPARE(datePicker->modes(), KDatePickerPopup::DatePicker | KDatePickerPopup::Words); 0145 options = KDateComboBox::EditDate | KDateComboBox::WarnOnInvalid; 0146 combo.setOptions(options); 0147 QCOMPARE(combo.options(), options); 0148 QCOMPARE(datePicker->modes(), 0); 0149 } 0150 0151 void KDateComboBoxTest::testDisplayFormat() 0152 { 0153 KDateComboBox combo; 0154 QLocale::FormatType format = QLocale::ShortFormat; 0155 QCOMPARE(combo.displayFormat(), format); 0156 format = QLocale::NarrowFormat; 0157 combo.setDisplayFormat(format); 0158 QCOMPARE(combo.displayFormat(), format); 0159 } 0160 0161 void KDateComboBoxTest::testSignals() 0162 { 0163 // GIVEN 0164 KDateComboBox combo; 0165 QSignalSpy spyDateEntered(&combo, &KDateComboBox::dateEntered); 0166 QSignalSpy spyDateEdited(&combo, &KDateComboBox::dateEdited); 0167 QSignalSpy spyDateChanged(&combo, &KDateComboBox::dateChanged); 0168 auto clearSpies = [&]() { 0169 spyDateEntered.clear(); 0170 spyDateEdited.clear(); 0171 spyDateChanged.clear(); 0172 }; 0173 0174 // WHEN setting a date programmatically 0175 combo.setDate(QDate(2016, 05, 30)); 0176 0177 // THEN 0178 QCOMPARE(spyDateEntered.count(), 0); 0179 QCOMPARE(spyDateEdited.count(), 0); 0180 QCOMPARE(spyDateChanged.count(), 1); 0181 clearSpies(); 0182 0183 combo.show(); 0184 combo.activateWindow(); 0185 QVERIFY(QTest::qWaitForWindowActive(&combo)); 0186 QCOMPARE(combo.currentText(), QStringLiteral("5/30/2016")); 0187 QCOMPARE(combo.date(), QDate(2016, 5, 30)); 0188 0189 // WHEN typing a new day (Home, Del, '4' -> 30 April 2016) 0190 QTest::keyClick(&combo, Qt::Key_Home); 0191 QTest::keyClick(&combo, Qt::Key_Delete); 0192 QTest::keyClick(&combo, Qt::Key_4); 0193 0194 // THEN 0195 QCOMPARE(combo.currentText(), QStringLiteral("4/30/2016")); 0196 QCOMPARE(combo.date(), QDate(2016, 4, 30)); 0197 0198 // and losing focus 0199 combo.clearFocus(); 0200 0201 // THEN 0202 QCOMPARE(spyDateEdited.count(), 2); 0203 QCOMPARE(spyDateEntered.count(), 0); 0204 QCOMPARE(spyDateChanged.count(), 1); 0205 clearSpies(); 0206 0207 // WHEN typing Key_Up 0208 QTest::keyClick(&combo, Qt::Key_Up); 0209 0210 // THEN 0211 QCOMPARE(combo.currentText(), QStringLiteral("5/1/2016")); 0212 QCOMPARE(combo.date(), QDate(2016, 5, 1)); 0213 QCOMPARE(spyDateEdited.count(), 0); 0214 QCOMPARE(spyDateEntered.count(), 1); 0215 QCOMPARE(spyDateChanged.count(), 1); 0216 clearSpies(); 0217 0218 // WHEN typing a digit ('6' -> 1 june 2016) then Return 0219 QTest::keyClick(&combo, Qt::Key_Home); 0220 QTest::keyClick(&combo, Qt::Key_Delete); 0221 QTest::keyClick(&combo, Qt::Key_6); 0222 QTest::keyClick(&combo, Qt::Key_Return); 0223 0224 // THEN 0225 QCOMPARE(combo.currentText(), QStringLiteral("6/1/2016")); 0226 QCOMPARE(combo.date(), QDate(2016, 6, 1)); 0227 QCOMPARE(spyDateEdited.count(), 2); 0228 QCOMPARE(spyDateEntered.count(), 1); 0229 QCOMPARE(spyDateChanged.count(), 1); 0230 clearSpies(); 0231 } 0232 0233 void KDateComboBoxTest::testDatePickerIntegration() 0234 { 0235 // GIVEN 0236 KDateComboBox combo; 0237 const QDate minimumDate{2001, 1, 1}; 0238 const QDate maximumDate{2106, 1, 1}; 0239 combo.setDateRange(minimumDate, maximumDate); 0240 const QDate originalDate{2021, 6, 23}; 0241 combo.setDate(originalDate); 0242 0243 // WHEN the date picker emits dateChanged signal with an invalid date 0244 auto datePicker = combo.findChild<KDatePickerPopup *>(); 0245 QVERIFY(datePicker); 0246 const QDate dateOutsideTheAllowedRange{1921, 6, 23}; 0247 Q_EMIT datePicker->dateChanged(dateOutsideTheAllowedRange); 0248 0249 // THEN the combo still has the original date 0250 QCOMPARE(combo.date(), originalDate); 0251 } 0252 0253 #include "moc_kdatecomboboxtest.cpp"