File indexing completed on 2024-04-28 15:31:52
0001 /* 0002 SPDX-FileCopyrightText: 2022 g10 Code GmbH 0003 SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include <KDatePicker> 0009 0010 #include <QLineEdit> 0011 #include <QSignalSpy> 0012 #include <QTest> 0013 0014 #ifndef Q_OS_WIN 0015 void initLocale() 0016 { 0017 setenv("LC_ALL", "en_US.utf-8", 1); 0018 } 0019 Q_CONSTRUCTOR_FUNCTION(initLocale) 0020 #endif 0021 0022 class KDatePickerTest : public QObject 0023 { 0024 Q_OBJECT 0025 0026 private Q_SLOTS: 0027 void testSubmittingDateInLineEditEmitsOriginalDate() 0028 { 0029 const QDate originalDate{2022, 5, 15}; 0030 KDatePicker p{originalDate}; 0031 QSignalSpy spyDateEntered(&p, &KDatePicker::dateEntered); 0032 auto lineEdit = p.findChild<QLineEdit *>(); 0033 QVERIFY(lineEdit); 0034 0035 QTest::keyClick(lineEdit, Qt::Key_Return); 0036 QCOMPARE(spyDateEntered.count(), 1); 0037 QCOMPARE(spyDateEntered.first().at(0).toDate(), originalDate); 0038 } 0039 0040 void testLineEditShowsDateWith4DigitYear() 0041 { 0042 KDatePicker p; 0043 auto lineEdit = p.findChild<QLineEdit *>(); 0044 QVERIFY(lineEdit); 0045 0046 p.setDate(QDate{2022, 5, 15}); 0047 QCOMPARE(lineEdit->text(), QStringLiteral("5/15/2022")); 0048 } 0049 0050 void testPickerAcceptsDatesEnteredInMultipleFormats() 0051 { 0052 KDatePicker p; 0053 QSignalSpy spyDateEntered(&p, &KDatePicker::dateEntered); 0054 auto lineEdit = p.findChild<QLineEdit *>(); 0055 QVERIFY(lineEdit); 0056 0057 #ifndef Q_OS_WIN 0058 { 0059 // short date format 0060 lineEdit->setText(QStringLiteral("5/15/22")); 0061 QTest::keyClick(lineEdit, Qt::Key_Return); 0062 QCOMPARE(spyDateEntered.count(), 1); 0063 const auto emittedDate = spyDateEntered.first().at(0).toDate(); 0064 const QDate expectedDate{2022, 5, 15}; 0065 QCOMPARE(emittedDate.day(), expectedDate.day()); 0066 QCOMPARE(emittedDate.month(), expectedDate.month()); 0067 // we don't expect Qt to guess the correct century of a two digit year 0068 QCOMPARE(emittedDate.year() % 100, expectedDate.year() % 100); 0069 spyDateEntered.clear(); 0070 } 0071 #endif 0072 { 0073 // long date format 0074 lineEdit->setText(QStringLiteral("Sunday, May 15, 2022")); 0075 QTest::keyClick(lineEdit, Qt::Key_Return); 0076 QCOMPARE(spyDateEntered.count(), 1); 0077 const auto emittedDate = spyDateEntered.first().at(0).toDate(); 0078 const QDate expectedDate{2022, 5, 15}; 0079 QCOMPARE(emittedDate, expectedDate); 0080 spyDateEntered.clear(); 0081 } 0082 { 0083 // short date format with 4-digit year 0084 lineEdit->setText(QStringLiteral("5/15/2022")); 0085 QTest::keyClick(lineEdit, Qt::Key_Return); 0086 QCOMPARE(spyDateEntered.count(), 1); 0087 const auto emittedDate = spyDateEntered.first().at(0).toDate(); 0088 const QDate expectedDate{2022, 5, 15}; 0089 QCOMPARE(emittedDate, expectedDate); 0090 spyDateEntered.clear(); 0091 } 0092 { 0093 // ISO date format 0094 lineEdit->setText(QStringLiteral("2022-05-15")); 0095 QTest::keyClick(lineEdit, Qt::Key_Return); 0096 QCOMPARE(spyDateEntered.count(), 1); 0097 const auto emittedDate = spyDateEntered.first().at(0).toDate(); 0098 const QDate expectedDate{2022, 5, 15}; 0099 QCOMPARE(emittedDate, expectedDate); 0100 spyDateEntered.clear(); 0101 } 0102 } 0103 }; 0104 0105 QTEST_MAIN(KDatePickerTest) 0106 0107 #include "kdatepickerautotest.moc"