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"