• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepimlibs API Reference
  • KDE Home
  • Contact Us
 

kabc

  • sources
  • kde-4.14
  • kdepimlibs
  • kabc
  • vcardparser
testroundtrip.cpp
1 /*
2  This file is part of libkabc.
3  Copyright (c) 2012 Kevin Krammer <krammer@kde.org>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License as published by the Free Software Foundation; either
8  version 2 of the License, or (at your option) any later version.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Library General Public License for more details.
14 
15  You should have received a copy of the GNU Library General Public License
16  along with this library; see the file COPYING.LIB. If not, write to
17  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  Boston, MA 02110-1301, USA.
19 */
20 
21 #include "addressee.h"
22 #include "vcardconverter.h"
23 
24 #include <qtest_kde.h>
25 
26 #include <QObject>
27 
28 using namespace KABC;
29 
30 class RoundtripTest : public QObject
31 {
32  Q_OBJECT
33 
34  private:
35  QString mOutFilePattern;
36 
37  QDir mInputDir;
38  QDir mOutput2_1Dir;
39  QDir mOutput3_0Dir;
40  QDir mOutput4_0Dir;
41 
42  QStringList mInputFiles;
43 
44  private Q_SLOTS:
45  void initTestCase();
46  void testVCardRoundtrip_data();
47  void testVCardRoundtrip();
48 };
49 
50 // check the validity of our test data set
51 void RoundtripTest::initTestCase()
52 {
53  mOutFilePattern = QLatin1String( "%1.ref" );
54 
55  // check that all resource prefixes exist
56 
57  mInputDir = QDir( QLatin1String( ":/input" ) );
58  QVERIFY( mInputDir.exists() );
59  QVERIFY( mInputDir.cd( QLatin1String( "tests" ) ) );
60 
61  mOutput2_1Dir = QDir( QLatin1String( ":/output2.1" ) );
62  QVERIFY( mOutput2_1Dir.exists() );
63  QVERIFY( mOutput2_1Dir.cd( QLatin1String( "tests" ) ) );
64 
65  mOutput3_0Dir = QDir( QLatin1String( ":/output3.0" ) );
66  QVERIFY( mOutput3_0Dir.exists() );
67  QVERIFY( mOutput3_0Dir.cd( QLatin1String( "tests" ) ) );
68 
69  mOutput4_0Dir = QDir( QLatin1String( ":/output4.0" ) );
70  QVERIFY( mOutput4_0Dir.exists() );
71  QVERIFY( mOutput4_0Dir.cd( QLatin1String( "tests" ) ) );
72 
73  // check that there are input files
74 
75  mInputFiles = mInputDir.entryList();
76  QVERIFY( !mInputFiles.isEmpty() );
77 }
78 
79 void RoundtripTest::testVCardRoundtrip_data()
80 {
81  QTest::addColumn<QString>( "inputFile" );
82  QTest::addColumn<QString>( "output2_1File" );
83  QTest::addColumn<QString>( "output3_0File" );
84  QTest::addColumn<QString>( "output4_0File" );
85  QString outFile21Pattern = QLatin1String("%1.2_1ref");
86  QString outFile4Pattern = QLatin1String("v4_0.%1.ref");
87  QString outFilePattern = QLatin1String("%1.ref");
88  Q_FOREACH (const QString &inputFile, mInputFiles) {
89  const QString outFile = outFilePattern.arg(inputFile);
90  const QString outFileV2_1 = outFile21Pattern.arg(inputFile);
91  const QString outFileV4 = outFile4Pattern.arg(inputFile);
92  QTest::newRow(QFile::encodeName(inputFile).constData())
93  << inputFile
94  << (mOutput2_1Dir.exists(outFileV2_1) ? outFileV2_1 : QString())
95  << (mOutput3_0Dir.exists(outFile) ? outFile : QString())
96  << (mOutput4_0Dir.exists(outFileV4) ? outFileV4 : QString());
97  }
98 }
99 
100 void RoundtripTest::testVCardRoundtrip()
101 {
102  QFETCH( QString, inputFile );
103  QFETCH( QString, output2_1File );
104  QFETCH( QString, output3_0File );
105  QFETCH( QString, output4_0File );
106 
107  QVERIFY2( !output2_1File.isEmpty()
108  || !output3_0File.isEmpty()
109  || !output4_0File.isEmpty(),
110  "No reference output file for either format version" );
111 
112  QFile input( QFileInfo( mInputDir, inputFile ).absoluteFilePath() );
113  QVERIFY( input.open( QIODevice::ReadOnly ) );
114 
115  const QByteArray inputData = input.readAll();
116  QVERIFY( !inputData.isEmpty() );
117 
118  VCardConverter converter;
119  const Addressee::List list = converter.parseVCards( inputData );
120  QVERIFY( !list.isEmpty() );
121 
122  if ( !output2_1File.isEmpty() ) {
123  const QByteArray outputData = converter.createVCards( list, VCardConverter::v2_1 );
124 
125  QFile outputFile( QFileInfo( mOutput2_1Dir, output2_1File ).absoluteFilePath() );
126  QVERIFY( outputFile.open( QIODevice::ReadOnly ) );
127 
128  const QByteArray outputRefData = outputFile.readAll();
129  QCOMPARE( outputData.size(), outputRefData.size() );
130 
131  const QList<QByteArray> outputLines = outputData.split( '\n' );
132  const QList<QByteArray> outputRefLines = outputRefData.split( '\n' );
133  QCOMPARE( outputLines.count(), outputRefLines.count() );
134 
135  for ( int i = 0; i < outputLines.count(); ++i ) {
136  const QByteArray actual = outputLines[ i ];
137  const QByteArray expect = outputRefLines[ i ];
138 
139  if ( actual != expect ) {
140  qCritical() << "Mismatch in v2.1 output line" << ( i + 1 );
141  QCOMPARE( actual.count(), expect.count() );
142 
143  qCritical() << "\nActual:" << actual << "\nExpect:" << expect;
144  QCOMPARE( actual, expect );
145  }
146  }
147  }
148 
149  if ( !output3_0File.isEmpty() ) {
150  const QByteArray outputData = converter.createVCards( list, VCardConverter::v3_0 );
151  QFile outputFile( QFileInfo( mOutput3_0Dir, output3_0File ).absoluteFilePath() );
152  QVERIFY( outputFile.open( QIODevice::ReadOnly ) );
153 
154  const QByteArray outputRefData = outputFile.readAll();
155 // QCOMPARE( outputData.size(), outputRefData.size() );
156 
157  const QList<QByteArray> outputLines = outputData.split( '\n' );
158  const QList<QByteArray> outputRefLines = outputRefData.split( '\n' );
159  QCOMPARE( outputLines.count(), outputRefLines.count() );
160 
161  for ( int i = 0; i < outputLines.count(); ++i ) {
162  const QByteArray actual = outputLines[ i ];
163  const QByteArray expect = outputRefLines[ i ];
164 
165  if ( actual != expect ) {
166  qCritical() << "Mismatch in v3.0 output line" << ( i + 1 );
167 
168  qCritical() << "\nActual:" << actual << "\nExpect:" << expect;
169  QCOMPARE( actual.count(), expect.count() );
170  QCOMPARE( actual, expect );
171  }
172  }
173  }
174 #if 0
175  if (!output4_0File.isEmpty()) {
176  const QByteArray outputData = converter.createVCards(list, VCardConverter::v4_0);
177 
178  QFile outputFile(QFileInfo(mOutput4_0Dir, output4_0File).absoluteFilePath());
179  QVERIFY(outputFile.open(QIODevice::ReadOnly));
180 
181  const QByteArray outputRefData = outputFile.readAll();
182  //QCOMPARE( outputData.size(), outputRefData.size() );
183 
184  const QList<QByteArray> outputLines = outputData.split('\n');
185  const QList<QByteArray> outputRefLines = outputRefData.split('\n');
186  //QCOMPARE(outputLines.count(), outputRefLines.count());
187 
188  for (int i = 0; i < outputLines.count(); ++i) {
189  const QByteArray actual = outputLines[i];
190  const QByteArray expect = outputRefLines[i];
191 
192  if (actual != expect) {
193  qCritical() << "Mismatch in v4.0 output line" << (i + 1);
194 
195  qCritical() << "\nActual:" << actual << "\nExpect:" << expect;
196  QCOMPARE(actual.count(), expect.count());
197  QCOMPARE(actual, expect);
198  }
199  }
200  }
201 #endif
202 }
203 
204 QTEST_KDEMAIN( RoundtripTest, NoGUI )
205 
206 #include "testroundtrip.moc"
QByteArray::split
QList< QByteArray > split(char sep) const
KABC::AddresseeList
a QValueList of Addressee, with sorting functionality
Definition: addresseelist.h:288
QByteArray
KABC::VCardConverter
Class to converting contact objects into vCard format and vice versa.
Definition: vcardconverter.h:53
QFile
QList::count
int count(const T &value) const
QObject
QList::isEmpty
bool isEmpty() const
QByteArray::count
int count(char ch) const
QString
QList
Definition: contactgrouptool.h:30
QStringList
QFileInfo
QDir
QTest::newRow
QTestData & newRow(const char *dataTag)
QLatin1String
QByteArray::size
int size() const
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QFile::encodeName
QByteArray encodeName(const QString &fileName)
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:38:39 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kabc

Skip menu "kabc"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • Related Pages

kdepimlibs API Reference

Skip menu "kdepimlibs API Reference"
  • akonadi
  •   contact
  •   kmime
  •   socialutils
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmbox
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal