summaryrefslogtreecommitdiff
path: root/kimap/tests/listjobtest.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2012-06-25 23:43:13 (GMT)
committerChristian Mollekopf <chrigi_1@fastmail.fm>2012-06-25 23:43:13 (GMT)
commite21e62c14f5aae99d46643065fcb86e2e3abe230 (patch)
tree71d79d2de0b0f82f8b0a6ca3b8b09308d198ed33 /kimap/tests/listjobtest.cpp
parent172803b38237e38a494aca62fffda918e5799d20 (diff)
downloadlibcalendaring-e21e62c14f5aae99d46643065fcb86e2e3abe230.tar.gz
initial import of kimap from
commit b54a325116b194da090f900c9a538710759eb303 Author: Stephen Kelly <steveire@gmail.com> Date: Sun May 6 20:44:53 2012 +0200 Revert "Port to const QRegExp API." This reverts commit 0ca0dfc7e0ca8095efd0b060d1d5e26ac9ceb379. The qtbase commit requiring this was reverted.
Diffstat (limited to 'kimap/tests/listjobtest.cpp')
-rw-r--r--kimap/tests/listjobtest.cpp237
1 files changed, 237 insertions, 0 deletions
diff --git a/kimap/tests/listjobtest.cpp b/kimap/tests/listjobtest.cpp
new file mode 100644
index 0000000..81fbfc4
--- /dev/null
+++ b/kimap/tests/listjobtest.cpp
@@ -0,0 +1,237 @@
+/*
+ Copyright (C) 2009 Andras Mantia <amantia@kde.org>
+
+ Copyright (c) 2010 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
+ Author: Kevin Ottens <kevin@kdab.com>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program 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
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+#include <qtest_kde.h>
+
+#include "kimaptest/fakeserver.h"
+#include "kimap/session.h"
+#include "kimap/listjob.h"
+
+#include <QTcpSocket>
+#include <QtTest>
+#include <KDebug>
+
+Q_DECLARE_METATYPE(QList<KIMAP::MailBoxDescriptor>)
+Q_DECLARE_METATYPE(QList< QList<QByteArray> >)
+
+class ListJobTest: public QObject {
+ Q_OBJECT
+
+private Q_SLOTS:
+
+void testList_data() {
+ QTest::addColumn<bool>( "unsubscribed" );
+ QTest::addColumn<QList<QByteArray> >( "scenario" );
+ QTest::addColumn<QList<KIMAP::MailBoxDescriptor> >( "listresult" );
+
+ QList<QByteArray> scenario;
+ scenario << FakeServer::preauth()
+ << "C: A000001 LIST \"\" *"
+ << "S: * LIST ( \\HasChildren ) / INBOX"
+ << "S: * LIST ( \\HasNoChildren ) / INBOX/&AOQ- &APY- &APw- @ &IKw-"
+ << "S: * LIST ( \\HasChildren ) / INBOX/lost+found"
+ << "S: * LIST ( \\HasNoChildren ) / \"INBOX/lost+found/Calendar Public-20080128\""
+ << "S: A000001 OK LIST completed";
+ KIMAP::MailBoxDescriptor descriptor;
+ QList<KIMAP::MailBoxDescriptor> listresult;
+
+ descriptor.separator = '/';
+ descriptor.name = "INBOX";
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = QString::fromUtf8( "INBOX/ä ö ü @ €" );
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = "INBOX/lost+found";
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = "INBOX/lost+found/Calendar Public-20080128";
+ listresult << descriptor;
+
+ QTest::newRow( "normal" ) << true << scenario << listresult;
+
+ scenario.clear();;
+ scenario << FakeServer::preauth()
+ << "C: A000001 LIST \"\" *"
+ << "S: * LIST ( \\HasChildren ) / Inbox"
+ << "S: * LIST ( \\HasNoChildren ) / Inbox/&AOQ- &APY- &APw- @ &IKw-"
+ << "S: * LIST ( \\HasChildren ) / Inbox/lost+found"
+ << "S: * LIST ( \\HasNoChildren ) / \"Inbox/lost+found/Calendar Public-20080128\""
+ << "S: A000001 OK LIST completed";
+ listresult.clear();
+
+ descriptor.separator = '/';
+ descriptor.name = "INBOX";
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = QString::fromUtf8( "INBOX/ä ö ü @ €" );
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = "INBOX/lost+found";
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = "INBOX/lost+found/Calendar Public-20080128";
+ listresult << descriptor;
+
+ QTest::newRow( "lowercase Inbox" ) << true << scenario << listresult;
+
+ scenario.clear();
+ scenario << FakeServer::preauth()
+ << "C: A000001 LSUB \"\" *"
+ << "S: * LSUB ( \\HasChildren ) / INBOX"
+ << "S: * LSUB ( ) / INBOX/Calendar/3196"
+ << "S: * LSUB ( \\HasChildren ) / INBOX/Calendar/ff"
+ << "S: * LSUB ( ) / INBOX/Calendar/ff/hgh"
+ << "S: * LSUB ( ) / user/test2/Calendar"
+ << "S: A000001 OK LSUB completed";
+ listresult.clear();
+
+ descriptor.separator = '/';
+ descriptor.name = "INBOX";
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = "INBOX/Calendar/3196";
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = "INBOX/Calendar/ff";
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = "INBOX/Calendar/ff/hgh";
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = "user/test2/Calendar";
+ listresult << descriptor;
+
+ QTest::newRow( "subscribed" ) << false << scenario << listresult;
+
+ scenario.clear();
+ scenario << FakeServer::preauth()
+ << "C: A000001 LSUB \"\" *"
+ << "S: * LSUB ( \\HasChildren ) / Inbox"
+ << "S: * LSUB ( ) / Inbox/Calendar/3196"
+ << "S: * LSUB ( \\HasChildren ) / Inbox/Calendar/ff"
+ << "S: * LSUB ( ) / Inbox/Calendar/ff/hgh"
+ << "S: * LSUB ( ) / user/test2/Calendar"
+ << "S: A000001 OK LSUB completed";
+ listresult.clear();
+
+ descriptor.separator = '/';
+ descriptor.name = "INBOX";
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = "INBOX/Calendar/3196";
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = "INBOX/Calendar/ff";
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = "INBOX/Calendar/ff/hgh";
+ listresult << descriptor;
+ descriptor.separator = '/';
+ descriptor.name = "user/test2/Calendar";
+ listresult << descriptor;
+
+ QTest::newRow( "subscribed, lowercase Inbox" ) << false << scenario << listresult;
+
+ scenario.clear();
+ scenario << FakeServer::preauth()
+ << "C: A000001 LIST \"\" *"
+ << "S: * LIST ( \\HasNoChildren ) / INBOX/lost+found/Calendar Public-20080128"
+ << "S: A000001 OK LIST completed";
+ listresult.clear();
+ descriptor.separator = '/';
+ descriptor.name = "INBOX/lost+found/Calendar Public-20080128";
+ listresult << descriptor;
+
+ QTest::newRow( "unquoted-space" ) << true << scenario << listresult;
+
+ scenario.clear();
+ scenario << FakeServer::preauth()
+ << "C: A000001 LIST \"\" *"
+ << "S: * LIST ( \\NoInferiors ) ( ) INBOX"
+ << "S: A000001 OK LIST completed";
+ listresult.clear();
+ descriptor.separator = '/';
+ descriptor.name = "INBOX";
+ listresult << descriptor;
+
+ QTest::newRow( "separator is empty list" ) << true << scenario << listresult;
+
+ scenario.clear();
+ scenario << FakeServer::preauth()
+ << "C: A000001 LIST \"\" *"
+ << "S: A000001 BAD command unknown or arguments invalid";
+ listresult.clear();
+ QTest::newRow( "bad" ) << true << scenario << listresult;
+
+ scenario.clear();
+ scenario << FakeServer::preauth()
+ << "C: A000001 LIST \"\" *"
+ << "S: A000001 NO list failure";
+ QTest::newRow( "no" ) << true << scenario << listresult;
+}
+
+void testList()
+{
+ QFETCH( bool, unsubscribed);
+ QFETCH( QList<QByteArray>, scenario );
+ QFETCH( QList<KIMAP::MailBoxDescriptor>, listresult );
+
+ FakeServer fakeServer;
+ fakeServer.setScenario( scenario );
+ fakeServer.startAndWait();
+
+ KIMAP::Session session("127.0.0.1", 5989);
+
+ KIMAP::ListJob *job = new KIMAP::ListJob(&session);
+ job->setIncludeUnsubscribed(unsubscribed);
+
+ QSignalSpy spy( job,
+ SIGNAL(mailBoxesReceived(const QList<KIMAP::MailBoxDescriptor>&,
+ const QList< QList<QByteArray> >&)) );
+
+ bool result = job->exec();
+ QEXPECT_FAIL("bad" , "Expected failure on BAD response", Continue);
+ QEXPECT_FAIL("no" , "Expected failure on NO response", Continue);
+ QVERIFY(result);
+ if (result) {
+ QVERIFY( spy.count()>0 );
+ QList<KIMAP::MailBoxDescriptor> mailBoxes;
+
+ for ( int i=0; i<spy.count(); i++ ) {
+ mailBoxes+= spy.at( i ).at( 0 ).value< QList<KIMAP::MailBoxDescriptor> >();
+ }
+
+ //kDebug() << mailBoxes.first().name;
+ //kDebug() << listresult.first().name;
+ QCOMPARE(mailBoxes, listresult);
+ }
+// QCOMPARE(job->mailBox(), mailbox);
+
+ fakeServer.quit();
+}
+
+
+};
+
+QTEST_KDEMAIN_CORE( ListJobTest )
+
+#include "listjobtest.moc"