Warning, file /frameworks/kcontacts/autotests/testroundtrip.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 This file is part of the KContacts framework. 0003 SPDX-FileCopyrightText: 2012 Kevin Krammer <krammer@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "addressee.h" 0009 0010 #include "converter/vcardconverter.h" 0011 0012 #include <QDebug> 0013 #include <QDir> 0014 #include <QObject> 0015 #include <QTest> 0016 0017 using namespace KContacts; 0018 0019 class RoundtripTest : public QObject 0020 { 0021 Q_OBJECT 0022 0023 private: 0024 QDir mInputDir; 0025 QDir mOutput2_1Dir; 0026 QDir mOutput3_0Dir; 0027 QDir mOutput4_0Dir; 0028 0029 QStringList mInputFiles; 0030 0031 private Q_SLOTS: 0032 void initTestCase(); 0033 void testVCardRoundtrip_data(); 0034 void testVCardRoundtrip(); 0035 }; 0036 0037 // check the validity of our test data set 0038 void RoundtripTest::initTestCase() 0039 { 0040 // check that all resource prefixes exist 0041 0042 mInputDir = QDir(QStringLiteral(":/input")); 0043 QVERIFY(mInputDir.exists()); 0044 QVERIFY(mInputDir.cd(QStringLiteral("data"))); 0045 0046 mOutput2_1Dir = QDir(QStringLiteral(":/output2.1")); 0047 QVERIFY(mOutput2_1Dir.exists()); 0048 QVERIFY(mOutput2_1Dir.cd(QStringLiteral("data"))); 0049 0050 mOutput3_0Dir = QDir(QStringLiteral(":/output3.0")); 0051 QVERIFY(mOutput3_0Dir.exists()); 0052 QVERIFY(mOutput3_0Dir.cd(QStringLiteral("data"))); 0053 0054 mOutput4_0Dir = QDir(QStringLiteral(":/output4.0")); 0055 QVERIFY(mOutput4_0Dir.exists()); 0056 QVERIFY(mOutput4_0Dir.cd(QStringLiteral("data"))); 0057 0058 // check that there are input files 0059 0060 mInputFiles = mInputDir.entryList(); 0061 0062 QVERIFY(!mInputFiles.isEmpty()); 0063 } 0064 0065 void RoundtripTest::testVCardRoundtrip_data() 0066 { 0067 QTest::addColumn<QString>("inputFile"); 0068 QTest::addColumn<QString>("output2_1File"); 0069 QTest::addColumn<QString>("output3_0File"); 0070 QTest::addColumn<QString>("output4_0File"); 0071 0072 QString outFile21Pattern = QLatin1String("%1.2_1ref"); 0073 QString outFile4Pattern = QLatin1String("v4_0.%1.ref"); 0074 QString outFilePattern = QLatin1String("%1.ref"); 0075 for (const QString &inputFile : std::as_const(mInputFiles)) { 0076 const QString outFile = outFilePattern.arg(inputFile); 0077 const QString outFileV2_1 = outFile21Pattern.arg(inputFile); 0078 const QString outFileV4 = outFile4Pattern.arg(inputFile); 0079 QTest::newRow(QFile::encodeName(inputFile).constData()) 0080 << inputFile << (mOutput2_1Dir.exists(outFileV2_1) ? outFileV2_1 : QString()) << (mOutput3_0Dir.exists(outFile) ? outFile : QString()) 0081 << (mOutput4_0Dir.exists(outFileV4) ? outFileV4 : QString()); 0082 } 0083 } 0084 0085 static void compareBuffers(const char *version, const QByteArray &outputData, const QByteArray &outputRefData) 0086 { 0087 if (outputData != outputRefData) { 0088 qDebug() << " outputData " << outputData; 0089 qDebug() << " outputRefData " << outputRefData; 0090 } 0091 const QList<QByteArray> outputLines = outputData.split('\n'); 0092 const QList<QByteArray> outputRefLines = outputRefData.split('\n'); 0093 for (int i = 0; i < qMin(outputLines.count(), outputRefLines.count()); ++i) { 0094 const QByteArray &actual = outputLines.at(i); 0095 const QByteArray &expect = outputRefLines.at(i); 0096 if (actual != expect) { 0097 qCritical() << "Mismatch in" << version << "output line" << (i + 1); 0098 QCOMPARE(actual, expect); 0099 QCOMPARE(actual.count(), expect.count()); 0100 } 0101 } 0102 QCOMPARE(outputLines.count(), outputRefLines.count()); 0103 QCOMPARE(outputData.size(), outputRefData.size()); 0104 } 0105 0106 void RoundtripTest::testVCardRoundtrip() 0107 { 0108 QFETCH(QString, inputFile); 0109 QFETCH(QString, output2_1File); 0110 QFETCH(QString, output3_0File); 0111 QFETCH(QString, output4_0File); 0112 0113 QVERIFY2(!output2_1File.isEmpty() || !output3_0File.isEmpty() || !output4_0File.isEmpty(), "No reference output file for either format version"); 0114 0115 QFile input(QFileInfo(mInputDir, inputFile).absoluteFilePath()); 0116 QVERIFY(input.open(QIODevice::ReadOnly)); 0117 0118 const QByteArray inputData = input.readAll(); 0119 QVERIFY(!inputData.isEmpty()); 0120 0121 VCardConverter converter; 0122 const Addressee::List list = converter.parseVCards(inputData); 0123 QVERIFY(!list.isEmpty()); 0124 0125 if (!output2_1File.isEmpty()) { 0126 const QByteArray outputData = converter.createVCards(list, VCardConverter::v2_1); 0127 0128 QFile outputFile(QFileInfo(mOutput2_1Dir, output2_1File).absoluteFilePath()); 0129 QVERIFY(outputFile.open(QIODevice::ReadOnly)); 0130 0131 const QByteArray outputRefData = outputFile.readAll(); 0132 compareBuffers("v2.1", outputData, outputRefData); 0133 } 0134 0135 if (!output3_0File.isEmpty()) { 0136 const QByteArray outputData = converter.createVCards(list, VCardConverter::v3_0); 0137 0138 QFile outputFile(QFileInfo(mOutput3_0Dir, output3_0File).absoluteFilePath()); 0139 QVERIFY(outputFile.open(QIODevice::ReadOnly)); 0140 0141 const QByteArray outputRefData = outputFile.readAll(); 0142 compareBuffers("v3.0", outputData, outputRefData); 0143 } 0144 #if 0 0145 if (!output4_0File.isEmpty()) { 0146 const QByteArray outputData = converter.createVCards(list, VCardConverter::v4_0); 0147 0148 QFile outputFile(QFileInfo(mOutput4_0Dir, output4_0File).absoluteFilePath()); 0149 QVERIFY(outputFile.open(QIODevice::ReadOnly)); 0150 0151 const QByteArray outputRefData = outputFile.readAll(); 0152 compareBuffers("v4.0", outputData, outputRefData); 0153 } 0154 #endif 0155 } 0156 0157 QTEST_MAIN(RoundtripTest) 0158 0159 #include "testroundtrip.moc"