File indexing completed on 2024-05-05 04:00:57

0001 /*
0002     SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
0003     SPDX-License-Identifier: MIT
0004 */
0005 
0006 #include <QtTest/QTest>
0007 
0008 #include "mecard.h"
0009 
0010 using namespace Prison;
0011 
0012 class MeCardTest : public QObject
0013 {
0014     Q_OBJECT
0015 
0016 private Q_SLOTS:
0017     void testWifiParse()
0018     {
0019         QVariantMap map;
0020 
0021         {
0022             auto m = MeCard::parse(QStringLiteral("WIFI:S:myssid;T:WPA;P:xxx123;;"));
0023             QVERIFY(m.has_value());
0024             QCOMPARE(m->header(), QLatin1String("WIFI"));
0025             QCOMPARE(m->headerView(), QLatin1String("WIFI"));
0026             QCOMPARE(m->value(u"S"), QLatin1String("myssid"));
0027             QCOMPARE(m->value(u"T"), QLatin1String("WPA"));
0028             QCOMPARE(m->value(u"P"), QLatin1String("xxx123"));
0029             map = QVariantMap(
0030                 {{QLatin1String("S"), QLatin1String("myssid")}, {QLatin1String("T"), QLatin1String("WPA")}, {QLatin1String("P"), QLatin1String("xxx123")}});
0031             QCOMPARE(m->toVariantMap(), map);
0032         }
0033 
0034         {
0035             auto m = MeCard::parse(QStringLiteral("MECARD:N:Doe,John;TEL:13035551212;EMAIL:john.doe@example.com;;"));
0036             QVERIFY(m.has_value());
0037             QCOMPARE(m->header(), QLatin1String("MECARD"));
0038             QCOMPARE(m->headerView(), QLatin1String("MECARD"));
0039             QCOMPARE(m->value(u"N"), QLatin1String("Doe,John"));
0040             QCOMPARE(m->value(u"TEL"), QLatin1String("13035551212"));
0041             QCOMPARE(m->value(u"EMAIL"), QLatin1String("john.doe@example.com"));
0042             map = QVariantMap({{QLatin1String("N"), QLatin1String("Doe,John")},
0043                                {QLatin1String("TEL"), QLatin1String("13035551212")},
0044                                {QLatin1String("EMAIL"), QLatin1String("john.doe@example.com")}});
0045             QCOMPARE(m->toVariantMap(), map);
0046         }
0047 
0048         {
0049             auto m = MeCard::parse(QStringLiteral("MECARD:N:Doe,John;TEL:13035551212;EMAIL:john.doe@example.com;EMAIL:null@kde.org;;"));
0050             QVERIFY(m.has_value());
0051             QCOMPARE(m->header(), QLatin1String("MECARD"));
0052             QCOMPARE(m->headerView(), QLatin1String("MECARD"));
0053             QCOMPARE(m->value(u"N"), QLatin1String("Doe,John"));
0054             QCOMPARE(m->value(u"TEL"), QLatin1String("13035551212"));
0055             QCOMPARE(m->value(u"EMAIL"), QString());
0056             QCOMPARE(m->values(u"EMAIL"), QStringList({QLatin1String("john.doe@example.com"), QLatin1String("null@kde.org")}));
0057             map = QVariantMap({{QLatin1String("N"), QLatin1String("Doe,John")},
0058                                {QLatin1String("TEL"), QLatin1String("13035551212")},
0059                                {QLatin1String("EMAIL"), QString()},
0060                                {QLatin1String("EMAIL"), QStringList({QLatin1String("john.doe@example.com"), QLatin1String("null@kde.org")})}});
0061             QCOMPARE(m->toVariantMap(), map);
0062         }
0063 
0064         {
0065             auto m = MeCard::parse(QStringLiteral("WIFI:S:\\\"foo\\;bar\\\\baz\\\";P:\"ABCD\";;"));
0066             QVERIFY(m.has_value());
0067             QCOMPARE(m->value(u"P"), QLatin1String("ABCD"));
0068             QCOMPARE(m->value(u"S"), QLatin1String("\"foo;bar\\baz\""));
0069             map = QVariantMap({{QLatin1String("P"), QLatin1String("ABCD")}, {QLatin1String("S"), QLatin1String("\"foo;bar\\baz\"")}});
0070             QCOMPARE(m->toVariantMap(), map);
0071         }
0072     }
0073 
0074     void testInvalid_data()
0075     {
0076         QTest::addColumn<QString>("input");
0077         QTest::newRow("empty") << QString();
0078         QTest::newRow("no colon") << QStringLiteral("wifi");
0079         QTest::newRow("no content 1") << QStringLiteral("wifi:");
0080         QTest::newRow("no content 2") << QStringLiteral("wifi:;");
0081         QTest::newRow("no content 3") << QStringLiteral("wifi:;;");
0082         QTest::newRow("invalid element") << QStringLiteral("wifi:S:");
0083     }
0084     void testInvalid()
0085     {
0086         QFETCH(QString, input);
0087         auto m = MeCard::parse(input);
0088         QVERIFY(!m.has_value());
0089     }
0090 };
0091 
0092 QTEST_APPLESS_MAIN(MeCardTest)
0093 
0094 #include "mecardtest.moc"