void RoundtripTest::testVCardRoundtrip() { QFETCH( QString, inputFile ); QFETCH( QString, output2_1File ); QFETCH( QString, output3_0File ); QVERIFY2( !output2_1File.isEmpty() || !output3_0File.isEmpty(), "No reference output file for either format version" ); QFile input( QFileInfo( mInputDir, inputFile ).absoluteFilePath() ); QVERIFY( input.open( QIODevice::ReadOnly ) ); const QByteArray inputData = input.readAll(); QVERIFY( !inputData.isEmpty() ); VCardConverter converter; const Addressee::List list = converter.parseVCards( inputData ); QVERIFY( !list.isEmpty() ); if ( !output2_1File.isEmpty() ) { const QByteArray outputData = converter.createVCards( list, VCardConverter::v2_1 ); QFile outputFile( QFileInfo( mOutput2_1Dir, output2_1File ).absoluteFilePath() ); QVERIFY( outputFile.open( QIODevice::ReadOnly ) ); const QByteArray outputRefData = outputFile.readAll(); QCOMPARE( outputData.size(), outputRefData.size() ); const QList<QByteArray> outputLines = outputData.split( '\n' ); const QList<QByteArray> outputRefLines = outputRefData.split( '\n' ); QCOMPARE( outputLines.count(), outputRefLines.count() ); for ( int i = 0; i < outputLines.count(); ++i ) { const QByteArray actual = outputLines[ i ]; const QByteArray expect = outputRefLines[ i ]; if ( actual != expect ) { qCritical() << "Mismatch in v2.1 output line" << ( i + 1 ); QCOMPARE( actual.count(), expect.count() ); qCritical() << "\nActual:" << actual << "\nExpect:" << expect; QCOMPARE( actual, expect ); } } } if ( !output3_0File.isEmpty() ) { const QByteArray outputData = converter.createVCards( list, VCardConverter::v3_0 ); QFile outputFile( QFileInfo( mOutput3_0Dir, output3_0File ).absoluteFilePath() ); QVERIFY( outputFile.open( QIODevice::ReadOnly ) ); const QByteArray outputRefData = outputFile.readAll(); // QCOMPARE( outputData.size(), outputRefData.size() ); const QList<QByteArray> outputLines = outputData.split( '\n' ); const QList<QByteArray> outputRefLines = outputRefData.split( '\n' ); QCOMPARE( outputLines.count(), outputRefLines.count() ); for ( int i = 0; i < outputLines.count(); ++i ) { const QByteArray actual = outputLines[ i ]; const QByteArray expect = outputRefLines[ i ]; if ( actual != expect ) { qCritical() << "Mismatch in v3.0 output line" << ( i + 1 ); QCOMPARE( actual.count(), expect.count() ); qCritical() << "\nActual:" << actual << "\nExpect:" << expect; QCOMPARE( actual, expect ); } } } }