summaryrefslogtreecommitdiff
path: root/kimap/tests/idlejobtest.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/idlejobtest.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/idlejobtest.cpp')
-rw-r--r--kimap/tests/idlejobtest.cpp216
1 files changed, 216 insertions, 0 deletions
diff --git a/kimap/tests/idlejobtest.cpp b/kimap/tests/idlejobtest.cpp
new file mode 100644
index 0000000..0c35f49
--- /dev/null
+++ b/kimap/tests/idlejobtest.cpp
@@ -0,0 +1,216 @@
+/*
+ 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/selectjob.h"
+#include "kimap/idlejob.h"
+
+#include <QTcpSocket>
+#include <QtTest>
+#include <KDebug>
+
+Q_DECLARE_METATYPE(QList<int>)
+Q_DECLARE_METATYPE(KIMAP::IdleJob*)
+
+class IdleJobTest: public QObject {
+ Q_OBJECT
+
+public:
+explicit IdleJobTest( QObject *parent = 0 )
+ : QObject( parent )
+{
+ qRegisterMetaType<KIMAP::IdleJob*>();
+}
+
+private Q_SLOTS:
+void shouldReactToIdle_data()
+{
+ QTest::addColumn<QList<QByteArray> >( "scenario" );
+ QTest::addColumn<QString>( "expectedMailBox" );
+ QTest::addColumn< QList<int> >( "expectedMessageCounts" );
+ QTest::addColumn< QList<int> >( "expectedRecentCounts" );
+
+ QList<QByteArray> scenario;
+ QString expectedMailBox;
+ QList<int> expectedMessageCounts;
+ QList<int> expectedRecentCounts;
+
+
+ scenario.clear();
+ scenario << FakeServer::preauth()
+ << "C: A000001 SELECT \"INBOX/Foo\""
+ << "S: A000001 OK SELECT done"
+ << "C: A000002 IDLE"
+ << "S: + OK"
+ << "S: * 0 RECENT"
+ << "S: * 1 EXISTS"
+ << "S: * 1 RECENT"
+ << "S: * 2 EXISTS"
+ << "S: A000002 OK done idling";
+
+ expectedMailBox = "INBOX/Foo";
+
+ expectedMessageCounts.clear();
+ expectedRecentCounts.clear();
+
+ expectedMessageCounts << 1 << 2;
+ expectedRecentCounts << 0 << 1;
+
+ QTest::newRow( "normal" ) << scenario << expectedMailBox << expectedMessageCounts << expectedRecentCounts;
+
+
+ scenario.clear();
+ scenario << FakeServer::preauth()
+ << "C: A000001 SELECT \"INBOX/Foo\""
+ << "S: A000001 OK SELECT done"
+ << "C: A000002 IDLE"
+ << "S: + OK"
+ << "S: * 0 RECENT"
+ << "S: * 1 RECENT"
+ << "S: A000002 OK done idling";
+
+ expectedMailBox = "INBOX/Foo";
+
+ expectedMessageCounts.clear();
+ expectedRecentCounts.clear();
+
+ expectedMessageCounts << -1 << -1;
+ expectedRecentCounts << 0 << 1;
+
+ QTest::newRow( "only RECENT" ) << scenario << expectedMailBox << expectedMessageCounts << expectedRecentCounts;
+
+
+ scenario.clear();
+ scenario << FakeServer::preauth()
+ << "C: A000001 SELECT \"INBOX/Foo\""
+ << "S: A000001 OK SELECT done"
+ << "C: A000002 IDLE"
+ << "S: + OK"
+ << "S: * 1 EXISTS"
+ << "S: * 2 EXISTS"
+ << "S: A000002 OK done idling";
+
+ expectedMailBox = "INBOX/Foo";
+
+ expectedMessageCounts.clear();
+ expectedRecentCounts.clear();
+
+ expectedMessageCounts << 1 << 2;
+ expectedRecentCounts << -1 << -1;
+
+ QTest::newRow( "only EXISTS" ) << scenario << expectedMailBox << expectedMessageCounts << expectedRecentCounts;
+
+
+ scenario.clear();
+ scenario << FakeServer::preauth()
+ << "C: A000001 SELECT \"INBOX/Foo\""
+ << "S: A000001 OK SELECT done"
+ << "C: A000002 IDLE"
+ << "S: + OK"
+ << "S: * 2 EXISTS"
+ << "W: 150"
+ << "S: * 1 RECENT"
+ << "S: A000002 OK done idling";
+
+ expectedMailBox = "INBOX/Foo";
+
+ expectedMessageCounts.clear();
+ expectedRecentCounts.clear();
+
+ expectedMessageCounts << 2;
+ expectedRecentCounts << 1;
+
+ QTest::newRow( "under 200ms, same notification" ) << scenario << expectedMailBox << expectedMessageCounts << expectedRecentCounts;
+
+
+ scenario.clear();
+ scenario << FakeServer::preauth()
+ << "C: A000001 SELECT \"INBOX/Foo\""
+ << "S: A000001 OK SELECT done"
+ << "C: A000002 IDLE"
+ << "S: + OK"
+ << "S: * 2 EXISTS"
+ << "W: 250"
+ << "S: * 1 RECENT"
+ << "S: A000002 OK done idling";
+
+ expectedMailBox = "INBOX/Foo";
+
+ expectedMessageCounts.clear();
+ expectedRecentCounts.clear();
+
+ expectedMessageCounts << 2 << -1;
+ expectedRecentCounts << -1 << 1;
+
+ QTest::newRow( "above 200ms, two notifications" ) << scenario << expectedMailBox << expectedMessageCounts << expectedRecentCounts;
+}
+
+void shouldReactToIdle()
+{
+ QFETCH( QList<QByteArray>, scenario );
+ QFETCH( QString, expectedMailBox );
+ QFETCH( QList<int>, expectedMessageCounts );
+ QFETCH( QList<int>, expectedRecentCounts );
+
+ QVERIFY( expectedMessageCounts.size() == expectedRecentCounts.size() );
+
+ FakeServer fakeServer;
+ fakeServer.setScenario( scenario );
+ fakeServer.startAndWait();
+
+ KIMAP::Session session( "127.0.0.1", 5989 );
+
+ KIMAP::SelectJob *select = new KIMAP::SelectJob( &session );
+ select->setMailBox( expectedMailBox );
+ QVERIFY( select->exec() );
+
+ KIMAP::IdleJob *idle = new KIMAP::IdleJob( &session );
+
+ QSignalSpy spy( idle, SIGNAL(mailBoxStats(KIMAP::IdleJob*,QString,int,int)) );
+
+ bool result = idle->exec();
+
+ if ( result ) {
+ QCOMPARE( spy.count(), expectedMessageCounts.size() );
+
+ for ( int i=0; i<spy.count(); i++ ) {
+ const KIMAP::IdleJob *job = spy.at( i ).at( 0 ).value<KIMAP::IdleJob*>();
+ const QString mailBox = spy.at( i ).at( 1 ).toString();
+ const int messageCount = spy.at( i ).at( 2 ).toInt();
+ const int recentCount = spy.at( i ).at( 3 ).toInt();
+
+ QCOMPARE( job, idle );
+ QCOMPARE( mailBox, expectedMailBox );
+ QCOMPARE( messageCount, expectedMessageCounts.at( i ) );
+ QCOMPARE( recentCount, expectedRecentCounts.at( i ) );
+ }
+ }
+
+ fakeServer.quit();
+}
+
+
+};
+
+QTEST_KDEMAIN_CORE( IdleJobTest )
+
+#include "idlejobtest.moc"