File indexing completed on 2024-05-12 05:17:31
0001 /* 0002 SPDX-FileCopyrightText: 2022 Volker Krause <vkrause@kde.org> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 0006 #include <text/nameoptimizer.cpp> 0007 #include <stringutil.cpp> 0008 0009 #include <KItinerary/Person> 0010 0011 #include <QTest> 0012 0013 using namespace KItinerary; 0014 0015 #define s(x) QStringLiteral(x) 0016 0017 class NameOptimizerTest : public QObject 0018 { 0019 Q_OBJECT 0020 private Q_SLOTS: 0021 void testOptimizeFirstGiven_data() 0022 { 0023 QTest::addColumn<QString>("input"); 0024 QTest::addColumn<QString>("expectedGivenName"); 0025 QTest::addColumn<QString>("expectedFamilyName"); 0026 0027 QTest::newRow("empty") << QString() << s("KONQI THE") << s("DRAGON"); 0028 QTest::newRow("mixed-case") << s("Konqi The Dragon") << s("Konqi The") << s("Dragon"); 0029 QTest::newRow("mixed-case, inverted") << s("Dragon, Konqi The") << s("Konqi The") << s("Dragon"); 0030 QTest::newRow("partial given name") << s("Konqi Dragon") << s("KONQI THE") << s("Dragon"); 0031 QTest::newRow("mixed-case in context") << s("Prenom: Konqi The\nNom: Dragon\nmore text") << s("Konqi The") << s("Dragon"); 0032 QTest::newRow("use in text") << s("Konquering the world with dragonfire with a firedragon") << s("KONQI THE") << s("DRAGON"); 0033 QTest::newRow("diacritics") << s("Konqĩ The Drägon") << s("Konqĩ The") << s("Drägon"); 0034 } 0035 0036 void testOptimizeFirstGiven() 0037 { 0038 QFETCH(QString, input); 0039 QFETCH(QString, expectedGivenName); 0040 QFETCH(QString, expectedFamilyName); 0041 0042 Person p; 0043 p.setGivenName(s("KONQI THE")); 0044 p.setFamilyName(s("DRAGON")); 0045 0046 p = NameOptimizer::optimizeName(input, p); 0047 QCOMPARE(p.givenName(), expectedGivenName); 0048 QCOMPARE(p.familyName(), expectedFamilyName); 0049 } 0050 0051 void testOptimizeFullName_data() 0052 { 0053 QTest::addColumn<QString>("input"); 0054 QTest::addColumn<QString>("expectedName"); 0055 0056 QTest::newRow("empty") << QString() << s("KONQI THE DRAGON"); 0057 QTest::newRow("lower-case") << s("konqi the dragon") << s("KONQI THE DRAGON"); 0058 QTest::newRow("mixed-case") << s("Konqi The Dragon") << s("Konqi The Dragon"); 0059 QTest::newRow("mixed-case, inverted") << s("Dragon, Konqi The") << s("KONQI THE DRAGON"); 0060 QTest::newRow("partial given name") << s("Konqi Dragon") << s("KONQI THE DRAGON"); 0061 QTest::newRow("mixed-case in context") << s("Prenom: Konqi The\nNom: Dragon\nmore text") << s("KONQI THE DRAGON"); 0062 QTest::newRow("use in text") << s("Konquering the world with dragonfire") << s("KONQI THE DRAGON"); 0063 QTest::newRow("diacritics") << s("Könqi The Drägon") << s("Könqi The Drägon"); 0064 QTest::newRow("french-style") << s("Konqi The DRAGON") << s("Konqi The DRAGON"); 0065 } 0066 0067 void testOptimizeFullName() 0068 { 0069 QFETCH(QString, input); 0070 QFETCH(QString, expectedName); 0071 0072 Person p; 0073 p.setName(s("KONQI THE DRAGON")); 0074 0075 p = NameOptimizer::optimizeName(input, p); 0076 QCOMPARE(p.name(), expectedName); 0077 } 0078 0079 void testPrefixCleaning_data() 0080 { 0081 QTest::addColumn<QString>("input"); 0082 QTest::addColumn<QString>("text"); 0083 QTest::addColumn<QString>("expected"); 0084 0085 QTest::newRow("suffix-space-end") << s("KONQI THE DR") << s("Dragon/Konqi The") << s("Konqi The"); 0086 QTest::newRow("suffix-no-space-end") << s("KONQI THEDR") << s("Dragon/Konqi The") << s("Konqi The"); 0087 QTest::newRow("suffix-space") << s("KONQI THE MR") << s("Mr Konqi The Dragon") << s("Konqi The"); 0088 QTest::newRow("suffix-no-space") << s("KONQI THEMR") << s("Mr Konqi The Dragon") << s("Konqi The"); 0089 } 0090 void testPrefixCleaning() 0091 { 0092 QFETCH(QString, input); 0093 QFETCH(QString, text); 0094 QFETCH(QString, expected); 0095 0096 Person p; 0097 p.setGivenName(input); 0098 p.setFamilyName(s("DRAGON")); 0099 0100 p = NameOptimizer::optimizeName(text, p); 0101 QCOMPARE(p.givenName(), expected); 0102 QCOMPARE(p.familyName(), QLatin1StringView("Dragon")); 0103 } 0104 0105 void testGivenNameCompletion_data() 0106 { 0107 QTest::addColumn<QString>("input"); 0108 QTest::addColumn<QString>("text"); 0109 QTest::addColumn<QString>("expected"); 0110 0111 QTest::newRow("truncated-no-context") << s("SUPERLONGFIRS") << s("Superlongfirstname Dragon") << s("Superlongfirstname"); 0112 QTest::newRow("truncated-context") << s("SUPERLONGFIRS") << s("Passenger name: Superlongfirstname Dragon\nmore text") << s("Superlongfirstname"); 0113 QTest::newRow("slash-no-context") << s("SUPERLONGFIRS") << s("Dragon/Superlongfirstname") << s("Superlongfirstname"); 0114 QTest::newRow("slash-context") << s("SUPERLONGFIRS") << s("Passenger name: Mr Dragon / Superlongfirstname\nmore text") << s("Superlongfirstname"); 0115 QTest::newRow("comma-no-context") << s("SUPERLONGFIRS") << s("Dragon, Superlongfirstname") << s("Superlongfirstname"); 0116 QTest::newRow("comma-context") << s("SUPERLONGFIRS") << s("Passenger name: Mr Dragon, Superlongfirstname\nmore text") << s("Superlongfirstname"); 0117 QTest::newRow("uppper-no-context") << s("SUPERLONGFIRS") << s("SUPERLONGFIRSTNAME DRAGON") << s("SUPERLONGFIRSTNAME"); 0118 QTest::newRow("truncated-context") << s("SUPERLONGFIRS") << s("Passenger name: SUPERLONGFIRSTNAME DRAGON\nmore text") << s("SUPERLONGFIRSTNAME"); 0119 } 0120 0121 void testGivenNameCompletion() 0122 { 0123 QFETCH(QString, input); 0124 QFETCH(QString, text); 0125 QFETCH(QString, expected); 0126 0127 Person p; 0128 p.setFamilyName(s("DRAGON")); 0129 p.setGivenName(input); 0130 p = NameOptimizer::optimizeName(text, p); 0131 0132 QCOMPARE(p.givenName(), expected); 0133 } 0134 0135 void testSpaceExpansion() 0136 { 0137 Person p; 0138 p.setFamilyName(s("THEDRAGON")); 0139 p.setGivenName(s("KONQI")); 0140 p = NameOptimizer::optimizeName(s("KONQI THE DRAGON"), p); 0141 QCOMPARE(p.familyName(), s("THE DRAGON")); 0142 0143 p.setFamilyName(s("THEDRAGON")); 0144 p.setGivenName(s("KONQIDR")); 0145 p = NameOptimizer::optimizeName(s("KONQI DR THE DRAGON"), p); 0146 QCOMPARE(p.familyName(), s("THE DRAGON")); 0147 QCOMPARE(p.givenName(), s("KONQI")); 0148 } 0149 }; 0150 0151 QTEST_GUILESS_MAIN(NameOptimizerTest) 0152 0153 #include "nameoptimizertest.moc"