21 #include "addressee.h"
22 #include "vcardconverter.h"
24 #include <qtest_kde.h>
30 class RoundtripTest :
public QObject
35 QString mOutFilePattern;
41 QStringList mInputFiles;
45 void testVCardRoundtrip_data();
46 void testVCardRoundtrip();
50 void RoundtripTest::initTestCase()
52 mOutFilePattern = QLatin1String(
"%1.ref" );
56 mInputDir = QDir( QLatin1String(
":/input" ) );
57 QVERIFY( mInputDir.exists() );
58 QVERIFY( mInputDir.cd( QLatin1String(
"tests" ) ) );
60 mOutput2_1Dir = QDir( QLatin1String(
":/output2.1" ) );
61 QVERIFY( mOutput2_1Dir.exists() );
62 QVERIFY( mOutput2_1Dir.cd( QLatin1String(
"tests" ) ) );
64 mOutput3_0Dir = QDir( QLatin1String(
":/output3.0" ) );
65 QVERIFY( mOutput3_0Dir.exists() );
66 QVERIFY( mOutput3_0Dir.cd( QLatin1String(
"tests" ) ) );
70 mInputFiles = mInputDir.entryList();
71 QVERIFY( !mInputFiles.isEmpty() );
74 void RoundtripTest::testVCardRoundtrip_data()
76 QTest::addColumn<QString>(
"inputFile" );
77 QTest::addColumn<QString>(
"output2_1File" );
78 QTest::addColumn<QString>(
"output3_0File" );
80 Q_FOREACH (
const QString &inputFile, mInputFiles ) {
81 const QString outFile = mOutFilePattern.arg( inputFile );
83 QTest::newRow( QFile::encodeName( inputFile ) )
85 << ( mOutput2_1Dir.exists( outFile ) ? outFile : QString() )
86 << ( mOutput3_0Dir.exists( outFile ) ? outFile : QString() );
90 void RoundtripTest::testVCardRoundtrip()
92 QFETCH( QString, inputFile );
93 QFETCH( QString, output2_1File );
94 QFETCH( QString, output3_0File );
96 QVERIFY2( !output2_1File.isEmpty() || !output3_0File.isEmpty(),
97 "No reference output file for either format version" );
99 QFile input( QFileInfo( mInputDir, inputFile ).absoluteFilePath() );
100 QVERIFY( input.open( QIODevice::ReadOnly ) );
102 const QByteArray inputData = input.readAll();
103 QVERIFY( !inputData.isEmpty() );
107 QVERIFY( !list.isEmpty() );
109 if ( !output2_1File.isEmpty() ) {
110 const QByteArray outputData = converter.createVCards( list, VCardConverter::v2_1 );
112 QFile outputFile( QFileInfo( mOutput2_1Dir, output2_1File ).absoluteFilePath() );
113 QVERIFY( outputFile.open( QIODevice::ReadOnly ) );
115 const QByteArray outputRefData = outputFile.readAll();
116 QCOMPARE( outputData.size(), outputRefData.size() );
118 const QList<QByteArray> outputLines = outputData.split(
'\n' );
119 const QList<QByteArray> outputRefLines = outputRefData.split(
'\n' );
120 QCOMPARE( outputLines.count(), outputRefLines.count() );
122 for (
int i = 0; i < outputLines.count(); ++i ) {
123 const QByteArray actual = outputLines[ i ];
124 const QByteArray expect = outputRefLines[ i ];
126 if ( actual != expect ) {
127 qCritical() <<
"Mismatch in v2.1 output line" << ( i + 1 );
128 QCOMPARE( actual.count(), expect.count() );
130 qCritical() <<
"\nActual:" << actual <<
"\nExpect:" << expect;
131 QCOMPARE( actual, expect );
136 if ( !output3_0File.isEmpty() ) {
137 const QByteArray outputData = converter.createVCards( list, VCardConverter::v3_0 );
139 QFile outputFile( QFileInfo( mOutput3_0Dir, output3_0File ).absoluteFilePath() );
140 QVERIFY( outputFile.open( QIODevice::ReadOnly ) );
142 const QByteArray outputRefData = outputFile.readAll();
145 const QList<QByteArray> outputLines = outputData.split(
'\n' );
146 const QList<QByteArray> outputRefLines = outputRefData.split(
'\n' );
147 QCOMPARE( outputLines.count(), outputRefLines.count() );
149 for (
int i = 0; i < outputLines.count(); ++i ) {
150 const QByteArray actual = outputLines[ i ];
151 const QByteArray expect = outputRefLines[ i ];
153 if ( actual != expect ) {
154 qCritical() <<
"Mismatch in v3.0 output line" << ( i + 1 );
156 qCritical() <<
"\nActual:" << actual <<
"\nExpect:" << expect;
157 QCOMPARE( actual.count(), expect.count() );
158 QCOMPARE( actual, expect );
164 QTEST_KDEMAIN( RoundtripTest, NoGUI )
166 #include "testroundtrip.moc"
a QValueList of Addressee, with sorting functionality
Class to converting contact objects into vCard format and vice versa.