File indexing completed on 2024-05-12 05:21:34
0001 /* 0002 SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "barcode.h" 0008 #include "boardingpass.h" 0009 #include "location.h" 0010 0011 #include <QLocale> 0012 #include <QTest> 0013 #include <QTimeZone> 0014 0015 #include <cmath> 0016 0017 class PkPassTest : public QObject 0018 { 0019 Q_OBJECT 0020 private Q_SLOTS: 0021 void initTestCase() 0022 { 0023 QLocale::setDefault(QLocale(QStringLiteral("de_DE"))); 0024 } 0025 0026 void testBoardingPass() 0027 { 0028 std::unique_ptr<KPkPass::Pass> pass(KPkPass::Pass::fromFile(QStringLiteral(SOURCE_DIR "/data/boardingpass-v1.pkpass"))); 0029 QVERIFY(pass); 0030 0031 QCOMPARE(pass->type(), KPkPass::Pass::BoardingPass); 0032 QCOMPARE(pass->serialNumber(), QLatin1StringView("1234")); 0033 QCOMPARE(pass->description(), QLatin1StringView("description")); 0034 QCOMPARE(pass->organizationName(), QLatin1StringView("KDE")); 0035 0036 QCOMPARE(pass->logoText(), QLatin1StringView("Boarding Pass")); 0037 QCOMPARE(pass->backgroundColor(), QColor(61, 174, 233)); 0038 QCOMPARE(pass->relevantDate(), QDateTime(QDate(2017, 9, 17), QTime(0, 4, 0), QTimeZone::UTC)); 0039 QCOMPARE(pass->expirationDate(), QDateTime(QDate(2017, 9, 18), QTime(0, 0, 36), QTimeZone::UTC)); 0040 QCOMPARE(pass->isVoided(), false); 0041 QCOMPARE(pass->groupingIdentifier(), QLatin1StringView("")); 0042 0043 QCOMPARE(pass->fields().size(), 12); 0044 auto headers = pass->headerFields(); 0045 QCOMPARE(headers.size(), 2); 0046 auto field = headers.at(0); 0047 QCOMPARE(field.label(), QLatin1StringView("Sitzplatz")); 0048 QCOMPARE(field.value().toString(), QLatin1StringView("10E")); 0049 QCOMPARE(field.valueDisplayString(), QLatin1StringView("10E")); 0050 QCOMPARE(field.key(), QLatin1StringView("seat")); 0051 QCOMPARE(field.changeMessage(), QStringLiteral("Sitzplatznummer geƤndert in 10E")); 0052 0053 field = pass->field(QStringLiteral("boarding")); 0054 QCOMPARE(field.key(), QLatin1StringView("boarding")); 0055 QCOMPARE(field.value().toString(), QLatin1StringView("20:25")); 0056 QCOMPARE(field.textAlignment(), Qt::AlignLeft); 0057 0058 auto boardingPass = dynamic_cast<KPkPass::BoardingPass *>(pass.get()); 0059 QVERIFY(boardingPass); 0060 QCOMPARE(boardingPass->transitType(), KPkPass::BoardingPass::Air); 0061 0062 auto barcodes = pass->barcodes(); 0063 QCOMPARE(barcodes.size(), 1); 0064 auto bc = barcodes.at(0); 0065 QCOMPARE(bc.format(), KPkPass::Barcode::QR); 0066 QVERIFY(!bc.message().isEmpty()); 0067 QVERIFY(bc.alternativeText().isEmpty()); 0068 QCOMPARE(bc.messageEncoding(), QLatin1StringView("iso-8859-1")); 0069 0070 const auto locs = pass->locations(); 0071 QCOMPARE(locs.size(), 1); 0072 const auto loc = locs.at(0); 0073 QVERIFY(std::isnan(loc.altitude())); 0074 QCOMPARE((int)loc.latitude(), 47); 0075 QCOMPARE((int)loc.longitude(), 8); 0076 QCOMPARE(loc.relevantText(), QLatin1StringView("LX962 Boarding 20:25")); 0077 QCOMPARE(pass->maximumDistance(), 500); 0078 0079 QCOMPARE(pass->hasIcon(), false); 0080 QCOMPARE(pass->hasLogo(), true); 0081 auto img = pass->logo(3); 0082 QVERIFY(!img.isNull()); 0083 img = pass->logo(3); 0084 QVERIFY(!img.isNull()); 0085 img = pass->logo(1); 0086 QVERIFY(!img.isNull()); 0087 0088 img = pass->image(QStringLiteral("I don't exist")); 0089 QVERIFY(img.isNull()); 0090 0091 auto sourceFile = QFile(QStringLiteral(SOURCE_DIR "/data/boardingpass-v1.pkpass")); 0092 QVERIFY(sourceFile.open(QFile::ReadOnly)); 0093 QCOMPARE(pass->rawData(), sourceFile.readAll()); 0094 } 0095 }; 0096 0097 QTEST_GUILESS_MAIN(PkPassTest) 0098 0099 #include "pkpasstest.moc"