File indexing completed on 2024-05-12 05:17:32
0001 /* 0002 SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 0006 #include <text/timefinder.cpp> 0007 0008 #include <QTest> 0009 0010 using namespace KItinerary; 0011 0012 #define s(x) QStringLiteral(x) 0013 0014 class TimeFinderTest : public QObject 0015 { 0016 Q_OBJECT 0017 private Q_SLOTS: 0018 void testTimeFinderSingular_data() 0019 { 0020 QTest::addColumn<QString>("input"); 0021 QTest::addColumn<QTime>("time"); 0022 0023 QTest::newRow("ISO") << s("bla 23:42 blub") << QTime(23, 42); 0024 QTest::newRow("short") << s("1:23") << QTime(1, 23); 0025 QTest::newRow("min") << s("abc 0:00") << QTime(0, 0); 0026 QTest::newRow("max") << s("23:59 abc") << QTime(23, 59); 0027 QTest::newRow("French") << s("bla 16h45 blub") << QTime(16, 45); 0028 QTest::newRow("dot") << s("bla 18.30 blub") << QTime(18, 30); 0029 QTest::newRow("US") << s("1:30 pm") << QTime(13, 30); 0030 QTest::newRow("US midnight") << s("12:00 am") << QTime(0, 0); 0031 QTest::newRow("US noon") << s("12:00 p.m.") << QTime(12, 0); 0032 QTest::newRow("extra pm") << s("14:20PM") << QTime(14, 20); 0033 QTest::newRow("short pm") << s("6:40p") << QTime(18, 40); 0034 QTest::newRow("Japanese") << s("16時04分") << QTime(16, 4); 0035 QTest::newRow("dot with ap") << s("12.30 am") << QTime(0, 30); 0036 QTest::newRow("Korean pm") << s("오후 1시 30분") << QTime(13, 30); 0037 QTest::newRow("Korean 24h") << s("14시 5분") << QTime(14, 5); 0038 QTest::newRow("Chinese 24h") << s("19時45分") << QTime(19, 45); 0039 QTest::newRow("Chinese colon/pm") << s("下午7:45") << QTime(19, 45); 0040 QTest::newRow("Chinese full/pm") << s("下午7點45分") << QTime(19, 45); 0041 QTest::newRow("Greek pm") << s("10:40 μ.μ.") << QTime(22, 40); 0042 QTest::newRow("Arabic pm") << s("11:30م ") << QTime(23, 30); 0043 QTest::newRow("Hrs") << s("1145 Hrs") << QTime(11, 45); 0044 // TODO tests for RLM/LRM control chars, and Arabic times with indic numbers 0045 } 0046 0047 void testTimeFinderSingular() 0048 { 0049 QFETCH(QString, input); 0050 QFETCH(QTime, time); 0051 0052 TimeFinder finder; 0053 finder.find(input); 0054 QCOMPARE(finder.results().size(), 1); 0055 QCOMPARE(finder.results()[0].dateTime.toTime(), time); 0056 0057 QCOMPARE(finder.findSingularTime(input), time); 0058 } 0059 0060 void testTimeFinderNone_data() 0061 { 0062 QTest::addColumn<QString>("input"); 0063 0064 QTest::newRow("empty") << QString(); 0065 QTest::newRow("text") << s("some text without mentioning a time"); 0066 QTest::newRow("colon") << s("item 3: 24"); 0067 QTest::newRow("DE date") << s("am 12.10. "); 0068 QTest::newRow("ISO hour out of range") << s("24:59"); 0069 QTest::newRow("ISO min out of range") << s("23:60"); 0070 QTest::newRow("with seconds") << s("12:23:54"); 0071 QTest::newRow("in number") << s("12.234"); 0072 QTest::newRow("price") << s("1.30$"); 0073 QTest::newRow("pm no separator") << s("6:40px"); 0074 QTest::newRow("no leading separation") << s("x12:30 bla"); 0075 QTest::newRow("no trailing separation") << s("\n12:30bla"); 0076 QTest::newRow("ap without separation") << s("07:13ama"); 0077 } 0078 0079 void testTimeFinderNone() 0080 { 0081 QFETCH(QString, input); 0082 0083 TimeFinder finder; 0084 finder.find(input); 0085 QCOMPARE(finder.results().size(), 0); 0086 QCOMPARE(finder.findSingularTime(input), QTime()); 0087 } 0088 0089 void testTimeFinderPlural() 0090 { 0091 TimeFinder finder; 0092 finder.find(u"from 09:00 to 17:00"); 0093 QCOMPARE(finder.results().size(), 2); 0094 QCOMPARE(finder.results()[0].dateTime.toTime(), QTime(9, 0)); 0095 QCOMPARE(finder.results()[1].dateTime.toTime(), QTime(17, 0)); 0096 0097 QCOMPARE(finder.findSingularTime(u"from 09:00 to 17:00"), QTime()); 0098 } 0099 0100 void testTimeFinderDateTime_data() 0101 { 0102 QTest::addColumn<QString>("input"); 0103 QTest::addColumn<QDateTime>("dateTime"); 0104 0105 QTest::newRow("US") << s("26 Sep 2021 16:43") << QDateTime({2021, 9, 26}, {16, 43}); 0106 QTest::newRow("US") << s("26.09.2021 16:43") << QDateTime({2021, 9, 26}, {16, 43}); 0107 } 0108 0109 void testTimeFinderDateTime() 0110 { 0111 QFETCH(QString, input); 0112 QFETCH(QDateTime, dateTime); 0113 0114 TimeFinder finder; 0115 finder.find(input); 0116 QCOMPARE(finder.results().size(), 1); 0117 QCOMPARE(finder.results()[0].dateTime.toDateTime(), dateTime); 0118 } 0119 }; 0120 0121 QTEST_GUILESS_MAIN(TimeFinderTest) 0122 0123 #include "timefindertest.moc"