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"