From 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- libkdepim/tests/testdistrlist.cpp | 332 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 332 insertions(+) create mode 100644 libkdepim/tests/testdistrlist.cpp (limited to 'libkdepim/tests/testdistrlist.cpp') diff --git a/libkdepim/tests/testdistrlist.cpp b/libkdepim/tests/testdistrlist.cpp new file mode 100644 index 000000000..281c5835b --- /dev/null +++ b/libkdepim/tests/testdistrlist.cpp @@ -0,0 +1,332 @@ +/* This file is part of the KDE project + Copyright (C) 2004 David Faure + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "testdistrlist.h" + +#include +using KPIM::DistributionList; + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + // Use another directory than the real one, just to keep things clean + // KDEHOME needs to be writable though, for a ksycoca database + setenv( "KDEHOME", QFile::encodeName( QDir::homeDirPath() + "/.kde-testdistrlist" ), true ); + setenv( "KDE_FORK_SLAVES", "yes", true ); // simpler, for the final cleanup + + KApplication::disableAutoDcopRegistration(); + KCmdLineArgs::init(argc,argv,"testdistrlist", 0, 0, 0, 0); + KApplication app( false, false ); + + TestDistrList test; + test.setup(); + test.runAll(); + test.cleanup(); + kdDebug() << "All tests OK." << endl; + return 0; +} + +void TestDistrList::setup() +{ + // We need a std addressbook + KABC::AddressBook *ab = KABC::StdAddressBook::self(); + KABC::StdAddressBook::setAutomaticSave( false ); + + // and two contacts + KABC::Addressee addr1; + addr1.setName( "addr1" ); + addr1.setFormattedName( "addr1" ); + addr1.insertEmail( "addr1@kde.org", true ); + addr1.insertEmail( "addr1-alternate@kde.org" ); + ab->insertAddressee( addr1 ); + assert( addr1.emails().count() == 2 ); + + KABC::Addressee addr2; + addr2.setName( "addr2" ); + addr2.insertEmail( "addr2@kde.org", true ); + addr2.insertEmail( "addr2-alternate@kde.org" ); + ab->insertAddressee( addr2 ); + assert( addr2.emails().count() == 2 ); + + assert( !ab->findByName( "addr1" ).isEmpty() ); + assert( !ab->findByName( "addr2" ).isEmpty() ); +} + +void TestDistrList::runAll() +{ + testEmpty(); + testNewList(); + testInsertEntry(); + testRemoveEntry(); + testDuplicate(); + testDeleteList(); +} + +bool TestDistrList::check(const QString& txt, QString a, QString b) +{ + if (a.isEmpty()) + a = QString::null; + if (b.isEmpty()) + b = QString::null; + if (a == b) { + kdDebug() << txt << " : checking '" << a << "' against expected value '" << b << "'... " << "ok" << endl; + } + else { + kdDebug() << txt << " : checking '" << a << "' against expected value '" << b << "'... " << "KO !" << endl; + cleanup(); + exit(1); + } + return true; +} + +// taken from KMail +#include +#include +static bool removeDirAndContentsRecursively( const QString & path ) +{ + kdDebug() << k_funcinfo << path << endl; + bool success = true; + + QDir d; + d.setPath( path ); + d.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden ); + + const QFileInfoList *list = d.entryInfoList(); + QFileInfoListIterator it( *list ); + QFileInfo *fi; + + while ( (fi = it.current()) != 0 ) { + if( fi->isDir() && !fi->isSymLink() ) { + if ( fi->fileName() != "." && fi->fileName() != ".." ) + success = success && removeDirAndContentsRecursively( fi->absFilePath() ); + } else { + success = success && d.remove( fi->absFilePath() ); + } + ++it; + } + + if ( success ) { + success = success && d.rmdir( path ); // nuke ourselves, we should be empty now + } + return success; +} + +void TestDistrList::cleanup() +{ + kdDebug() << k_funcinfo << endl; + KABC::AddressBook *ab = KABC::StdAddressBook::self(); + ab->clear(); + KABC::StdAddressBook::close(); + + QString kdehome = QFile::decodeName( getenv("KDEHOME") ); + KURL urlkdehome; urlkdehome.setPath( kdehome ); + // don't use KIO::NetAccess here since it needs X + // KIO::NetAccess::del( urlkdehome, 0 )i; + assert( removeDirAndContentsRecursively( kdehome ) ); +} + +void TestDistrList::testEmpty() +{ + kdDebug() << k_funcinfo << endl; + DistributionList dl; + assert( dl.isEmpty() ); +} + +void TestDistrList::testNewList() +{ + kdDebug() << k_funcinfo << endl; + DistributionList dl; + dl.setName( "foo" ); + assert( !dl.isEmpty() ); + check( "name set", dl.formattedName(), "foo" ); + assert( DistributionList::isDistributionList( dl ) ); + + KABC::AddressBook *ab = KABC::StdAddressBook::self(); + ab->insertAddressee( dl ); +#if 0 // can't do that until we have KABC::AddressBook::findByFormattedName, or we use setName() + KABC::Addressee::List addrList = ab->findByName( "foo" ); + assert( addrList.count() == 1 ); + KABC::Addressee addr = addrList.first(); + assert( !addr.isEmpty() ); + check( "correct name", addr.name(), "foo" ); + assert( DistributionList::isDistributionList( addr ) ); +#else + KABC::Addressee addr = dl; +#endif + + DistributionList dl2 = DistributionList::findByName( ab, "foo" ); + assert( !dl2.isEmpty() ); + check( "correct name", dl2.formattedName(), "foo" ); + assert( DistributionList::isDistributionList( dl2 ) ); + + // Test the ctor that takes an addressee + DistributionList dl3( addr ); + assert( !dl3.isEmpty() ); + assert( DistributionList::isDistributionList( dl3 ) ); + check( "correct name", dl3.formattedName(), "foo" ); +} + +void TestDistrList::testInsertEntry() +{ + kdDebug() << k_funcinfo << endl; + KABC::AddressBook *ab = KABC::StdAddressBook::self(); + DistributionList dl = DistributionList::findByName( ab, "foo" ); + assert( !dl.isEmpty() ); + +#if 0 // the usual method + KABC::Addressee addr1 = ab->findByName( "addr1" ).first(); + assert( !addr1.isEmpty() ); + dl.insertEntry( addr1 ); +#else // the kolab-resource method + dl.insertEntry( "addr1" ); +#endif + + KABC::Addressee addr2 = ab->findByName( "addr2" ).first(); + assert( !addr2.isEmpty() ); + dl.insertEntry( addr2, "addr2-alternate@kde.org" ); + + // Try inserting it again, should do nothing + dl.insertEntry( addr2, "addr2-alternate@kde.org" ); + + // And insert it with another email address + dl.insertEntry( addr2, "addr2@kde.org" ); + + // Test entries() + DistributionList::Entry::List entries = dl.entries( ab ); + check( "entries count", QString::number( entries.count() ), "3" ); + check( "first entry", entries[0].addressee.name(), "addr1" ); + check( "first entry", entries[0].email, QString::null ); + check( "second entry", entries[1].addressee.name(), "addr2" ); + check( "second entry", entries[1].email, "addr2-alternate@kde.org" ); + check( "third entry", entries[2].addressee.name(), "addr2" ); + check( "third entry", entries[2].email, "addr2@kde.org" ); + + // Test emails() + QStringList emails = dl.emails( ab ); + kdDebug() << emails << endl; + assert( emails.count() == 3 ); + check( "first email", emails[0], "addr1 " ); + check( "second email", emails[1], "addr2 " ); + check( "third email", emails[2], "addr2 " ); + + // Commit changes to the addressbook !! + ab->insertAddressee( dl ); +} + +void TestDistrList::testRemoveEntry() +{ + kdDebug() << k_funcinfo << endl; + KABC::AddressBook *ab = KABC::StdAddressBook::self(); + DistributionList dl = DistributionList::findByName( ab, "foo" ); + assert( !dl.isEmpty() ); + DistributionList::Entry::List entries = dl.entries( ab ); + check( "entries count before removeEntry", QString::number( entries.count() ), "3" ); + + // Removing an empty entry shouldn't do anything + dl.removeEntry( KABC::Addressee() ); + check( "entries count after removing empty entry", QString::number( dl.entries(ab).count() ), "3" ); + + KABC::Addressee addr1 = ab->findByName( "addr1" ).first(); + assert( !addr1.isEmpty() ); + // Removing an entry with the wrong email passed, shouldn't do anything + dl.removeEntry( addr1, "foo@foobar.com" ); + check( "entries count after removing entry with invalid email", QString::number( dl.entries(ab).count() ), "3" ); + + // Now remove entry correctly + dl.removeEntry( addr1 ); + check( "removeEntry(addr1) worked", QString::number( dl.entries(ab).count() ), "2" ); + QStringList emails = dl.emails( ab ); + assert( emails.count() == 2 ); + check( "first email", emails[0], "addr2 " ); + + // Now move on to addr2. First remove with no or a wrong email (nothing should happen) + KABC::Addressee addr2 = ab->findByName( "addr2" ).first(); + assert( !addr2.isEmpty() ); + dl.removeEntry( addr2 ); + check( "entries count after removing entry with no email", QString::number( dl.entries(ab).count() ), "2" ); + + // Now remove addr2 correctly + dl.removeEntry( addr2, "addr2@kde.org" ); + check( "entries count after removing addr2", QString::number( dl.entries(ab).count() ), "1" ); + dl.removeEntry( addr2, "addr2-alternate@kde.org" ); + check( "entries count after removing alternate addr2", QString::number( dl.entries(ab).count() ), "0" ); + assert( dl.entries(ab).isEmpty() ); + assert( dl.emails(ab).isEmpty() ); + assert( DistributionList::isDistributionList( dl ) ); + + ab->insertAddressee( dl ); +} + +void TestDistrList::testDuplicate() +{ + kdDebug() << k_funcinfo << endl; + // This is a special test for the case where we have a contact and a distr list with the same name + KABC::AddressBook *ab = KABC::StdAddressBook::self(); + KABC::Addressee addr; + addr.setName( "foo" ); + addr.insertEmail( "foo@kde.org", true ); + ab->insertAddressee( addr ); + +#if 0 // we need a findByFormattedName + KABC::Addressee::List addrList = ab->findByName( "foo" ); + assert( addrList.count() == 2 ); + + bool a = DistributionList::isDistributionList( addrList.first() ); + bool b = DistributionList::isDistributionList( addrList.last() ); + // one is a distr list, but not both + assert( a || b ); + // + assert( ! ( a && b ) ); +#endif + + DistributionList dl = DistributionList::findByName( ab, "foo" ); + assert( !dl.isEmpty() ); + assert( DistributionList::isDistributionList( dl ) ); + assert( dl.formattedName() == "foo" ); +} + +void TestDistrList::testDeleteList() +{ + kdDebug() << k_funcinfo << endl; + + KABC::AddressBook *ab = KABC::StdAddressBook::self(); + DistributionList dl = DistributionList::findByName( ab, "foo" ); + assert( !dl.isEmpty() ); + ab->removeAddressee( dl ); + dl = DistributionList::findByName( ab, "foo" ); + assert( dl.isEmpty() ); +} + +#include "testdistrlist.moc" -- cgit v1.2.1