summaryrefslogtreecommitdiffstats
path: root/libkdepim/tests
diff options
context:
space:
mode:
Diffstat (limited to 'libkdepim/tests')
-rw-r--r--libkdepim/tests/Makefile.am32
-rw-r--r--libkdepim/tests/myconfig.kcfgc11
-rw-r--r--libkdepim/tests/propagator_test.kcfg44
-rw-r--r--libkdepim/tests/test_kregexp.cpp16
-rw-r--r--libkdepim/tests/testaddresseelineedit.cpp44
-rw-r--r--libkdepim/tests/testaddresseeselector.cpp52
-rw-r--r--libkdepim/tests/testdateedit.cpp68
-rw-r--r--libkdepim/tests/testdateedit.h38
-rw-r--r--libkdepim/tests/testdistrlist.cpp332
-rw-r--r--libkdepim/tests/testdistrlist.h46
-rw-r--r--libkdepim/tests/testlinklocator.cpp114
-rw-r--r--libkdepim/tests/testutf7decoder.cpp26
-rw-r--r--libkdepim/tests/testutf7encoder.cpp93
-rw-r--r--libkdepim/tests/testutf7encoder2.cpp45
-rw-r--r--libkdepim/tests/testwizard.cpp100
15 files changed, 1061 insertions, 0 deletions
diff --git a/libkdepim/tests/Makefile.am b/libkdepim/tests/Makefile.am
new file mode 100644
index 000000000..5adc2e1c4
--- /dev/null
+++ b/libkdepim/tests/Makefile.am
@@ -0,0 +1,32 @@
+AM_CPPFLAGS = -I$(top_builddir)/libkdepim -I$(top_srcdir)/libemailfunctions $(all_includes)
+AM_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+LDADD = ../libkdepim.la $(LIB_KDECORE)
+
+check_PROGRAMS = testwizard testaddresseelineedit \
+ testaddresseeselector \
+ testutf7decoder \
+ testutf7encoder \
+ test_kregexp \
+ testdateedit \
+ testlinklocator \
+ testdistrlist
+
+
+testwizard_SOURCES = testwizard.cpp myconfig.kcfgc
+testaddresseelineedit_SOURCES = testaddresseelineedit.cpp
+testaddresseeselector_SOURCES = testaddresseeselector.cpp
+testutf7encoder_SOURCES = testutf7encoder2.cpp
+testutf7decoder_SOURCES = testutf7decoder.cpp
+test_kregexp_SOURCES = test_kregexp.cpp
+testdateedit_SOURCES = testdateedit.cpp
+testlinklocator_SOURCES = testlinklocator.cpp
+testdistrlist_SOURCES = testdistrlist.cpp
+
+TESTS = testdistrlist
+
+METASOURCES = AUTO
+
+#example_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+#example_LDADD = ../libkdepim.la $(LIB_KDECORE)
+#example_SOURCES = example.cpp exampleprefs_base.kcfgc
+
diff --git a/libkdepim/tests/myconfig.kcfgc b/libkdepim/tests/myconfig.kcfgc
new file mode 100644
index 000000000..33711be31
--- /dev/null
+++ b/libkdepim/tests/myconfig.kcfgc
@@ -0,0 +1,11 @@
+# Code generation options for kconfig_compiler
+File=propagator_test.kcfg
+ClassName=MyConfig
+Singleton=true
+Mutators=true
+#Inherits=KPimPrefs
+#IncludeFiles=libkdepim/kpimprefs.h
+MemberVariables=public
+GlobalEnums=true
+ItemAccessors=true
+SetUserTexts=true
diff --git a/libkdepim/tests/propagator_test.kcfg b/libkdepim/tests/propagator_test.kcfg
new file mode 100644
index 000000000..8fc971771
--- /dev/null
+++ b/libkdepim/tests/propagator_test.kcfg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
+ http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
+ <kcfgfile name="testwizardrc"/>
+
+ <group name="MySettings">
+ <entry name="FixKMail" type="Bool">
+ <label>Fix KMail</label>
+ <default>true</default>
+ </entry>
+ <entry name="BreakKMail" type="Bool">
+ <label>Fix KMail</label>
+ <default>false</default>
+ </entry>
+ <entry name="DisableDefaultSigning" type="Int">
+ <default>0</default>
+ </entry>
+ <entry name="EnableDefaultSigning" type="Int">
+ <default>1</default>
+ </entry>
+ <entry name="ThisIsAString" type="String">
+ <default>hallo</default>
+ </entry>
+ </group>
+
+ <condition key="testwizardrc/MySettings/FixKMail" value="true">
+ <propagation source="testwizardrc/MySettings/DisableDefaultSigning"
+ target="kmailrc/CryptPlug #0/SignEmail" />
+ </condition>
+
+ <condition key="testwizardrc/MySettings/BreakKMail" value="true">
+ <propagation source="testwizardrc/MySettings/EnableDefaultSigning"
+ target="kmailrc/CryptPlug #0/SignEmail" />
+ </condition>
+
+ <propagation source="file1/group1/entry1" target="file2/group2/entry2" />
+ <propagation source="file1/group1/entry3" target="file2/group2/entry4" />
+ <condition key="myfile/mygroup/myentry" value="123">
+ <propagation source="file1/group1/entry1" target="filex/groupx/entryx" />
+ </condition>
+
+</kcfg>
diff --git a/libkdepim/tests/test_kregexp.cpp b/libkdepim/tests/test_kregexp.cpp
new file mode 100644
index 000000000..96bfc54c6
--- /dev/null
+++ b/libkdepim/tests/test_kregexp.cpp
@@ -0,0 +1,16 @@
+#include <kregexp3.h>
+#include <kdebug.h>
+#include <kinstance.h>
+
+int
+main()
+{
+ KInstance app("# ");
+
+ // test for http://bugs.kde.org/show_bug.cgi?id=54886
+ KRegExp3 reg("^");
+ QString res = reg.replace(QString::fromLatin1("Fun stuff"),
+ QString::fromLatin1("[fun] "));
+ kdDebug() << res << endl;
+
+}
diff --git a/libkdepim/tests/testaddresseelineedit.cpp b/libkdepim/tests/testaddresseelineedit.cpp
new file mode 100644
index 000000000..db95f754c
--- /dev/null
+++ b/libkdepim/tests/testaddresseelineedit.cpp
@@ -0,0 +1,44 @@
+/*
+ This file is part of libkdepim.
+
+ Copyright (c) 2004 Daniel Molkentin <danimo@klaralvdalens-datakonsult.se>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ 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 <kaboutdata.h>
+#include <kapplication.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <kcmdlineargs.h>
+
+#include "../addresseelineedit.h"
+
+int main(int argc, char* argv[])
+{
+ KAboutData aboutData("testaddresseelineedit","Test AddresseeLineEdit","0.1");
+ KCmdLineArgs::init(argc,argv,&aboutData);
+
+ KApplication app;
+
+ KPIM::AddresseeLineEdit *kale = new KPIM::AddresseeLineEdit(0);
+ kale->resize( 400, 20 );
+ kale->show();
+
+ return app.exec();
+
+}
+
diff --git a/libkdepim/tests/testaddresseeselector.cpp b/libkdepim/tests/testaddresseeselector.cpp
new file mode 100644
index 000000000..af6fdc063
--- /dev/null
+++ b/libkdepim/tests/testaddresseeselector.cpp
@@ -0,0 +1,52 @@
+/*
+ This file is part of libkdepim.
+
+ Copyright (c) 2004 Daniel Molkentin <danimo@klaralvdalens-datakonsult.se>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ 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 <kaboutdata.h>
+#include <kapplication.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <kcmdlineargs.h>
+
+#include "../addresseeselector.h"
+#include "../addresseeemailselection.h"
+
+int main( int argc, char **argv )
+{
+ KAboutData aboutData( "testaddresseeseletor", "Test AddresseeSelector", "0.1" );
+ KCmdLineArgs::init( argc, argv, &aboutData );
+
+ KApplication app;
+
+ KPIM::AddresseeEmailSelection selection;
+
+ KPIM::AddresseeSelectorDialog dlg( &selection );
+ dlg.exec();
+
+ kdDebug() << "to: " << selection.to() << endl;
+ kdDebug() << "cc: " << selection.cc() << endl;
+ kdDebug() << "bcc: " << selection.bcc() << endl;
+
+ kdDebug() << "toDistlists: " << selection.toDistributionLists() << endl;
+ kdDebug() << "ccDistlists: " << selection.ccDistributionLists() << endl;
+ kdDebug() << "bccDistlists: " << selection.bccDistributionLists() << endl;
+
+ return 0;
+}
diff --git a/libkdepim/tests/testdateedit.cpp b/libkdepim/tests/testdateedit.cpp
new file mode 100644
index 000000000..bc244f13f
--- /dev/null
+++ b/libkdepim/tests/testdateedit.cpp
@@ -0,0 +1,68 @@
+/*
+ This file is part of libkdepim.
+
+ Copyright (c) 2004 Tobias Koenig <tokoe@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ 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 <qlayout.h>
+
+#include <kaboutdata.h>
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <kdebug.h>
+#include <klocale.h>
+
+#include "kdateedit.h"
+
+#include "testdateedit.h"
+
+DateEdit::DateEdit( QWidget *parent, const char *name )
+ : QWidget( parent, name )
+{
+ QVBoxLayout *layout = new QVBoxLayout( this );
+
+ KDateEdit *edit = new KDateEdit( this );
+ layout->addWidget( edit );
+
+ connect( edit, SIGNAL( dateChanged( const QDate& ) ),
+ this, SLOT( dateChanged( const QDate& ) ) );
+}
+
+void DateEdit::dateChanged( const QDate &date )
+{
+ if ( date.isValid() )
+ qDebug( "%s", date.toString().latin1() );
+ else
+ qDebug( "invalid date entered" );
+}
+
+int main(int argc,char **argv)
+{
+ KAboutData aboutData( "testdateedit", "Test KDateEdit", "0.1" );
+ KCmdLineArgs::init( argc, argv, &aboutData );
+
+ KApplication app;
+
+ DateEdit dateEdit;
+ app.setMainWidget( &dateEdit );
+ dateEdit.show();
+
+ app.exec();
+}
+
+#include "testdateedit.moc"
diff --git a/libkdepim/tests/testdateedit.h b/libkdepim/tests/testdateedit.h
new file mode 100644
index 000000000..d6eb14cd0
--- /dev/null
+++ b/libkdepim/tests/testdateedit.h
@@ -0,0 +1,38 @@
+/*
+ This file is part of libkdepim.
+
+ Copyright (c) 2004 Tobias Koenig <tokoe@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ 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.
+*/
+
+#ifndef TESTDATEEDIT_H
+#define TESTDATEEDIT_H
+
+#include <qwidget.h>
+
+class DateEdit : public QWidget
+{
+ Q_OBJECT
+
+ public:
+ DateEdit( QWidget *parent = 0, const char *name = 0 );
+
+ public slots:
+ void dateChanged( const QDate& );
+};
+
+#endif
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 <faure@kde.org>
+
+ 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 <distributionlist.h>
+using KPIM::DistributionList;
+
+#include <config.h>
+
+#include <kabc/stdaddressbook.h>
+#include <kurl.h>
+#include <kapplication.h>
+#include <kio/netaccess.h>
+#include <kio/job.h>
+#include <kdebug.h>
+#include <kcmdlineargs.h>
+
+#include <qdir.h>
+#include <qfileinfo.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <assert.h>
+
+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 <sys/types.h>
+#include <dirent.h>
+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 <addr1@kde.org>" );
+ check( "second email", emails[1], "addr2 <addr2-alternate@kde.org>" );
+ check( "third email", emails[2], "addr2 <addr2@kde.org>" );
+
+ // 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 <addr2-alternate@kde.org>" );
+
+ // 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"
diff --git a/libkdepim/tests/testdistrlist.h b/libkdepim/tests/testdistrlist.h
new file mode 100644
index 000000000..0b2a055d2
--- /dev/null
+++ b/libkdepim/tests/testdistrlist.h
@@ -0,0 +1,46 @@
+/* This file is part of the KDE project
+ Copyright (C) 2004 David Faure <faure@kde.org>
+
+ 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.
+*/
+
+#ifndef TESTDISTRLIST_H
+#define TESTDISTRLIST_H
+
+#include <qobject.h>
+
+class TestDistrList : public QObject
+{
+ Q_OBJECT
+
+public:
+ TestDistrList() {}
+ void setup();
+ void runAll();
+ void cleanup();
+
+ // tests
+ void testEmpty();
+ void testNewList();
+ void testInsertEntry();
+ void testRemoveEntry();
+ void testDuplicate();
+ void testDeleteList();
+
+private:
+ bool check(const QString& txt, QString a, QString b);
+};
+
+#endif
diff --git a/libkdepim/tests/testlinklocator.cpp b/libkdepim/tests/testlinklocator.cpp
new file mode 100644
index 000000000..b5678fe14
--- /dev/null
+++ b/libkdepim/tests/testlinklocator.cpp
@@ -0,0 +1,114 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 Ingo Kloecker <kloecker@kde.org>
+
+ 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.
+*/
+
+// Test program for libkdepim/linklocator.*
+#include <linklocator.h>
+
+#include <kcmdlineargs.h>
+#include <kapplication.h>
+#include <kdebug.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+static bool check(const QString& txt, const QString& a, const QString& b)
+{
+ if (a == b) {
+ kdDebug() << txt << " : checking '" << a << "' against expected value '" << b << "'... " << "ok" << endl;
+ }
+ else {
+ kdDebug() << txt << " : checking '" << a << "' against expected value '" << b << "'... " << "KO !" << endl;
+ exit(1);
+ }
+ return true;
+}
+
+static bool checkGetEmailAddress( const QString & input,
+ int atPos,
+ const QString & expRetVal,
+ bool allowBadAtPos = false )
+{
+ if ( !allowBadAtPos && ( input[atPos] != '@' ) ) {
+ kdDebug() << "atPos (" << atPos << ") doesn't point to '@' in \""
+ << input << "\". Fix the check!" << endl;
+ exit(1);
+ }
+ LinkLocator ll( input, atPos );
+ const QString retVal = ll.getEmailAddress();
+ check( "getEmailAddress() \"" + input + "\", " + QString::number( atPos ),
+ retVal, expRetVal );
+ return true;
+}
+
+int main(int argc, char *argv[])
+{
+ KApplication::disableAutoDcopRegistration();
+ KCmdLineArgs::init( argc, argv, "testlinklocator", 0, 0, 0, 0 );
+ KApplication app( false, false );
+
+ // empty input
+ checkGetEmailAddress( QString(), 0, QString(), true );
+
+ // no '@' at scan position
+ checkGetEmailAddress( "foo@bar.baz", 0, QString(), true );
+
+ // '@' in local part
+ checkGetEmailAddress( "foo@bar@bar.baz", 7, QString() );
+
+ // empty local part
+ checkGetEmailAddress( "@bar.baz", 0, QString() );
+ checkGetEmailAddress( ".@bar.baz", 1, QString() );
+ checkGetEmailAddress( " @bar.baz", 1, QString() );
+ checkGetEmailAddress( ".!#$%&'*+-/=?^_`{|}~@bar.baz", strlen(".!#$%&'*+-/=?^_`{|}~"), QString() );
+
+ // allowed special chars in local part of address
+ checkGetEmailAddress( "a.!#$%&'*+-/=?^_`{|}~@bar.baz", strlen("a.!#$%&'*+-/=?^_`{|}~"), "a.!#$%&'*+-/=?^_`{|}~@bar.baz" );
+
+ // '@' in domain part
+ checkGetEmailAddress( "foo@bar@bar.baz", 3, QString() );
+
+ // domain part without dot
+ checkGetEmailAddress( "foo@bar", 3, QString() );
+ checkGetEmailAddress( "foo@bar.", 3, QString() );
+ checkGetEmailAddress( ".foo@bar", 4, QString() );
+ checkGetEmailAddress( "foo@bar ", 3, QString() );
+ checkGetEmailAddress( " foo@bar", 4, QString() );
+ checkGetEmailAddress( "foo@bar-bar", 3, QString() );
+
+ // empty domain part
+ checkGetEmailAddress( "foo@", 3, QString() );
+ checkGetEmailAddress( "foo@.", 3, QString() );
+ checkGetEmailAddress( "foo@-", 3, QString() );
+
+ // simple address
+ checkGetEmailAddress( "foo@bar.baz", 3, "foo@bar.baz" );
+ checkGetEmailAddress( "foo@bar.baz.", 3, "foo@bar.baz" );
+ checkGetEmailAddress( ".foo@bar.baz", 4, "foo@bar.baz" );
+ checkGetEmailAddress( "foo@bar.baz-", 3, "foo@bar.baz" );
+ checkGetEmailAddress( "-foo@bar.baz", 4, "foo@bar.baz" );
+ checkGetEmailAddress( "foo@bar.baz ", 3, "foo@bar.baz" );
+ checkGetEmailAddress( " foo@bar.baz", 4, "foo@bar.baz" );
+ checkGetEmailAddress( "foo@bar-bar.baz", 3, "foo@bar-bar.baz" );
+
+ printf("\nTest OK !\n");
+
+ return 0;
+}
+
diff --git a/libkdepim/tests/testutf7decoder.cpp b/libkdepim/tests/testutf7decoder.cpp
new file mode 100644
index 000000000..39ded9201
--- /dev/null
+++ b/libkdepim/tests/testutf7decoder.cpp
@@ -0,0 +1,26 @@
+#include "qutf7codec.h"
+#include "qutf7codec.cpp"
+#include <qtextstream.h>
+#include <string.h>
+#include <assert.h>
+
+int main( int argc, char * argv[] ) {
+ if ( argc == 1 ) {
+ (void)new QUtf7Codec;
+
+ QTextCodec * codec = QTextCodec::codecForName("utf-7");
+ assert(codec);
+
+ QTextIStream my_cin(stdin);
+ my_cin.setCodec(codec);
+
+ QTextOStream my_cout(stdout);
+
+ QString buffer = my_cin.read();
+
+ my_cout << buffer;
+ } else {
+ qWarning("usage: testutf7decoder string_to_decode\n");
+ }
+ QTextCodec::deleteAllCodecs();
+}
diff --git a/libkdepim/tests/testutf7encoder.cpp b/libkdepim/tests/testutf7encoder.cpp
new file mode 100644
index 000000000..2d635744e
--- /dev/null
+++ b/libkdepim/tests/testutf7encoder.cpp
@@ -0,0 +1,93 @@
+#include "qutf7codec.h"
+#include "qutf7codec.cpp"
+#include <iostream.h>
+#include <string.h>
+
+void main( int argc, char * argv[] ) {
+ if ( argc == 2 ) {
+ QUtf7Codec * codec = new QUtf7Codec;
+
+ QTextEncoder * enc;
+
+ QString arg = QString::fromLatin1( argv[1] );
+ int len;
+
+ cout << "Original string:\n"
+ << "\"" << argv[1] << "\"\n" << endl;
+
+ cout << "Encode optional direct set and whitespace:\n" << endl;
+ codec->setEncodeWhitespace(TRUE);
+ codec->setEncodeOptionalDirect(TRUE);
+ enc = codec->makeEncoder();
+
+ len = arg.length();
+ cout << (enc->fromUnicode( arg, len )).data()
+ << "\n" << endl;
+
+ cout << "Same as above, but call fromUnicode() char-wise:\n" << endl;
+
+ delete enc;
+ enc = codec->makeEncoder();
+
+ for ( int i = 0 ; i < arg.length() ; i++ ) {
+ len = 1;
+ cout << (enc->fromUnicode( QString(arg[i]), len )).data();
+ }
+ cout << "\n" << endl;
+
+
+
+ delete enc;
+
+ cout << "Encode optional direct set and not whitespace:\n" << endl;
+ codec->setEncodeWhitespace(FALSE);
+ codec->setEncodeOptionalDirect(TRUE);
+ enc = codec->makeEncoder();
+
+ len = arg.length();
+ cout << (enc->fromUnicode( arg, len )).data()
+ << "\n" << endl;
+
+ delete enc;
+
+
+ cout << "Don't encode optional direct set, but whitespace:\n" << endl;
+ codec->setEncodeWhitespace(TRUE);
+ codec->setEncodeOptionalDirect(FALSE);
+ enc = codec->makeEncoder();
+
+ len = arg.length();
+ cout << (enc->fromUnicode( arg, len )).data()
+ << "\n" << endl;
+
+ delete enc;
+
+
+ cout << "Encode neither optional direct set, nor whitespace:\n" << endl;
+ codec->setEncodeWhitespace(FALSE);
+ codec->setEncodeOptionalDirect(FALSE);
+ enc = codec->makeEncoder();
+
+ len = arg.length();
+ cout << (enc->fromUnicode( arg, len )).data()
+ << "\n" << endl;
+
+ cout << "Same as above, but call fromUnicode() char-wise:\n" << endl;
+
+ delete enc;
+ enc = codec->makeEncoder();
+
+ for ( int i = 0 ; i < arg.length() ; i++ ) {
+ len = 1;
+ cout << (enc->fromUnicode( QString(arg[i]), len )).data();
+ }
+ cout << "\n" << endl;
+
+
+ delete enc;
+
+ delete codec;
+ } else {
+ qWarning("usage: testutf7encoder string_to_encode\n");
+ }
+}
diff --git a/libkdepim/tests/testutf7encoder2.cpp b/libkdepim/tests/testutf7encoder2.cpp
new file mode 100644
index 000000000..0661d63c1
--- /dev/null
+++ b/libkdepim/tests/testutf7encoder2.cpp
@@ -0,0 +1,45 @@
+#include "qutf7codec.h"
+#include "qutf7codec.cpp"
+#include <qtextstream.h>
+#include <string.h>
+#include <assert.h>
+#include <iostream.h>
+
+int main( int argc, char * argv[] ) {
+ if ( argc == 1 ) {
+ (void)new QUtf7Codec;
+
+ QTextCodec * codec = QTextCodec::codecForName("utf-7");
+ assert(codec);
+
+ QTextIStream my_cin(stdin);
+
+ QTextOStream my_cout(stdout);
+ my_cout.setCodec(codec);
+
+ QString buffer = my_cin.read();
+
+ // qDebug("buffer == " + buffer);
+
+#ifdef USE_STREAM
+ my_cout << buffer << endl;
+#else
+ QTextEncoder * enc = codec->makeEncoder();
+#ifdef CHAR_WISE
+ int len;
+ for ( int i = 0 ; i < buffer.length() ; i++ ) {
+ len = 1;
+ cout << (enc->fromUnicode(QString(buffer[i]),len)).data();
+ }
+ cout << endl;
+#else
+ int len = buffer.length();
+ cout << (enc->fromUnicode(buffer,len)).data() << endl;;
+#endif // CHAR_WISE
+ delete enc;
+#endif // else USE_STREAM
+ } else {
+ qWarning("usage: testutf7encoder2 < infile > outfile\n");
+ }
+ QTextCodec::deleteAllCodecs();
+}
diff --git a/libkdepim/tests/testwizard.cpp b/libkdepim/tests/testwizard.cpp
new file mode 100644
index 000000000..ce4038909
--- /dev/null
+++ b/libkdepim/tests/testwizard.cpp
@@ -0,0 +1,100 @@
+/*
+ This file is part of libkdepim.
+
+ Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ 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 "myconfig.h"
+
+#include <kconfigwizard.h>
+
+#include <kaboutdata.h>
+#include <kapplication.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <kcmdlineargs.h>
+
+#include <qlayout.h>
+#include <qcheckbox.h>
+
+class TestConfigWizard : public KConfigWizard
+{
+ public:
+ TestConfigWizard() :
+ KConfigWizard( new KConfigPropagator( MyConfig::self(),
+ "propagator_test.kcfg" ) )
+ {
+ QFrame *page = createWizardPage( "My Wizard Page" );
+ QBoxLayout *topLayout = new QVBoxLayout( page );
+
+ mFixKMailCheckBox = new QCheckBox( i18n("Fix KMail"), page );
+ topLayout->addWidget( mFixKMailCheckBox );
+
+ mFixKMailCheckBox->setChecked( MyConfig::fixKMail() );
+
+ mBreakKMailCheckBox = new QCheckBox( i18n("Break KMail"), page );
+ topLayout->addWidget( mBreakKMailCheckBox );
+
+ mBreakKMailCheckBox->setChecked( MyConfig::breakKMail() );
+
+ setupRulesPage();
+ setupChangesPage();
+ }
+
+ ~TestConfigWizard()
+ {
+ }
+
+ void usrReadConfig()
+ {
+ }
+
+ void usrWriteConfig()
+ {
+ MyConfig::self()->setFixKMail( mFixKMailCheckBox->isChecked() );
+ MyConfig::self()->setBreakKMail( mBreakKMailCheckBox->isChecked() );
+ }
+
+ private:
+ QCheckBox *mFixKMailCheckBox;
+ QCheckBox *mBreakKMailCheckBox;
+};
+
+static const KCmdLineOptions options[] =
+{
+ {"verbose", "Verbose output", 0},
+ KCmdLineLastOption
+};
+
+int main(int argc,char **argv)
+{
+ KAboutData aboutData("testwizard","Test KConfigWizard","0.1");
+ KCmdLineArgs::init(argc,argv,&aboutData);
+ KCmdLineArgs::addCmdLineOptions( options );
+
+ KApplication app;
+
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+
+ bool verbose = false;
+ if ( args->isSet( "verbose" ) ) verbose = true;
+
+ TestConfigWizard wizard;
+
+ wizard.exec();
+}