qtmobility/tests/auto/qmessagestorekeys/tst_qmessagestorekeys.cpp
changeset 1 2b40d63a9c3d
child 4 90517678cc4f
equal deleted inserted replaced
0:cfcbf08528c4 1:2b40d63a9c3d
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the Qt Mobility Components.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 #include <QObject>
       
    42 #include <QTest>
       
    43 #include <QDebug>
       
    44 
       
    45 #include "qtmessaging.h"
       
    46 #include "../support/support.h"
       
    47 
       
    48 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN) && defined(_WIN32_WCE))
       
    49 # if defined(TESTDATA_DIR)
       
    50 #  undef TESTDATA_DIR
       
    51 # endif
       
    52 # define TESTDATA_DIR "."
       
    53 #endif
       
    54 
       
    55 //TESTED_CLASS=
       
    56 //TESTED_FILES=
       
    57 
       
    58 QTM_USE_NAMESPACE
       
    59 
       
    60 /*
       
    61     Unit test for classes implementing query keys for the QMessageStore class.
       
    62 */
       
    63 class tst_QMessageStoreKeys : public QObject
       
    64 {
       
    65     Q_OBJECT
       
    66 
       
    67 public:
       
    68     tst_QMessageStoreKeys();
       
    69     virtual ~tst_QMessageStoreKeys();
       
    70 
       
    71 private slots:
       
    72     void init();
       
    73     void initTestCase();
       
    74     void cleanup();
       
    75     void cleanupTestCase();
       
    76 
       
    77     void testAccountFilter_data();
       
    78     void testAccountFilter();
       
    79 
       
    80     void testAccountOrdering_data();
       
    81     void testAccountOrdering();
       
    82 
       
    83     void testFolderFilter_data();
       
    84     void testFolderFilter();
       
    85 
       
    86     void testFolderOrdering_data();
       
    87     void testFolderOrdering();
       
    88 
       
    89     void testMessageFilter_data();
       
    90     void testMessageFilter();
       
    91 
       
    92     void testMessageOrdering_data();
       
    93     void testMessageOrdering();
       
    94 
       
    95 private:
       
    96     QSet<QMessageAccountId> existingAccountIds;
       
    97     QMessageAccountIdList accountIds;
       
    98 
       
    99     QSet<QMessageFolderId> existingFolderIds;
       
   100     QMessageFolderIdList folderIds;
       
   101 
       
   102     QSet<QMessageId> existingMessageIds;
       
   103     QMessageFilter existingAccountsFilter;
       
   104     QMessageIdList messageIds;
       
   105 
       
   106     QList<int> messageSizes;
       
   107 
       
   108     QMessageManager *manager;
       
   109 };
       
   110 
       
   111 Q_DECLARE_METATYPE(QMessageAccountIdList)
       
   112 Q_DECLARE_METATYPE(QMessageAccountFilter)
       
   113 Q_DECLARE_METATYPE(QMessageAccountSortOrder)
       
   114 
       
   115 Q_DECLARE_METATYPE(QMessageFolderIdList)
       
   116 Q_DECLARE_METATYPE(QMessageFolderFilter)
       
   117 Q_DECLARE_METATYPE(QMessageFolderSortOrder)
       
   118 
       
   119 typedef QList<QMessageFolderSortOrder> FolderSortList;
       
   120 Q_DECLARE_METATYPE(FolderSortList)
       
   121 
       
   122 Q_DECLARE_METATYPE(QMessageIdList)
       
   123 Q_DECLARE_METATYPE(QMessageFilter)
       
   124 Q_DECLARE_METATYPE(QMessageSortOrder)
       
   125 
       
   126 typedef QList<QMessageSortOrder> MessageSortList;
       
   127 Q_DECLARE_METATYPE(MessageSortList)
       
   128 
       
   129 typedef QList<QMessageIdList> MessageListList;
       
   130 Q_DECLARE_METATYPE(MessageListList)
       
   131 
       
   132 QDebug &operator<<(QDebug &dbg, const QMessageAccountId &id)
       
   133 {
       
   134     return dbg << id.toString();
       
   135 }
       
   136 
       
   137 QDebug &operator<<(QDebug &dbg, const QMessageFolderId &id)
       
   138 {
       
   139     return dbg << id.toString();
       
   140 }
       
   141 
       
   142 QDebug &operator<<(QDebug &dbg, const QMessageId &id)
       
   143 {
       
   144     return dbg << id.toString();
       
   145 }
       
   146 
       
   147 QTEST_MAIN(tst_QMessageStoreKeys)
       
   148 
       
   149 #include "tst_qmessagestorekeys.moc"
       
   150 
       
   151 tst_QMessageStoreKeys::tst_QMessageStoreKeys()
       
   152     : manager(0)
       
   153 {
       
   154 }
       
   155 
       
   156 tst_QMessageStoreKeys::~tst_QMessageStoreKeys()
       
   157 {
       
   158     delete manager;
       
   159 }
       
   160 
       
   161 class Params
       
   162 {
       
   163     QMap<const char*, const char*> _map;
       
   164 
       
   165 public:
       
   166     Params() {}
       
   167 
       
   168     Params& operator()(const char* name, const char* value)
       
   169     {
       
   170         _map.insert(name, value); return *this; 
       
   171     }
       
   172 
       
   173     operator Support::Parameters() const
       
   174     {
       
   175         Support::Parameters result;
       
   176         QMap<const char*, const char*>::const_iterator it = _map.begin(), end = _map.end();
       
   177         for ( ; it != end; ++it) {
       
   178             result.insert(it.key(), it.value());
       
   179         }
       
   180         return result;
       
   181     }
       
   182 };
       
   183 
       
   184 void tst_QMessageStoreKeys::init()
       
   185 {
       
   186 }
       
   187 
       
   188 void tst_QMessageStoreKeys::initTestCase()
       
   189 {
       
   190 #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
       
   191     if (!Support::mapiAvailable())
       
   192         QSKIP("Skipping tests because a MAPI subsystem does not appear to be available", SkipAll);
       
   193 #endif
       
   194 
       
   195     // Clear any existing data before we instantiate the message manager
       
   196     Support::clearMessageStore();
       
   197 
       
   198     manager = new QMessageManager;
       
   199 
       
   200     existingAccountIds = manager->queryAccounts().toSet();
       
   201     existingAccountsFilter = ~QMessageFilter();
       
   202     foreach(QMessageAccountId id, existingAccountIds) {
       
   203         existingAccountsFilter |= QMessageFilter::byParentAccountId(id);
       
   204     }
       
   205 
       
   206     QList<Support::Parameters> accountParams;
       
   207 
       
   208     accountParams << Params()("name", "Work")
       
   209                              ("fromAddress", "Important.Person@example.com")
       
   210                   << Params()("name", "Personal")
       
   211                              ("fromAddress", "superstar2000@example.net")
       
   212                   << Params()("name", "Alter Ego")
       
   213                              ("fromAddress", "UltraMegaLightningBabe@superhero.test");
       
   214 
       
   215     foreach (const Support::Parameters &params, accountParams) {
       
   216         accountIds.append(Support::addAccount(params));
       
   217         QVERIFY(accountIds.last().isValid());
       
   218     }
       
   219 
       
   220     existingFolderIds = manager->queryFolders().toSet();
       
   221 
       
   222     QList<Support::Parameters> folderParams;
       
   223     folderParams << Params()("parentAccountName", "Alter Ego")
       
   224                             ("path", "My messages")
       
   225                             ("name", "My messages")
       
   226                             ("parentFolderPath", "")
       
   227                  << Params()("parentAccountName", "Work")
       
   228                             ("path", "Innbox")
       
   229                             ("name", "Innbox")
       
   230                             ("parentFolderPath", "")
       
   231 #ifndef Q_OS_SYMBIAN
       
   232                  << Params()("parentAccountName", "Work")
       
   233                             ("path", "Innbox/X-Announce")
       
   234                             ("name", "X-Announce")
       
   235                             ("parentFolderPath", "Innbox")
       
   236                  << Params()("parentAccountName", "Work")
       
   237                             ("path", "Innbox/X-Announce/X-Archived")
       
   238                             ("name", "X-Archived")
       
   239                             ("parentFolderPath", "Innbox/X-Announce");
       
   240 #else    
       
   241                  << Params()("parentAccountName", "Work")
       
   242                             ("path", "X-Announce")
       
   243                             ("name", "X-Announce")
       
   244                             ("parentFolderPath", "")
       
   245                  << Params()("parentAccountName", "Work")
       
   246                             ("path", "X-Archived")
       
   247                             ("name", "X-Archived")
       
   248                             ("parentFolderPath", "");
       
   249 #endif    
       
   250 
       
   251     foreach (const Support::Parameters &params, folderParams) {
       
   252         folderIds.append(Support::addFolder(params));
       
   253         QVERIFY(folderIds.last().isValid());
       
   254     }
       
   255 
       
   256     existingMessageIds = manager->queryMessages(~existingAccountsFilter).toSet();
       
   257 
       
   258     // For windows at least, we can't have HasAttachments set without a real attachment
       
   259 #ifndef Q_OS_SYMBIAN
       
   260     const char *attachmentPaths = TESTDATA_DIR "/testdata/1.txt";
       
   261 #else
       
   262     const char *attachmentPaths = TESTDATA_DIR "\\testdata\\1.txt";
       
   263 #endif
       
   264 
       
   265     QList<Support::Parameters> messageParams;
       
   266     messageParams << Params()("parentAccountName", "Alter Ego")
       
   267                              ("parentFolderPath", "My messages")
       
   268 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN)) // SMS messages must be in SMS store on Windows and on Symbian
       
   269                              ("type", "email")
       
   270 #else
       
   271                              ("type", "sms")
       
   272 #endif
       
   273                              ("to", "SuperMegaLightningBabe")
       
   274                              ("from", "Frozone")
       
   275                              ("subject", "Ice to meet you")
       
   276                              ("text", "Shall I compare thee to a summers day")
       
   277                              ("date", "2000-01-01T12:00:00Z")
       
   278                              ("receivedDate", "2000-01-01T12:01:00Z")
       
   279                              ("priority", "")
       
   280                              ("size", "160")
       
   281                              ("status-read", "true")
       
   282                              ("custom-flagged", "true")
       
   283                   << Params()("parentAccountName", "Work")
       
   284                              ("parentFolderPath", "Innbox")
       
   285                              ("type", "email")
       
   286                              ("to", "Important.Person@example.com")
       
   287                              ("from", "Esteemed.Colleague@example.com")
       
   288                              ("subject", "Meeting agenda")
       
   289                              ("date", "2000-01-01T12:00:00Z")
       
   290                              ("receivedDate", "2000-01-01T20:00:00Z")
       
   291                              ("priority", "High")
       
   292                              ("size", "10240")
       
   293                              ("status-hasAttachments", "true")
       
   294                              ("attachments", attachmentPaths)
       
   295                              ("custom-spam", "filter:no")
       
   296                              ("custom-flagged", "true")
       
   297                   << Params()("parentAccountName", "Work")
       
   298                              ("parentFolderPath", "Innbox")
       
   299                              ("type", "email")
       
   300                              ("to", "Important.Person@example.com,Minion@example.com")
       
   301                              ("from", "Big.Boss@example.com")
       
   302                              ("subject", "Motivational message")
       
   303                              ("text", "School's out for summer")
       
   304                              ("date", "2000-01-01T13:00:00Z")
       
   305                              ("receivedDate", "2000-01-01T13:05:00Z")
       
   306                              ("priority", "High")
       
   307                              ("size", "20480")
       
   308                              ("status-hasAttachments", "true")
       
   309                              ("attachments", attachmentPaths)
       
   310                              ("custom-spam", "filter:no")
       
   311 #ifndef Q_OS_SYMBIAN                             
       
   312                   << Params()("parentAccountName", "Work")
       
   313                              ("parentFolderPath", "Innbox/X-Announce")
       
   314                              ("type", "email")
       
   315                              ("to", "announce@example.com,maintenance-log@example.com")
       
   316                              ("from", "sysadmin@example.com")
       
   317                              ("subject", "Scheduled maintenance")
       
   318                              ("date", "2000-01-01T13:00:00Z")
       
   319                              ("receivedDate", "2000-01-01T13:00:01Z")
       
   320                              ("priority", "")
       
   321                              ("size", "1056")
       
   322                              ("status-read", "true")
       
   323                              ("custom-spam", "filter:maybe")
       
   324                   << Params()("parentAccountName", "Work")
       
   325                              ("parentFolderPath", "Innbox/X-Announce/X-Archived")
       
   326                              ("type", "email")
       
   327                              ("to", "announce@example.com")
       
   328                              ("from", "Big.Boss@example.com")
       
   329                              ("subject", "Free beer")
       
   330                              ("date", "1999-04-01T10:30:00Z")
       
   331                              ("receivedDate", "1999-04-01T10:31:00Z")
       
   332                              ("priority", "Low")
       
   333                              ("size", "4096")
       
   334                              ("status-read", "true")
       
   335                              ("status-hasAttachments", "true")
       
   336                              ("attachments", attachmentPaths)
       
   337                              ("custom-spam", "filter:yes");
       
   338 #else
       
   339                   << Params()("parentAccountName", "Work")
       
   340                              ("parentFolderPath", "X-Announce")
       
   341                              ("type", "email")
       
   342                              ("to", "announce@example.com,maintenance-log@example.com")
       
   343                              ("from", "sysadmin@example.com")
       
   344                              ("subject", "Scheduled maintenance")
       
   345                              ("date", "2000-01-01T13:00:00Z")
       
   346                              ("receivedDate", "2000-01-01T13:00:01Z")
       
   347                              ("priority", "")
       
   348                              ("size", "1056")
       
   349                              ("status-read", "true")
       
   350                              ("custom-spam", "filter:maybe")
       
   351                   << Params()("parentAccountName", "Work")
       
   352                              ("parentFolderPath", "X-Archived")
       
   353                              ("type", "email")
       
   354                              ("to", "announce@example.com")
       
   355                              ("from", "Big.Boss@example.com")
       
   356                              ("subject", "Free beer")
       
   357                              ("date", "1999-04-01T10:30:00Z")
       
   358                              ("receivedDate", "1999-04-01T10:31:00Z")
       
   359                              ("priority", "Low")
       
   360                              ("size", "4096")
       
   361                              ("status-read", "true")
       
   362                              ("status-hasAttachments", "true")
       
   363                              ("attachments", attachmentPaths)
       
   364                              ("custom-spam", "filter:yes");
       
   365 #endif
       
   366 
       
   367     foreach (const Support::Parameters &params, messageParams) {
       
   368         messageIds.append(Support::addMessage(params));
       
   369         QVERIFY(messageIds.last().isValid());
       
   370 
       
   371         // Use the resultant message sizes in testing - the configured sizes aren't honoured by MAPI
       
   372         QMessage m(messageIds.last());
       
   373         messageSizes.append(m.size());
       
   374     }
       
   375 }
       
   376 
       
   377 void tst_QMessageStoreKeys::cleanup()
       
   378 {
       
   379 }
       
   380 
       
   381 void tst_QMessageStoreKeys::cleanupTestCase()
       
   382 {
       
   383 }
       
   384 
       
   385 void tst_QMessageStoreKeys::testAccountFilter_data()
       
   386 {
       
   387     QTest::addColumn<QMessageAccountFilter>("filter");
       
   388     QTest::addColumn<QMessageAccountIdList>("ids");
       
   389     QTest::addColumn<QMessageAccountIdList>("negatedIds");
       
   390 
       
   391     QTest::newRow("empty filter")
       
   392         << QMessageAccountFilter() 
       
   393         << accountIds
       
   394         << QMessageAccountIdList();
       
   395 
       
   396     QTest::newRow("id equality 1")
       
   397         << QMessageAccountFilter::byId(accountIds[0], QMessageDataComparator::Equal) 
       
   398         << ( QMessageAccountIdList() << accountIds[0] )
       
   399         << ( QMessageAccountIdList() << accountIds[1] << accountIds[2] );
       
   400 
       
   401     QTest::newRow("id equality 2")
       
   402         << QMessageAccountFilter::byId(accountIds[1], QMessageDataComparator::Equal) 
       
   403         << ( QMessageAccountIdList() << accountIds[1] )
       
   404         << ( QMessageAccountIdList() << accountIds[0] << accountIds[2] );
       
   405 
       
   406     QTest::newRow("id equality invalid")
       
   407         << QMessageAccountFilter::byId(QMessageAccountId(), QMessageDataComparator::Equal) 
       
   408         << QMessageAccountIdList()
       
   409         << accountIds;
       
   410 
       
   411     QTest::newRow("id inequality 1")
       
   412         << QMessageAccountFilter::byId(accountIds[0], QMessageDataComparator::NotEqual) 
       
   413         << ( QMessageAccountIdList() << accountIds[1] << accountIds[2] )
       
   414         << ( QMessageAccountIdList() << accountIds[0] );
       
   415 
       
   416     QTest::newRow("id inequality 2")
       
   417         << QMessageAccountFilter::byId(accountIds[1], QMessageDataComparator::NotEqual) 
       
   418         << ( QMessageAccountIdList() << accountIds[0] << accountIds[2] )
       
   419         << ( QMessageAccountIdList() << accountIds[1] );
       
   420 
       
   421     QTest::newRow("id inequality invalid")
       
   422         << QMessageAccountFilter::byId(QMessageAccountId(), QMessageDataComparator::NotEqual) 
       
   423         << accountIds
       
   424         << QMessageAccountIdList();
       
   425 
       
   426     QTest::newRow("id list inclusion 1")
       
   427         << QMessageAccountFilter::byId(QMessageAccountIdList() << accountIds[0], QMessageDataComparator::Includes) 
       
   428         << ( QMessageAccountIdList() << accountIds[0] )
       
   429         << ( QMessageAccountIdList() << accountIds[1] << accountIds[2] );
       
   430 
       
   431     QTest::newRow("id list inclusion 2")
       
   432         << QMessageAccountFilter::byId(QMessageAccountIdList() << accountIds[1], QMessageDataComparator::Includes) 
       
   433         << ( QMessageAccountIdList() << accountIds[1] )
       
   434         << ( QMessageAccountIdList() << accountIds[0] << accountIds[2] );
       
   435 
       
   436     QTest::newRow("id list inclusion 3")
       
   437         << QMessageAccountFilter::byId(QMessageAccountIdList() << accountIds[0] << accountIds[1], QMessageDataComparator::Includes) 
       
   438         << ( QMessageAccountIdList() << accountIds[0] << accountIds[1] )
       
   439         << ( QMessageAccountIdList() << accountIds[2] );
       
   440 
       
   441     QTest::newRow("id list inclusion empty")
       
   442         << QMessageAccountFilter::byId(QMessageAccountIdList(), QMessageDataComparator::Includes) 
       
   443         << QMessageAccountIdList()
       
   444         << accountIds;
       
   445 
       
   446     QTest::newRow("id list exclusion 1")
       
   447         << QMessageAccountFilter::byId(QMessageAccountIdList() << accountIds[0], QMessageDataComparator::Excludes) 
       
   448         << ( QMessageAccountIdList() << accountIds[1] << accountIds[2] )
       
   449         << ( QMessageAccountIdList() << accountIds[0] );
       
   450 
       
   451     QTest::newRow("id list exclusion 2")
       
   452         << QMessageAccountFilter::byId(QMessageAccountIdList() << accountIds[1], QMessageDataComparator::Excludes) 
       
   453         << ( QMessageAccountIdList() << accountIds[0] << accountIds[2] )
       
   454         << ( QMessageAccountIdList() << accountIds[1] );
       
   455 
       
   456     QTest::newRow("id list exclusion 3")
       
   457         << QMessageAccountFilter::byId(QMessageAccountIdList() << accountIds[0] << accountIds[1], QMessageDataComparator::Excludes) 
       
   458         << ( QMessageAccountIdList() << accountIds[2] )
       
   459         << ( QMessageAccountIdList() << accountIds[0] << accountIds[1] );
       
   460 
       
   461     QTest::newRow("id list exclusion empty")
       
   462         << QMessageAccountFilter::byId(QMessageAccountIdList(), QMessageDataComparator::Excludes) 
       
   463         << accountIds
       
   464         << QMessageAccountIdList();
       
   465 
       
   466     QTest::newRow("id filter inclusion 1")
       
   467         << QMessageAccountFilter::byId(QMessageAccountFilter::byName("Work", QMessageDataComparator::Equal), QMessageDataComparator::Includes) 
       
   468         << ( QMessageAccountIdList() << accountIds[0] )
       
   469         << ( QMessageAccountIdList() << accountIds[1] << accountIds[2] );
       
   470 
       
   471     QTest::newRow("id filter inclusion 2")
       
   472         << QMessageAccountFilter::byId(QMessageAccountFilter::byName("Personal", QMessageDataComparator::Equal), QMessageDataComparator::Includes) 
       
   473         << ( QMessageAccountIdList() << accountIds[1] )
       
   474         << ( QMessageAccountIdList() << accountIds[0] << accountIds[2] );
       
   475 
       
   476     QTest::newRow("id filter inclusion 3")
       
   477         << QMessageAccountFilter::byId(QMessageAccountFilter::byName("o", QMessageDataComparator::Includes), QMessageDataComparator::Includes) 
       
   478         << accountIds
       
   479         << QMessageAccountIdList();
       
   480 
       
   481     QTest::newRow("id filter inclusion empty")
       
   482         << QMessageAccountFilter::byId(QMessageAccountFilter(), QMessageDataComparator::Includes) 
       
   483         << accountIds
       
   484         << QMessageAccountIdList();
       
   485 
       
   486     QTest::newRow("id filter inclusion non-matching")
       
   487         << QMessageAccountFilter::byId(QMessageAccountFilter::byName("NoneSuch"), QMessageDataComparator::Includes) 
       
   488         << QMessageAccountIdList()
       
   489         << accountIds;
       
   490 
       
   491     QTest::newRow("id filter exclusion 1")
       
   492         << QMessageAccountFilter::byId(QMessageAccountFilter::byName("Work", QMessageDataComparator::Equal), QMessageDataComparator::Excludes) 
       
   493         << ( QMessageAccountIdList() << accountIds[1] << accountIds[2] )
       
   494         << ( QMessageAccountIdList() << accountIds[0] );
       
   495 
       
   496     QTest::newRow("id filter exclusion 2")
       
   497         << QMessageAccountFilter::byId(QMessageAccountFilter::byName("Personal", QMessageDataComparator::Equal), QMessageDataComparator::Excludes) 
       
   498         << ( QMessageAccountIdList() << accountIds[0] << accountIds[2] )
       
   499         << ( QMessageAccountIdList() << accountIds[1] );
       
   500 
       
   501     QTest::newRow("id filter exclusion 3")
       
   502         << QMessageAccountFilter::byId(QMessageAccountFilter::byName("o", QMessageDataComparator::Includes), QMessageDataComparator::Excludes) 
       
   503         << QMessageAccountIdList()
       
   504         << accountIds;
       
   505 
       
   506     QTest::newRow("id filter exclusion empty")
       
   507         << QMessageAccountFilter::byId(QMessageAccountFilter(), QMessageDataComparator::Excludes) 
       
   508         << QMessageAccountIdList()
       
   509         << accountIds;
       
   510 
       
   511     QTest::newRow("id filter exclusion non-matching")
       
   512         << QMessageAccountFilter::byId(QMessageAccountFilter::byName("NoneSuch"), QMessageDataComparator::Excludes) 
       
   513         << accountIds
       
   514         << QMessageAccountIdList();
       
   515 
       
   516     QTest::newRow("name equality 1")
       
   517         << QMessageAccountFilter::byName("Work", QMessageDataComparator::Equal) 
       
   518         << ( QMessageAccountIdList() << accountIds[0] )
       
   519         << ( QMessageAccountIdList() << accountIds[1] << accountIds[2] );
       
   520 
       
   521     QTest::newRow("name equality 2")
       
   522         << QMessageAccountFilter::byName("Personal", QMessageDataComparator::Equal) 
       
   523         << ( QMessageAccountIdList() << accountIds[1] )
       
   524         << ( QMessageAccountIdList() << accountIds[0] << accountIds[2] );
       
   525 
       
   526     QTest::newRow("name equality non-matching")
       
   527         << QMessageAccountFilter::byName("Nonesuch", QMessageDataComparator::Equal) 
       
   528         << QMessageAccountIdList()
       
   529         << accountIds;
       
   530 
       
   531     QTest::newRow("name equality empty")
       
   532         << QMessageAccountFilter::byName(QString(), QMessageDataComparator::Equal) 
       
   533         << QMessageAccountIdList()
       
   534         << accountIds;
       
   535 
       
   536     QTest::newRow("name equality zero-length")
       
   537         << QMessageAccountFilter::byName("", QMessageDataComparator::Equal) 
       
   538         << QMessageAccountIdList()
       
   539         << accountIds;
       
   540 
       
   541     QTest::newRow("name inequality 1")
       
   542         << QMessageAccountFilter::byName("Work", QMessageDataComparator::NotEqual) 
       
   543         << ( QMessageAccountIdList() << accountIds[1] << accountIds[2] )
       
   544         << ( QMessageAccountIdList() << accountIds[0] );
       
   545 
       
   546     QTest::newRow("name inequality 2")
       
   547         << QMessageAccountFilter::byName("Personal", QMessageDataComparator::NotEqual) 
       
   548         << ( QMessageAccountIdList() << accountIds[0] << accountIds[2] )
       
   549         << ( QMessageAccountIdList() << accountIds[1] );
       
   550 
       
   551     QTest::newRow("name inequality non-matching")
       
   552         << QMessageAccountFilter::byName("Nonesuch", QMessageDataComparator::NotEqual) 
       
   553         << accountIds
       
   554         << QMessageAccountIdList();
       
   555 
       
   556     QTest::newRow("name inequality empty")
       
   557         << QMessageAccountFilter::byName(QString(), QMessageDataComparator::NotEqual) 
       
   558         << accountIds
       
   559         << QMessageAccountIdList();
       
   560 
       
   561     QTest::newRow("name inequality zero-length")
       
   562         << QMessageAccountFilter::byName("", QMessageDataComparator::NotEqual) 
       
   563         << accountIds
       
   564         << QMessageAccountIdList();
       
   565 
       
   566     QTest::newRow("name inclusion 1")
       
   567         << QMessageAccountFilter::byName("ork", QMessageDataComparator::Includes) 
       
   568         << ( QMessageAccountIdList() << accountIds[0] )
       
   569         << ( QMessageAccountIdList() << accountIds[1] << accountIds[2] );
       
   570 
       
   571     QTest::newRow("name inclusion 2")
       
   572         << QMessageAccountFilter::byName("o", QMessageDataComparator::Includes) 
       
   573         << accountIds
       
   574         << QMessageAccountIdList();
       
   575 
       
   576     QTest::newRow("name inclusion non-matching")
       
   577         << QMessageAccountFilter::byName("Nonesuch", QMessageDataComparator::Includes) 
       
   578         << QMessageAccountIdList()
       
   579         << accountIds;
       
   580 
       
   581     QTest::newRow("name inclusion empty")
       
   582         << QMessageAccountFilter::byName(QString(), QMessageDataComparator::Includes) 
       
   583         << accountIds
       
   584         << QMessageAccountIdList();
       
   585 
       
   586     QTest::newRow("name inclusion zero-length")
       
   587         << QMessageAccountFilter::byName("", QMessageDataComparator::Includes) 
       
   588         << accountIds
       
   589         << QMessageAccountIdList();
       
   590 
       
   591     QTest::newRow("name exclusion 1")
       
   592         << QMessageAccountFilter::byName("ork", QMessageDataComparator::Excludes) 
       
   593         << ( QMessageAccountIdList() << accountIds[1] << accountIds[2] )
       
   594         << ( QMessageAccountIdList() << accountIds[0] );
       
   595 
       
   596     QTest::newRow("name exclusion 2")
       
   597         << QMessageAccountFilter::byName("o", QMessageDataComparator::Excludes) 
       
   598         << QMessageAccountIdList()
       
   599         << accountIds;
       
   600 
       
   601     QTest::newRow("name exclusion non-matching")
       
   602         << QMessageAccountFilter::byName("Nonesuch", QMessageDataComparator::Excludes) 
       
   603         << accountIds
       
   604         << QMessageAccountIdList();
       
   605 
       
   606     QTest::newRow("name exclusion empty")
       
   607         << QMessageAccountFilter::byName(QString(), QMessageDataComparator::Excludes) 
       
   608         << QMessageAccountIdList()
       
   609         << accountIds;
       
   610 
       
   611     QTest::newRow("name exclusion zero-length")
       
   612         << QMessageAccountFilter::byName("", QMessageDataComparator::Excludes) 
       
   613         << QMessageAccountIdList()
       
   614         << accountIds;
       
   615 
       
   616     // Test some basic combinations
       
   617     QTest::newRow("id inequality AND name equality")
       
   618         << ( QMessageAccountFilter::byId(accountIds[0], QMessageDataComparator::NotEqual) &
       
   619              QMessageAccountFilter::byName("Personal", QMessageDataComparator::Equal) )
       
   620         << ( QMessageAccountIdList() << accountIds[1] )
       
   621         << ( QMessageAccountIdList() << accountIds[0] << accountIds[2] );
       
   622 
       
   623     QTest::newRow("id equality OR name inequality")
       
   624         << ( QMessageAccountFilter::byId(accountIds[0], QMessageDataComparator::Equal) |
       
   625              QMessageAccountFilter::byName("Personal", QMessageDataComparator::NotEqual) )
       
   626         << ( QMessageAccountIdList() << accountIds[0] << accountIds[2] )
       
   627         << ( QMessageAccountIdList() << accountIds[1] );
       
   628 
       
   629     QMessageAccountFilter andEquals(QMessageAccountFilter::byId(accountIds[0], QMessageDataComparator::NotEqual));
       
   630     andEquals &= QMessageAccountFilter::byName("Personal", QMessageDataComparator::Equal);
       
   631     QTest::newRow("id inequality AND name equality")
       
   632         << andEquals
       
   633         << ( QMessageAccountIdList() << accountIds[1] )
       
   634         << ( QMessageAccountIdList() << accountIds[0] << accountIds[2] );
       
   635 
       
   636     QMessageAccountFilter orEquals(QMessageAccountFilter::byId(accountIds[0], QMessageDataComparator::Equal));
       
   637     orEquals |= QMessageAccountFilter::byName("Personal", QMessageDataComparator::NotEqual);
       
   638     QTest::newRow("id equality OR name inequality")
       
   639         << orEquals
       
   640         << ( QMessageAccountIdList() << accountIds[0] << accountIds[2] )
       
   641         << ( QMessageAccountIdList() << accountIds[1] );
       
   642 
       
   643     // Test matchFlags
       
   644     QMessageAccountFilter caseInsensitive1(QMessageAccountFilter::byName("work", QMessageDataComparator::Equal));
       
   645     QTest::newRow("matchFlags:caseInsensitive 1")
       
   646         << caseInsensitive1
       
   647         << ( QMessageAccountIdList() << accountIds[0] )
       
   648         << ( QMessageAccountIdList() << accountIds[1] << accountIds[2] );
       
   649 
       
   650     QMessageAccountFilter caseSensitive1(QMessageAccountFilter::byName("work", QMessageDataComparator::Equal));
       
   651     caseSensitive1.setMatchFlags(QMessageDataComparator::MatchCaseSensitive);
       
   652     QTest::newRow("matchFlags:caseSensitive 1")
       
   653         << caseSensitive1
       
   654         << QMessageAccountIdList()
       
   655         << accountIds;
       
   656 
       
   657     QMessageAccountFilter caseSensitive2(QMessageAccountFilter::byName("Work", QMessageDataComparator::Equal));
       
   658     caseSensitive2.setMatchFlags(QMessageDataComparator::MatchCaseSensitive);
       
   659     QTest::newRow("matchFlags:caseSensitive 2")
       
   660         << caseSensitive2
       
   661         << ( QMessageAccountIdList() << accountIds[0] )
       
   662         << ( QMessageAccountIdList() << accountIds[1] << accountIds[2] );
       
   663 }
       
   664 
       
   665 void tst_QMessageStoreKeys::testAccountFilter()
       
   666 {
       
   667     QFETCH(QMessageAccountFilter, filter);
       
   668     QFETCH(QMessageAccountIdList, ids);
       
   669     QFETCH(QMessageAccountIdList, negatedIds);
       
   670 
       
   671     if (filter.isSupported()) {
       
   672         QVERIFY(filter == filter);
       
   673         QCOMPARE(filter != QMessageAccountFilter(), !filter.isEmpty());
       
   674 
       
   675         // Order is irrelevant for filtering
       
   676         QCOMPARE(manager->queryAccounts(filter).toSet().subtract(existingAccountIds), ids.toSet());
       
   677         QCOMPARE(manager->queryAccounts(~filter).toSet().subtract(existingAccountIds), negatedIds.toSet());
       
   678     } else {
       
   679         QSKIP("Unsupported for this configuration", SkipSingle);
       
   680     }
       
   681 }
       
   682 
       
   683 void tst_QMessageStoreKeys::testAccountOrdering_data()
       
   684 {
       
   685     QTest::addColumn<QMessageAccountSortOrder>("sortOrder");
       
   686     QTest::addColumn<QMessageAccountIdList>("ids");
       
   687 
       
   688     QTest::newRow("name ascending")
       
   689         << QMessageAccountSortOrder::byName(Qt::AscendingOrder)
       
   690         << ( QMessageAccountIdList() << accountIds[2] << accountIds[1] << accountIds[0] );
       
   691 
       
   692     QTest::newRow("name descending")
       
   693         << QMessageAccountSortOrder::byName(Qt::DescendingOrder)
       
   694         << ( QMessageAccountIdList() << accountIds[0] << accountIds[1] << accountIds[2] );
       
   695 }
       
   696 
       
   697 void tst_QMessageStoreKeys::testAccountOrdering()
       
   698 {
       
   699     QFETCH(QMessageAccountSortOrder, sortOrder);
       
   700     QFETCH(QMessageAccountIdList, ids);
       
   701 
       
   702     if (sortOrder.isSupported()) {
       
   703         QVERIFY(sortOrder == sortOrder);
       
   704         QCOMPARE(sortOrder != QMessageAccountSortOrder(), !sortOrder.isEmpty());
       
   705 
       
   706         // Filter out the existing accounts
       
   707         QMessageAccountIdList sortedIds(manager->queryAccounts(QMessageAccountFilter(), sortOrder));
       
   708         for (QMessageAccountIdList::iterator it = sortedIds.begin(); it != sortedIds.end(); ) {
       
   709             if (existingAccountIds.contains(*it)) {
       
   710                 it = sortedIds.erase(it);
       
   711             } else {
       
   712                 ++it;
       
   713             }
       
   714         }
       
   715 
       
   716         QCOMPARE(sortedIds, ids);
       
   717     } else {
       
   718         QSKIP("Unsupported for this configuration", SkipSingle);
       
   719     }
       
   720 }
       
   721 
       
   722 void tst_QMessageStoreKeys::testFolderFilter_data()
       
   723 {
       
   724     QTest::addColumn<QMessageFolderFilter>("filter");
       
   725     QTest::addColumn<QMessageFolderIdList>("ids");
       
   726     QTest::addColumn<QMessageFolderIdList>("negatedIds");
       
   727 
       
   728     QTest::newRow("empty filter")
       
   729         << QMessageFolderFilter() 
       
   730         << folderIds
       
   731         << QMessageFolderIdList();
       
   732 
       
   733     QTest::newRow("id equality 1")
       
   734         << QMessageFolderFilter::byId(folderIds[0], QMessageDataComparator::Equal) 
       
   735         << ( QMessageFolderIdList() << folderIds[0] )
       
   736         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] );
       
   737 
       
   738     QTest::newRow("id equality 2")
       
   739         << QMessageFolderFilter::byId(folderIds[1], QMessageDataComparator::Equal) 
       
   740         << ( QMessageFolderIdList() << folderIds[1] )
       
   741         << ( QMessageFolderIdList() << folderIds[0] << folderIds[2] << folderIds[3] );
       
   742 
       
   743     QTest::newRow("id equality invalid")
       
   744         << QMessageFolderFilter::byId(QMessageFolderId(), QMessageDataComparator::Equal) 
       
   745         << QMessageFolderIdList()
       
   746         << folderIds;
       
   747 
       
   748     QTest::newRow("id inequality 1")
       
   749         << QMessageFolderFilter::byId(folderIds[0], QMessageDataComparator::NotEqual) 
       
   750         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] )
       
   751         << ( QMessageFolderIdList() << folderIds[0] );
       
   752 
       
   753     QTest::newRow("id inequality 2")
       
   754         << QMessageFolderFilter::byId(folderIds[1], QMessageDataComparator::NotEqual) 
       
   755         << ( QMessageFolderIdList() << folderIds[0] << folderIds[2] << folderIds[3] )
       
   756         << ( QMessageFolderIdList() << folderIds[1] );
       
   757 
       
   758     QTest::newRow("id inequality invalid")
       
   759         << QMessageFolderFilter::byId(QMessageFolderId(), QMessageDataComparator::NotEqual) 
       
   760         << folderIds
       
   761         << QMessageFolderIdList();
       
   762 
       
   763     QTest::newRow("id list inclusion 1")
       
   764         << QMessageFolderFilter::byId(QMessageFolderIdList() << folderIds[0], QMessageDataComparator::Includes) 
       
   765         << ( QMessageFolderIdList() << folderIds[0] )
       
   766         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] );
       
   767 
       
   768     QTest::newRow("id list inclusion 2")
       
   769         << QMessageFolderFilter::byId(QMessageFolderIdList() << folderIds[1], QMessageDataComparator::Includes) 
       
   770         << ( QMessageFolderIdList() << folderIds[1] )
       
   771         << ( QMessageFolderIdList() << folderIds[0] << folderIds[2] << folderIds[3] );
       
   772 
       
   773     QTest::newRow("id list inclusion 3")
       
   774         << QMessageFolderFilter::byId(QMessageFolderIdList() << folderIds[0] << folderIds[1], QMessageDataComparator::Includes) 
       
   775         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] )
       
   776         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] );
       
   777 
       
   778     QTest::newRow("id list inclusion empty")
       
   779         << QMessageFolderFilter::byId(QMessageFolderIdList(), QMessageDataComparator::Includes) 
       
   780         << QMessageFolderIdList()
       
   781         << folderIds;
       
   782 
       
   783     QTest::newRow("id list exclusion 1")
       
   784         << QMessageFolderFilter::byId(QMessageFolderIdList() << folderIds[0], QMessageDataComparator::Excludes) 
       
   785         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] )
       
   786         << ( QMessageFolderIdList() << folderIds[0] );
       
   787 
       
   788     QTest::newRow("id list exclusion 2")
       
   789         << QMessageFolderFilter::byId(QMessageFolderIdList() << folderIds[1], QMessageDataComparator::Excludes) 
       
   790         << ( QMessageFolderIdList() << folderIds[0] << folderIds[2] << folderIds[3] )
       
   791         << ( QMessageFolderIdList() << folderIds[1] );
       
   792 
       
   793     QTest::newRow("id list exclusion 3")
       
   794         << QMessageFolderFilter::byId(QMessageFolderIdList() << folderIds[0] << folderIds[1], QMessageDataComparator::Excludes) 
       
   795         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
   796         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
   797 
       
   798     QTest::newRow("id list exclusion empty")
       
   799         << QMessageFolderFilter::byId(QMessageFolderIdList(), QMessageDataComparator::Excludes) 
       
   800         << folderIds
       
   801         << QMessageFolderIdList();
       
   802 
       
   803     QTest::newRow("id filter inclusion 1")
       
   804         << QMessageFolderFilter::byId(QMessageFolderFilter::byPath("My messages", QMessageDataComparator::Equal), QMessageDataComparator::Includes)
       
   805         << ( QMessageFolderIdList() << folderIds[0] )
       
   806         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] );
       
   807 
       
   808 #ifndef Q_OS_SYMBIAN    
       
   809     QTest::newRow("id filter inclusion 2")
       
   810         << QMessageFolderFilter::byId(QMessageFolderFilter::byPath("Innbox/X-Announce", QMessageDataComparator::Equal), QMessageDataComparator::Includes)
       
   811         << ( QMessageFolderIdList() << folderIds[2] )
       
   812         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[3] );
       
   813 
       
   814     QTest::newRow("id filter inclusion 3")
       
   815         << QMessageFolderFilter::byId(QMessageFolderFilter::byPath("box/X-Ann", QMessageDataComparator::Includes), QMessageDataComparator::Includes)
       
   816         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
   817         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
   818 #endif    
       
   819 
       
   820     QTest::newRow("id filter inclusion empty")
       
   821         << QMessageFolderFilter::byId(QMessageFolderFilter(), QMessageDataComparator::Includes) 
       
   822         << folderIds
       
   823         << QMessageFolderIdList();
       
   824 
       
   825     QTest::newRow("id filter inclusion non-matching")
       
   826         << QMessageFolderFilter::byId(QMessageFolderFilter::byPath("NoneSuch"), QMessageDataComparator::Includes) 
       
   827         << QMessageFolderIdList()
       
   828         << folderIds;
       
   829 
       
   830     QTest::newRow("id filter exclusion 1")
       
   831         << QMessageFolderFilter::byId(QMessageFolderFilter::byPath("My messages", QMessageDataComparator::Equal), QMessageDataComparator::Excludes)
       
   832         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] )
       
   833         << ( QMessageFolderIdList() << folderIds[0] );
       
   834 
       
   835 #ifndef Q_OS_SYMBIAN    
       
   836     QTest::newRow("id filter exclusion 2")
       
   837         << QMessageFolderFilter::byId(QMessageFolderFilter::byPath("Innbox/X-Announce", QMessageDataComparator::Equal), QMessageDataComparator::Excludes)
       
   838         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[3] )
       
   839         << ( QMessageFolderIdList() << folderIds[2] );
       
   840 
       
   841     QTest::newRow("id filter exclusion 3")
       
   842         << QMessageFolderFilter::byId(QMessageFolderFilter::byPath("box/X-Ann", QMessageDataComparator::Includes), QMessageDataComparator::Excludes)
       
   843         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] )
       
   844         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] );
       
   845 #endif    
       
   846 
       
   847     QTest::newRow("id filter exclusion empty")
       
   848         << QMessageFolderFilter::byId(QMessageFolderFilter(), QMessageDataComparator::Excludes) 
       
   849         << QMessageFolderIdList()
       
   850         << folderIds;
       
   851 
       
   852     QTest::newRow("id filter exclusion non-matching")
       
   853         << QMessageFolderFilter::byId(QMessageFolderFilter::byPath("NoneSuch"), QMessageDataComparator::Excludes) 
       
   854         << folderIds
       
   855         << QMessageFolderIdList();
       
   856 
       
   857     QTest::newRow("path equality 1")
       
   858         << QMessageFolderFilter::byPath("My messages", QMessageDataComparator::Equal)
       
   859         << ( QMessageFolderIdList() << folderIds[0] )
       
   860         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] );
       
   861 
       
   862 #ifndef Q_OS_SYMBIAN    
       
   863     QTest::newRow("path equality 2")
       
   864         << QMessageFolderFilter::byPath("Innbox/X-Announce", QMessageDataComparator::Equal)
       
   865         << ( QMessageFolderIdList() << folderIds[2] )
       
   866         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[3] );
       
   867 #endif    
       
   868 
       
   869     QTest::newRow("path equality non-matching")
       
   870         << QMessageFolderFilter::byPath("Nonesuch", QMessageDataComparator::Equal) 
       
   871         << QMessageFolderIdList()
       
   872         << folderIds;
       
   873 
       
   874     QTest::newRow("path equality empty")
       
   875         << QMessageFolderFilter::byPath(QString(), QMessageDataComparator::Equal) 
       
   876         << QMessageFolderIdList()
       
   877         << folderIds;
       
   878 
       
   879     QTest::newRow("path equality zero-length")
       
   880         << QMessageFolderFilter::byPath("", QMessageDataComparator::Equal) 
       
   881         << QMessageFolderIdList()
       
   882         << folderIds;
       
   883 
       
   884     QTest::newRow("path inequality 1")
       
   885         << QMessageFolderFilter::byPath("My messages", QMessageDataComparator::NotEqual)
       
   886         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] )
       
   887         << ( QMessageFolderIdList() << folderIds[0] );
       
   888 
       
   889 #ifndef Q_OS_SYMBIAN    
       
   890     QTest::newRow("path inequality 2")
       
   891         << QMessageFolderFilter::byPath("Innbox/X-Announce", QMessageDataComparator::NotEqual)
       
   892         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[3] )
       
   893         << ( QMessageFolderIdList() << folderIds[2] );
       
   894 #endif    
       
   895 
       
   896     QTest::newRow("path inequality non-matching")
       
   897         << QMessageFolderFilter::byPath("Nonesuch", QMessageDataComparator::NotEqual) 
       
   898         << folderIds
       
   899         << QMessageFolderIdList();
       
   900 
       
   901     QTest::newRow("path inequality empty")
       
   902         << QMessageFolderFilter::byPath(QString(), QMessageDataComparator::NotEqual) 
       
   903         << folderIds
       
   904         << QMessageFolderIdList();
       
   905 
       
   906     QTest::newRow("path inequality zero-length")
       
   907         << QMessageFolderFilter::byPath("", QMessageDataComparator::NotEqual) 
       
   908         << folderIds
       
   909         << QMessageFolderIdList();
       
   910 
       
   911     QTest::newRow("path inclusion 1")
       
   912         << QMessageFolderFilter::byPath("ess", QMessageDataComparator::Includes) 
       
   913         << ( QMessageFolderIdList() << folderIds[0] )
       
   914         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] );
       
   915 
       
   916 #ifndef Q_OS_SYMBIAN    
       
   917     QTest::newRow("path inclusion 2")
       
   918         << QMessageFolderFilter::byPath("box/X-Ann", QMessageDataComparator::Includes)
       
   919         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
   920         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
   921 #endif    
       
   922 
       
   923     QTest::newRow("path inclusion non-matching")
       
   924         << QMessageFolderFilter::byPath("Nonesuch", QMessageDataComparator::Includes) 
       
   925         << QMessageFolderIdList()
       
   926         << folderIds;
       
   927 
       
   928     QTest::newRow("path inclusion empty")
       
   929         << QMessageFolderFilter::byPath(QString(), QMessageDataComparator::Includes) 
       
   930         << folderIds
       
   931         << QMessageFolderIdList();
       
   932 
       
   933     QTest::newRow("path inclusion zero-length")
       
   934         << QMessageFolderFilter::byPath("", QMessageDataComparator::Includes) 
       
   935         << folderIds
       
   936         << QMessageFolderIdList();
       
   937 
       
   938     QTest::newRow("path exclusion 1")
       
   939         << QMessageFolderFilter::byPath("ess", QMessageDataComparator::Excludes) 
       
   940         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] )
       
   941         << ( QMessageFolderIdList() << folderIds[0] );
       
   942 
       
   943 #ifndef Q_OS_SYMBIAN    
       
   944     QTest::newRow("path exclusion 2")
       
   945         << QMessageFolderFilter::byPath("box/X-Ann", QMessageDataComparator::Excludes)
       
   946         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] )
       
   947         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] );
       
   948 #endif    
       
   949 
       
   950     QTest::newRow("path exclusion non-matching")
       
   951         << QMessageFolderFilter::byPath("Nonesuch", QMessageDataComparator::Excludes) 
       
   952         << folderIds
       
   953         << QMessageFolderIdList();
       
   954 
       
   955     QTest::newRow("path exclusion empty")
       
   956         << QMessageFolderFilter::byPath(QString(), QMessageDataComparator::Excludes) 
       
   957         << QMessageFolderIdList()
       
   958         << folderIds;
       
   959 
       
   960     QTest::newRow("path exclusion zero-length")
       
   961         << QMessageFolderFilter::byPath("", QMessageDataComparator::Excludes) 
       
   962         << QMessageFolderIdList()
       
   963         << folderIds;
       
   964 
       
   965     QTest::newRow("name equality 1")
       
   966         << QMessageFolderFilter::byName("My messages", QMessageDataComparator::Equal) 
       
   967         << ( QMessageFolderIdList() << folderIds[0] )
       
   968         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] );
       
   969 
       
   970     QTest::newRow("name equality 2")
       
   971         << QMessageFolderFilter::byName("X-Announce", QMessageDataComparator::Equal) 
       
   972         << ( QMessageFolderIdList() << folderIds[2] )
       
   973         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[3] );
       
   974 
       
   975     QTest::newRow("name equality non-matching")
       
   976         << QMessageFolderFilter::byName("Nonesuch", QMessageDataComparator::Equal) 
       
   977         << QMessageFolderIdList()
       
   978         << folderIds;
       
   979 
       
   980     QTest::newRow("name equality empty")
       
   981         << QMessageFolderFilter::byName(QString(), QMessageDataComparator::Equal) 
       
   982         << QMessageFolderIdList()
       
   983         << folderIds;
       
   984 
       
   985     QTest::newRow("name equality zero-length")
       
   986         << QMessageFolderFilter::byName("", QMessageDataComparator::Equal) 
       
   987         << QMessageFolderIdList()
       
   988         << folderIds;
       
   989 
       
   990     QTest::newRow("name inequality 1")
       
   991         << QMessageFolderFilter::byName("My messages", QMessageDataComparator::NotEqual) 
       
   992         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] )
       
   993         << ( QMessageFolderIdList() << folderIds[0] );
       
   994 
       
   995     QTest::newRow("name inequality 2")
       
   996         << QMessageFolderFilter::byName("X-Announce", QMessageDataComparator::NotEqual) 
       
   997         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[3] )
       
   998         << ( QMessageFolderIdList() << folderIds[2] );
       
   999 
       
  1000     QTest::newRow("name inequality non-matching")
       
  1001         << QMessageFolderFilter::byName("Nonesuch", QMessageDataComparator::NotEqual) 
       
  1002         << folderIds
       
  1003         << QMessageFolderIdList();
       
  1004 
       
  1005     QTest::newRow("name inequality empty")
       
  1006         << QMessageFolderFilter::byName(QString(), QMessageDataComparator::NotEqual) 
       
  1007         << folderIds
       
  1008         << QMessageFolderIdList();
       
  1009 
       
  1010     QTest::newRow("name inequality zero-length")
       
  1011         << QMessageFolderFilter::byName("", QMessageDataComparator::NotEqual) 
       
  1012         << folderIds
       
  1013         << QMessageFolderIdList();
       
  1014 
       
  1015     QTest::newRow("name inclusion 1")
       
  1016         << QMessageFolderFilter::byName("message", QMessageDataComparator::Includes) 
       
  1017         << ( QMessageFolderIdList() << folderIds[0] )
       
  1018         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] );
       
  1019 
       
  1020     QTest::newRow("name inclusion 2")
       
  1021         << QMessageFolderFilter::byName("X-A", QMessageDataComparator::Includes) 
       
  1022         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
  1023         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
  1024 
       
  1025     QTest::newRow("name inclusion non-matching")
       
  1026         << QMessageFolderFilter::byName("Nonesuch", QMessageDataComparator::Includes) 
       
  1027         << QMessageFolderIdList()
       
  1028         << folderIds;
       
  1029 
       
  1030     QTest::newRow("name inclusion empty")
       
  1031         << QMessageFolderFilter::byName(QString(), QMessageDataComparator::Includes) 
       
  1032         << folderIds
       
  1033         << QMessageFolderIdList();
       
  1034 
       
  1035     QTest::newRow("name inclusion zero-length")
       
  1036         << QMessageFolderFilter::byName("", QMessageDataComparator::Includes) 
       
  1037         << folderIds
       
  1038         << QMessageFolderIdList();
       
  1039 
       
  1040     QTest::newRow("name exclusion 1")
       
  1041         << QMessageFolderFilter::byName("messages", QMessageDataComparator::Excludes) 
       
  1042         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] )
       
  1043         << ( QMessageFolderIdList() << folderIds[0] );
       
  1044 
       
  1045     QTest::newRow("name exclusion 2")
       
  1046         << QMessageFolderFilter::byName("X-A", QMessageDataComparator::Excludes) 
       
  1047         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] )
       
  1048         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] );
       
  1049 
       
  1050     QTest::newRow("name exclusion non-matching")
       
  1051         << QMessageFolderFilter::byName("Nonesuch", QMessageDataComparator::Excludes) 
       
  1052         << folderIds
       
  1053         << QMessageFolderIdList();
       
  1054 
       
  1055     QTest::newRow("name exclusion empty")
       
  1056         << QMessageFolderFilter::byName(QString(), QMessageDataComparator::Excludes) 
       
  1057         << QMessageFolderIdList()
       
  1058         << folderIds;
       
  1059 
       
  1060     QTest::newRow("name exclusion zero-length")
       
  1061         << QMessageFolderFilter::byName("", QMessageDataComparator::Excludes) 
       
  1062         << QMessageFolderIdList()
       
  1063         << folderIds;
       
  1064 
       
  1065     QTest::newRow("parentAccountId equality 1")
       
  1066         << QMessageFolderFilter::byParentAccountId(accountIds[0], QMessageDataComparator::Equal) 
       
  1067         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] )
       
  1068         << ( QMessageFolderIdList() << folderIds[0] );
       
  1069 
       
  1070     QTest::newRow("parentAccountId equality 2")
       
  1071         << QMessageFolderFilter::byParentAccountId(accountIds[2], QMessageDataComparator::Equal) 
       
  1072         << ( QMessageFolderIdList() << folderIds[0] )
       
  1073         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] );
       
  1074 
       
  1075     QTest::newRow("parentAccountId equality invalid")
       
  1076         << QMessageFolderFilter::byParentAccountId(QMessageAccountId(), QMessageDataComparator::Equal) 
       
  1077         << QMessageFolderIdList()
       
  1078         << folderIds;
       
  1079 
       
  1080     QTest::newRow("parentAccountId inequality 1")
       
  1081         << QMessageFolderFilter::byParentAccountId(accountIds[0], QMessageDataComparator::NotEqual) 
       
  1082         << ( QMessageFolderIdList() << folderIds[0] )
       
  1083         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] );
       
  1084 
       
  1085     QTest::newRow("parentAccountId inequality 2")
       
  1086         << QMessageFolderFilter::byParentAccountId(accountIds[2], QMessageDataComparator::NotEqual) 
       
  1087         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] )
       
  1088         << ( QMessageFolderIdList() << folderIds[0] );
       
  1089 
       
  1090     QTest::newRow("parentAccountId inequality invalid")
       
  1091         << QMessageFolderFilter::byParentAccountId(QMessageAccountId(), QMessageDataComparator::NotEqual) 
       
  1092         << folderIds
       
  1093         << QMessageFolderIdList();
       
  1094 
       
  1095     QTest::newRow("parentAccountId filter inclusion 1")
       
  1096         << QMessageFolderFilter::byParentAccountId(QMessageAccountFilter::byName("Alter Ego", QMessageDataComparator::Equal), QMessageDataComparator::Includes) 
       
  1097         << ( QMessageFolderIdList() << folderIds[0] )
       
  1098         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] );
       
  1099 
       
  1100     QTest::newRow("parentAccountId filter inclusion 2")
       
  1101         << QMessageFolderFilter::byParentAccountId(QMessageAccountFilter::byName("Work", QMessageDataComparator::Equal), QMessageDataComparator::Includes) 
       
  1102         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] )
       
  1103         << ( QMessageFolderIdList() << folderIds[0] );
       
  1104 
       
  1105     QTest::newRow("parentAccountId filter inclusion 3")
       
  1106         << QMessageFolderFilter::byParentAccountId(QMessageAccountFilter::byName("o", QMessageDataComparator::Includes), QMessageDataComparator::Includes) 
       
  1107         << folderIds
       
  1108         << QMessageFolderIdList();
       
  1109 
       
  1110     QTest::newRow("parentAccountId filter inclusion empty")
       
  1111         << QMessageFolderFilter::byParentAccountId(QMessageAccountFilter(), QMessageDataComparator::Includes) 
       
  1112         << folderIds 
       
  1113         << QMessageFolderIdList();
       
  1114 
       
  1115     QTest::newRow("parentAccountId filter inclusion non-matching")
       
  1116         << QMessageFolderFilter::byParentAccountId(QMessageAccountFilter::byName("NoneSuch"), QMessageDataComparator::Includes) 
       
  1117         << QMessageFolderIdList()
       
  1118         << folderIds;
       
  1119 
       
  1120     QTest::newRow("parentAccountId filter exclusion 1")
       
  1121         << QMessageFolderFilter::byParentAccountId(QMessageAccountFilter::byName("Alter Ego", QMessageDataComparator::Equal), QMessageDataComparator::Excludes) 
       
  1122         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] )
       
  1123         << ( QMessageFolderIdList() << folderIds[0] );
       
  1124 
       
  1125     QTest::newRow("parentAccountId filter exclusion 2")
       
  1126         << QMessageFolderFilter::byParentAccountId(QMessageAccountFilter::byName("Work", QMessageDataComparator::Equal), QMessageDataComparator::Excludes) 
       
  1127         << ( QMessageFolderIdList() << folderIds[0] )
       
  1128         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] );
       
  1129 
       
  1130     QTest::newRow("parentAccountId filter exclusion 3")
       
  1131         << QMessageFolderFilter::byParentAccountId(QMessageAccountFilter::byName("o", QMessageDataComparator::Includes), QMessageDataComparator::Excludes) 
       
  1132         << QMessageFolderIdList()
       
  1133         << folderIds;
       
  1134 
       
  1135     QTest::newRow("parentAccountId filter exclusion empty")
       
  1136         << QMessageFolderFilter::byParentAccountId(QMessageAccountFilter(), QMessageDataComparator::Excludes) 
       
  1137         << QMessageFolderIdList()
       
  1138         << folderIds;
       
  1139 
       
  1140     QTest::newRow("parentAccountId filter exclusion non-matching")
       
  1141         << QMessageFolderFilter::byParentAccountId(QMessageAccountFilter::byName("NoneSuch"), QMessageDataComparator::Excludes) 
       
  1142         << folderIds
       
  1143         << QMessageFolderIdList();
       
  1144 
       
  1145 #ifndef Q_OS_SYMBIAN
       
  1146     QTest::newRow("parentFolderId equality 1")
       
  1147         << QMessageFolderFilter::byParentFolderId(folderIds[1], QMessageDataComparator::Equal) 
       
  1148         << ( QMessageFolderIdList() << folderIds[2] )
       
  1149         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[3] );
       
  1150 
       
  1151     QTest::newRow("parentFolderId equality 2")
       
  1152         << QMessageFolderFilter::byParentFolderId(folderIds[2], QMessageDataComparator::Equal) 
       
  1153         << ( QMessageFolderIdList() << folderIds[3] )
       
  1154         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[2] );
       
  1155 
       
  1156     QTest::newRow("parentFolderId equality invalid")
       
  1157         << QMessageFolderFilter::byParentFolderId(QMessageFolderId(), QMessageDataComparator::Equal) 
       
  1158         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] )
       
  1159         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] );
       
  1160 
       
  1161     QTest::newRow("parentFolderId inequality 1")
       
  1162         << QMessageFolderFilter::byParentFolderId(folderIds[1], QMessageDataComparator::NotEqual) 
       
  1163         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[3] )
       
  1164         << ( QMessageFolderIdList() << folderIds[2] );
       
  1165 
       
  1166     QTest::newRow("parentFolderId inequality 2")
       
  1167         << QMessageFolderFilter::byParentFolderId(folderIds[2], QMessageDataComparator::NotEqual) 
       
  1168         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[2] )
       
  1169         << ( QMessageFolderIdList() << folderIds[3] );
       
  1170 
       
  1171     QTest::newRow("parentFolderId inequality invalid")
       
  1172         << QMessageFolderFilter::byParentFolderId(QMessageFolderId(), QMessageDataComparator::NotEqual) 
       
  1173         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
  1174         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
  1175 
       
  1176     QTest::newRow("parentFolderId filter inclusion 1")
       
  1177         << QMessageFolderFilter::byParentFolderId(QMessageFolderFilter::byPath("Innbox/X-Announce", QMessageDataComparator::Equal), QMessageDataComparator::Includes)
       
  1178         << ( QMessageFolderIdList() << folderIds[3] )
       
  1179         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[2] );
       
  1180 
       
  1181     QTest::newRow("parentFolderId filter inclusion 2")
       
  1182         << QMessageFolderFilter::byParentFolderId(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Equal), QMessageDataComparator::Includes)
       
  1183         << ( QMessageFolderIdList() << folderIds[2] )
       
  1184         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[3] );
       
  1185 
       
  1186     QTest::newRow("parentFolderId filter inclusion 3")
       
  1187         << QMessageFolderFilter::byParentFolderId(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Includes), QMessageDataComparator::Includes)
       
  1188         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
  1189         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
  1190 
       
  1191     QTest::newRow("parentFolderId filter inclusion empty")
       
  1192         << QMessageFolderFilter::byParentFolderId(QMessageFolderFilter(), QMessageDataComparator::Includes) 
       
  1193         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
  1194         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
  1195 
       
  1196     QTest::newRow("parentFolderId filter inclusion non-matching")
       
  1197         << QMessageFolderFilter::byParentFolderId(QMessageFolderFilter::byPath("NoneSuch"), QMessageDataComparator::Includes) 
       
  1198         << QMessageFolderIdList()
       
  1199         << folderIds;
       
  1200 
       
  1201     QTest::newRow("parentFolderId filter exclusion 1")
       
  1202         << QMessageFolderFilter::byParentFolderId(QMessageFolderFilter::byPath("Innbox/X-Announce", QMessageDataComparator::Equal), QMessageDataComparator::Excludes)
       
  1203         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[2] )
       
  1204         << ( QMessageFolderIdList() << folderIds[3] );
       
  1205 
       
  1206     QTest::newRow("parentFolderId filter exclusion 2")
       
  1207         << QMessageFolderFilter::byParentFolderId(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Equal), QMessageDataComparator::Excludes)
       
  1208         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[3] )
       
  1209         << ( QMessageFolderIdList() << folderIds[2] );
       
  1210 
       
  1211     QTest::newRow("parentFolderId filter exclusion 3")
       
  1212         << QMessageFolderFilter::byParentFolderId(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Includes), QMessageDataComparator::Excludes)
       
  1213         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] )
       
  1214         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] );
       
  1215 
       
  1216     QTest::newRow("parentFolderId filter exclusion empty")
       
  1217         << QMessageFolderFilter::byParentFolderId(QMessageFolderFilter(), QMessageDataComparator::Excludes) 
       
  1218         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] )
       
  1219         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] );
       
  1220 
       
  1221     QTest::newRow("parentFolderId filter exclusion non-matching")
       
  1222         << QMessageFolderFilter::byParentFolderId(QMessageFolderFilter::byPath("NoneSuch"), QMessageDataComparator::Excludes) 
       
  1223         << folderIds
       
  1224         << QMessageFolderIdList();
       
  1225 
       
  1226     QTest::newRow("ancestorFolderIds list inclusion 1")
       
  1227         << QMessageFolderFilter::byAncestorFolderIds(folderIds[2], QMessageDataComparator::Includes) 
       
  1228         << ( QMessageFolderIdList() << folderIds[3] )
       
  1229         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[2] );
       
  1230 
       
  1231     QTest::newRow("ancestorFolderIds list inclusion 2")
       
  1232         << QMessageFolderFilter::byAncestorFolderIds(folderIds[1], QMessageDataComparator::Includes) 
       
  1233         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
  1234         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
  1235 
       
  1236     QTest::newRow("ancestorFolderIds list inclusion invalid")
       
  1237         << QMessageFolderFilter::byAncestorFolderIds(QMessageFolderId(), QMessageDataComparator::Includes) 
       
  1238         << QMessageFolderIdList()
       
  1239         << folderIds;
       
  1240 
       
  1241     QTest::newRow("ancestorFolderIds list exclusion 1")
       
  1242         << QMessageFolderFilter::byAncestorFolderIds(folderIds[2], QMessageDataComparator::Excludes) 
       
  1243         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[2] )
       
  1244         << ( QMessageFolderIdList() << folderIds[3] );
       
  1245 
       
  1246     QTest::newRow("ancestorFolderIds list exclusion 2")
       
  1247         << QMessageFolderFilter::byAncestorFolderIds(folderIds[1], QMessageDataComparator::Excludes) 
       
  1248         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] )
       
  1249         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] );
       
  1250 
       
  1251     QTest::newRow("ancestorFolderIds list exclusion invalid")
       
  1252         << QMessageFolderFilter::byAncestorFolderIds(QMessageFolderId(), QMessageDataComparator::Excludes) 
       
  1253         << folderIds
       
  1254         << QMessageFolderIdList();
       
  1255 
       
  1256     QTest::newRow("ancestorFolderIds filter inclusion 1")
       
  1257         << QMessageFolderFilter::byAncestorFolderIds(QMessageFolderFilter::byPath("Innbox/X-Announce", QMessageDataComparator::Equal), QMessageDataComparator::Includes)
       
  1258         << ( QMessageFolderIdList() << folderIds[3] )
       
  1259         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[2] );
       
  1260 
       
  1261     QTest::newRow("ancestorFolderIds filter inclusion 2")
       
  1262         << QMessageFolderFilter::byAncestorFolderIds(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Equal), QMessageDataComparator::Includes)
       
  1263         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
  1264         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
  1265 
       
  1266     QTest::newRow("ancestorFolderIds filter inclusion 3")
       
  1267         << QMessageFolderFilter::byAncestorFolderIds(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Includes), QMessageDataComparator::Includes)
       
  1268         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
  1269         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
  1270 
       
  1271     QTest::newRow("ancestorFolderIds filter inclusion empty")
       
  1272         << QMessageFolderFilter::byAncestorFolderIds(QMessageFolderFilter(), QMessageDataComparator::Includes) 
       
  1273         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
  1274         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
  1275 
       
  1276     QTest::newRow("ancestorFolderIds filter inclusion non-matching")
       
  1277         << QMessageFolderFilter::byAncestorFolderIds(QMessageFolderFilter::byPath("NoneSuch"), QMessageDataComparator::Includes) 
       
  1278         << QMessageFolderIdList()
       
  1279         << folderIds;
       
  1280 
       
  1281     QTest::newRow("ancestorFolderIds filter exclusion 1")
       
  1282         << QMessageFolderFilter::byAncestorFolderIds(QMessageFolderFilter::byPath("Innbox/X-Announce", QMessageDataComparator::Equal), QMessageDataComparator::Excludes)
       
  1283         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] << folderIds[2] )
       
  1284         << ( QMessageFolderIdList() << folderIds[3] );
       
  1285 
       
  1286     QTest::newRow("ancestorFolderIds filter exclusion 2")
       
  1287         << QMessageFolderFilter::byAncestorFolderIds(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Equal), QMessageDataComparator::Excludes)
       
  1288         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] )
       
  1289         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] );
       
  1290 
       
  1291     QTest::newRow("ancestorFolderIds filter exclusion 3")
       
  1292         << QMessageFolderFilter::byAncestorFolderIds(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Includes), QMessageDataComparator::Excludes)
       
  1293         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] )
       
  1294         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] );
       
  1295 
       
  1296     QTest::newRow("ancestorFolderIds filter exclusion empty")
       
  1297         << QMessageFolderFilter::byAncestorFolderIds(QMessageFolderFilter(), QMessageDataComparator::Excludes) 
       
  1298         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] )
       
  1299         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] );
       
  1300 
       
  1301     QTest::newRow("ancestorFolderIds filter exclusion non-matching")
       
  1302         << QMessageFolderFilter::byAncestorFolderIds(QMessageFolderFilter::byPath("NoneSuch"), QMessageDataComparator::Excludes) 
       
  1303         << folderIds
       
  1304         << QMessageFolderIdList();
       
  1305 #endif    
       
  1306 
       
  1307     // Test some basic combinations
       
  1308     QTest::newRow("id inequality AND name inclusion")
       
  1309         << ( QMessageFolderFilter::byId(folderIds[0], QMessageDataComparator::NotEqual) &
       
  1310              QMessageFolderFilter::byName("X-A", QMessageDataComparator::Includes) )
       
  1311         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
  1312         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
  1313 
       
  1314     QTest::newRow("id equality OR name equality")
       
  1315         << ( QMessageFolderFilter::byId(folderIds[0], QMessageDataComparator::Equal) |
       
  1316              QMessageFolderFilter::byName("X-Announce", QMessageDataComparator::Equal) )
       
  1317         << ( QMessageFolderIdList() << folderIds[0] << folderIds[2] )
       
  1318         << ( QMessageFolderIdList() << folderIds[1] << folderIds[3] );
       
  1319 
       
  1320     QMessageFolderFilter andEquals(QMessageFolderFilter::byId(folderIds[0], QMessageDataComparator::NotEqual));
       
  1321     andEquals &= QMessageFolderFilter::byName("X-A", QMessageDataComparator::Includes);
       
  1322     QTest::newRow("QMessageFolderFilter::operator&=")
       
  1323         << andEquals
       
  1324         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
  1325         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
  1326 
       
  1327     QMessageFolderFilter orEquals(QMessageFolderFilter::byId(folderIds[0], QMessageDataComparator::Equal));
       
  1328     orEquals |= QMessageFolderFilter::byName("X-Announce", QMessageDataComparator::Equal);
       
  1329     QTest::newRow("QMessageFolderFilter::operator|=")
       
  1330         << orEquals
       
  1331         << ( QMessageFolderIdList() << folderIds[0] << folderIds[2] )
       
  1332         << ( QMessageFolderIdList() << folderIds[1] << folderIds[3] );
       
  1333 
       
  1334     // Test matchFlags
       
  1335     QMessageFolderFilter caseInsensitive1(QMessageFolderFilter::byName("x-a", QMessageDataComparator::Includes));
       
  1336     QTest::newRow("matchFlags:caseInsensitive 1")
       
  1337         << caseInsensitive1
       
  1338         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
  1339         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
  1340     
       
  1341     QMessageFolderFilter caseSensitive1(QMessageFolderFilter::byName("x-a", QMessageDataComparator::Includes));
       
  1342     caseSensitive1.setMatchFlags(QMessageDataComparator::MatchCaseSensitive);
       
  1343     QTest::newRow("matchFlags:caseSensitive 1")
       
  1344         << caseSensitive1
       
  1345         << QMessageFolderIdList()
       
  1346         << folderIds;
       
  1347 
       
  1348     QMessageFolderFilter caseSensitive2(QMessageFolderFilter::byName("X-A", QMessageDataComparator::Includes));
       
  1349     caseSensitive2.setMatchFlags(QMessageDataComparator::MatchCaseSensitive);
       
  1350     QTest::newRow("matchFlags:caseSensitive 2")
       
  1351         << caseSensitive2
       
  1352         << ( QMessageFolderIdList() << folderIds[2] << folderIds[3] )
       
  1353         << ( QMessageFolderIdList() << folderIds[0] << folderIds[1] );
       
  1354 }
       
  1355 
       
  1356 void tst_QMessageStoreKeys::testFolderFilter()
       
  1357 {
       
  1358     QFETCH(QMessageFolderFilter, filter);
       
  1359     QFETCH(QMessageFolderIdList, ids);
       
  1360     QFETCH(QMessageFolderIdList, negatedIds);
       
  1361 
       
  1362     if (filter.isSupported()) {
       
  1363         QVERIFY(filter == filter);
       
  1364         QCOMPARE(filter != QMessageFolderFilter(), !filter.isEmpty());
       
  1365 
       
  1366         // Order is irrelevant for filtering
       
  1367         QCOMPARE(manager->queryFolders(filter).toSet().subtract(existingFolderIds), ids.toSet());
       
  1368         QCOMPARE(manager->queryFolders(~filter).toSet().subtract(existingFolderIds), negatedIds.toSet());
       
  1369     } else {
       
  1370         QSKIP("Unsupported for this configuration", SkipSingle);
       
  1371     }
       
  1372 }
       
  1373 
       
  1374 void tst_QMessageStoreKeys::testFolderOrdering_data()
       
  1375 {
       
  1376     QTest::addColumn<FolderSortList>("sorts");
       
  1377     QTest::addColumn<QMessageFolderIdList>("ids");
       
  1378 
       
  1379     QTest::newRow("path ascending")
       
  1380         << ( FolderSortList() << QMessageFolderSortOrder::byPath(Qt::AscendingOrder) )
       
  1381 #ifndef Q_OS_SYMBIAN    
       
  1382         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] << folderIds[0] );
       
  1383 #else
       
  1384         << ( QMessageFolderIdList() << folderIds[1] << folderIds[0] << folderIds[2] << folderIds[3] );
       
  1385 #endif
       
  1386 
       
  1387     QTest::newRow("path descending")
       
  1388         << ( FolderSortList() << QMessageFolderSortOrder::byPath(Qt::DescendingOrder) )
       
  1389 #ifndef Q_OS_SYMBIAN    
       
  1390         << ( QMessageFolderIdList() << folderIds[0] << folderIds[3] << folderIds[2] << folderIds[1] );
       
  1391 #else
       
  1392         << ( QMessageFolderIdList() << folderIds[3] << folderIds[2] << folderIds[0] << folderIds[1] );
       
  1393 #endif
       
  1394 
       
  1395     QTest::newRow("name ascending")
       
  1396         << ( FolderSortList() << QMessageFolderSortOrder::byName(Qt::AscendingOrder) )
       
  1397         << ( QMessageFolderIdList() << folderIds[1] << folderIds[0] << folderIds[2] << folderIds[3] );
       
  1398 
       
  1399     QTest::newRow("name descending")
       
  1400         << ( FolderSortList() << QMessageFolderSortOrder::byName(Qt::DescendingOrder) )
       
  1401         << ( QMessageFolderIdList() << folderIds[3] << folderIds[2] << folderIds[0] << folderIds[1] );
       
  1402     
       
  1403     QTest::newRow("path ascending + name ascending")
       
  1404         << ( FolderSortList() << QMessageFolderSortOrder::byPath(Qt::AscendingOrder) << QMessageFolderSortOrder::byName(Qt::AscendingOrder) )
       
  1405 #ifndef Q_OS_SYMBIAN    
       
  1406         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] << folderIds[0] );
       
  1407 #else
       
  1408         << ( QMessageFolderIdList() << folderIds[1] << folderIds[0] << folderIds[2] << folderIds[3] );
       
  1409 #endif
       
  1410 
       
  1411     QMessageFolderSortOrder plusEquals(QMessageFolderSortOrder::byPath(Qt::AscendingOrder));
       
  1412     plusEquals += QMessageFolderSortOrder::byName(Qt::AscendingOrder);
       
  1413 
       
  1414     QTest::newRow("path ascending += name ascending")
       
  1415         << ( FolderSortList() << plusEquals )
       
  1416 #ifndef Q_OS_SYMBIAN    
       
  1417         << ( QMessageFolderIdList() << folderIds[1] << folderIds[2] << folderIds[3] << folderIds[0] );
       
  1418 #else
       
  1419         << ( QMessageFolderIdList() << folderIds[1] << folderIds[0] << folderIds[2] << folderIds[3] );
       
  1420 #endif
       
  1421 }
       
  1422 
       
  1423 void tst_QMessageStoreKeys::testFolderOrdering()
       
  1424 {
       
  1425     QFETCH(FolderSortList, sorts);
       
  1426     QFETCH(QMessageFolderIdList, ids);
       
  1427 
       
  1428     bool supported(true);
       
  1429     foreach (const QMessageFolderSortOrder &element, sorts) {
       
  1430         QVERIFY(element == element);
       
  1431         QCOMPARE(element != QMessageFolderSortOrder(), !element.isEmpty());
       
  1432 
       
  1433         supported &= element.isSupported();
       
  1434     }
       
  1435 
       
  1436     if (supported) {
       
  1437         // Filter out the existing folders
       
  1438         QMessageFolderIdList sortedIds(manager->queryFolders(QMessageFolderFilter(), sorts));
       
  1439         for (QMessageFolderIdList::iterator it = sortedIds.begin(); it != sortedIds.end(); ) {
       
  1440             if (existingFolderIds.contains(*it)) {
       
  1441                 it = sortedIds.erase(it);
       
  1442             } else {
       
  1443                 ++it;
       
  1444             }
       
  1445         }
       
  1446 
       
  1447         QCOMPARE(sortedIds, ids);
       
  1448     } else {
       
  1449         QSKIP("Unsupported for this configuration", SkipSingle);
       
  1450     }
       
  1451 }
       
  1452 
       
  1453 void tst_QMessageStoreKeys::testMessageFilter_data()
       
  1454 {
       
  1455     QTest::addColumn<QMessageFilter>("filter");
       
  1456     QTest::addColumn<QMessageIdList>("ids");
       
  1457     QTest::addColumn<QMessageIdList>("negatedIds");
       
  1458     QTest::addColumn<QString>("body");
       
  1459 
       
  1460     QTest::newRow("empty filter")
       
  1461         << QMessageFilter() 
       
  1462         << messageIds
       
  1463         << QMessageIdList()
       
  1464         << "";
       
  1465 
       
  1466     QTest::newRow("id equality 1")
       
  1467         << QMessageFilter::byId(messageIds[0], QMessageDataComparator::Equal) 
       
  1468         << ( QMessageIdList() << messageIds[0] )
       
  1469         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1470         << "";
       
  1471 
       
  1472     QTest::newRow("id equality 2")
       
  1473         << QMessageFilter::byId(messageIds[1], QMessageDataComparator::Equal) 
       
  1474         << ( QMessageIdList() << messageIds[1] )
       
  1475         << ( QMessageIdList() << messageIds[0] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1476         << "";
       
  1477 
       
  1478     QTest::newRow("id equality invalid")
       
  1479         << QMessageFilter::byId(QMessageId(), QMessageDataComparator::Equal) 
       
  1480         << QMessageIdList()
       
  1481         << messageIds
       
  1482         << "";
       
  1483 
       
  1484     QTest::newRow("id inequality 1")
       
  1485         << QMessageFilter::byId(messageIds[0], QMessageDataComparator::NotEqual) 
       
  1486         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1487         << ( QMessageIdList() << messageIds[0] )
       
  1488         << "";
       
  1489 
       
  1490     QTest::newRow("id inequality 2")
       
  1491         << QMessageFilter::byId(messageIds[1], QMessageDataComparator::NotEqual) 
       
  1492         << ( QMessageIdList() << messageIds[0] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1493         << ( QMessageIdList() << messageIds[1] )
       
  1494         << "";
       
  1495 
       
  1496     QTest::newRow("id inequality invalid")
       
  1497         << QMessageFilter::byId(QMessageId(), QMessageDataComparator::NotEqual) 
       
  1498         << messageIds
       
  1499         << QMessageIdList()
       
  1500         << "";
       
  1501 
       
  1502     QTest::newRow("id list inclusion 1")
       
  1503         << QMessageFilter::byId(QMessageIdList() << messageIds[0], QMessageDataComparator::Includes) 
       
  1504         << ( QMessageIdList() << messageIds[0] )
       
  1505         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1506         << "";
       
  1507 
       
  1508     QTest::newRow("id list inclusion 2")
       
  1509         << QMessageFilter::byId(QMessageIdList() << messageIds[1], QMessageDataComparator::Includes) 
       
  1510         << ( QMessageIdList() << messageIds[1] )
       
  1511         << ( QMessageIdList() << messageIds[0] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1512         << "";
       
  1513 
       
  1514     QTest::newRow("id list inclusion 3")
       
  1515         << QMessageFilter::byId(QMessageIdList() << messageIds[0] << messageIds[1], QMessageDataComparator::Includes) 
       
  1516         << ( QMessageIdList() << messageIds[0] << messageIds[1] )
       
  1517         << ( QMessageIdList() << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1518         << "";
       
  1519 
       
  1520     QTest::newRow("id list inclusion empty")
       
  1521         << QMessageFilter::byId(QMessageIdList(), QMessageDataComparator::Includes) 
       
  1522         << QMessageIdList()
       
  1523         << messageIds
       
  1524         << "";
       
  1525 
       
  1526     QTest::newRow("id list exclusion 1")
       
  1527         << QMessageFilter::byId(QMessageIdList() << messageIds[0], QMessageDataComparator::Excludes) 
       
  1528         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1529         << ( QMessageIdList() << messageIds[0] )
       
  1530         << "";
       
  1531 
       
  1532     QTest::newRow("id list exclusion 2")
       
  1533         << QMessageFilter::byId(QMessageIdList() << messageIds[1], QMessageDataComparator::Excludes) 
       
  1534         << ( QMessageIdList() << messageIds[0] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1535         << ( QMessageIdList() << messageIds[1] )
       
  1536         << "";
       
  1537 
       
  1538     QTest::newRow("id list exclusion 3")
       
  1539         << QMessageFilter::byId(QMessageIdList() << messageIds[0] << messageIds[1], QMessageDataComparator::Excludes) 
       
  1540         << ( QMessageIdList() << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1541         << ( QMessageIdList() << messageIds[0] << messageIds[1] )
       
  1542         << "";
       
  1543 
       
  1544     QTest::newRow("id list exclusion empty")
       
  1545         << QMessageFilter::byId(QMessageIdList(), QMessageDataComparator::Excludes) 
       
  1546         << messageIds
       
  1547         << QMessageIdList()
       
  1548         << "";
       
  1549 
       
  1550     QTest::newRow("id filter inclusion empty")
       
  1551         << QMessageFilter::byId(QMessageFilter(), QMessageDataComparator::Includes) 
       
  1552         << messageIds
       
  1553         << QMessageIdList()
       
  1554         << "";
       
  1555 
       
  1556     QTest::newRow("id filter inclusion non matching")
       
  1557         << QMessageFilter::byId(~QMessageFilter(), QMessageDataComparator::Includes) 
       
  1558         << QMessageIdList()
       
  1559         << messageIds
       
  1560         << "";
       
  1561 
       
  1562     QTest::newRow("id filter inclusion 1")
       
  1563         << QMessageFilter::byId(QMessageFilter::bySubject("Free beer", QMessageDataComparator::Equal), 
       
  1564                                 QMessageDataComparator::Includes)
       
  1565         << ( QMessageIdList() << messageIds[4] )
       
  1566         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  1567         << "";
       
  1568 
       
  1569     QTest::newRow("type equality 1")
       
  1570         << QMessageFilter::byType(QMessage::Sms, QMessageDataComparator::Equal) 
       
  1571 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN))
       
  1572         << QMessageIdList()
       
  1573         << messageIds
       
  1574 #else
       
  1575         << ( QMessageIdList() << messageIds[0] )
       
  1576         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1577 #endif
       
  1578         << "";
       
  1579 
       
  1580     QTest::newRow("type equality 2")
       
  1581         << QMessageFilter::byType(QMessage::Email, QMessageDataComparator::Equal) 
       
  1582 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN))
       
  1583         << messageIds
       
  1584         << QMessageIdList()
       
  1585 #else
       
  1586         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1587         << ( QMessageIdList() << messageIds[0] )
       
  1588 #endif
       
  1589         << "";
       
  1590 
       
  1591     QTest::newRow("type equality invalid")
       
  1592         << QMessageFilter::byType(QMessage::NoType, QMessageDataComparator::Equal) 
       
  1593         << QMessageIdList()
       
  1594         << messageIds
       
  1595         << "";
       
  1596 
       
  1597     QTest::newRow("type inequality 1")
       
  1598         << QMessageFilter::byType(QMessage::Sms, QMessageDataComparator::NotEqual) 
       
  1599 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN))
       
  1600         << messageIds
       
  1601         << QMessageIdList()
       
  1602 #else
       
  1603         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1604         << ( QMessageIdList() << messageIds[0] )
       
  1605 #endif
       
  1606         << "";
       
  1607 
       
  1608     QTest::newRow("type inequality 2")
       
  1609         << QMessageFilter::byType(QMessage::Email, QMessageDataComparator::NotEqual) 
       
  1610 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN))
       
  1611         << QMessageIdList()
       
  1612         << messageIds
       
  1613 #else
       
  1614         << ( QMessageIdList() << messageIds[0] )
       
  1615         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1616 #endif
       
  1617         << "";
       
  1618 
       
  1619     QTest::newRow("type inequality invalid")
       
  1620         << QMessageFilter::byType(QMessage::NoType, QMessageDataComparator::NotEqual) 
       
  1621         << messageIds
       
  1622         << QMessageIdList()
       
  1623         << "";
       
  1624 
       
  1625     QTest::newRow("type mask inclusion 1")
       
  1626         << QMessageFilter::byType(QMessage::Sms, QMessageDataComparator::Includes) 
       
  1627 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN))
       
  1628         << QMessageIdList()
       
  1629         << messageIds
       
  1630 #else
       
  1631         << ( QMessageIdList() << messageIds[0] )
       
  1632         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1633 #endif
       
  1634         << "";
       
  1635 
       
  1636     QTest::newRow("type mask inclusion 2")
       
  1637         << QMessageFilter::byType(QMessage::Email, QMessageDataComparator::Includes) 
       
  1638 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN))
       
  1639         << messageIds
       
  1640         << QMessageIdList()
       
  1641 #else
       
  1642         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1643         << ( QMessageIdList() << messageIds[0] )
       
  1644 #endif
       
  1645         << "";
       
  1646 
       
  1647     QTest::newRow("type mask inclusion 3")
       
  1648         << QMessageFilter::byType(QMessage::Sms | QMessage::Email, QMessageDataComparator::Includes) 
       
  1649         << messageIds
       
  1650         << QMessageIdList()
       
  1651         << "";
       
  1652 
       
  1653     QTest::newRow("type mask inclusion empty")
       
  1654         << QMessageFilter::byType(QMessage::NoType, QMessageDataComparator::Includes) 
       
  1655         << QMessageIdList()
       
  1656         << messageIds
       
  1657         << "";
       
  1658 
       
  1659     QTest::newRow("type mask exclusion 1")
       
  1660         << QMessageFilter::byType(QMessage::Sms, QMessageDataComparator::Excludes) 
       
  1661 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN))
       
  1662         << messageIds
       
  1663         << QMessageIdList()
       
  1664 #else
       
  1665         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1666         << ( QMessageIdList() << messageIds[0] )
       
  1667 #endif
       
  1668         << "";
       
  1669 
       
  1670     QTest::newRow("type mask exclusion 2")
       
  1671         << QMessageFilter::byType(QMessage::Email, QMessageDataComparator::Excludes) 
       
  1672 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN))
       
  1673         << QMessageIdList()
       
  1674         << messageIds
       
  1675 #else
       
  1676         << ( QMessageIdList() << messageIds[0] )
       
  1677         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1678 #endif
       
  1679         << "";
       
  1680 
       
  1681     QTest::newRow("type mask exclusion 3")
       
  1682         << QMessageFilter::byType(QMessage::Sms | QMessage::Email, QMessageDataComparator::Excludes) 
       
  1683         << QMessageIdList()
       
  1684         << messageIds
       
  1685         << "";
       
  1686 
       
  1687     QTest::newRow("type mask exclusion empty")
       
  1688         << QMessageFilter::byType(QMessage::NoType, QMessageDataComparator::Excludes) 
       
  1689         << messageIds
       
  1690         << QMessageIdList()
       
  1691         << "";
       
  1692 
       
  1693     QTest::newRow("sender equality 1")
       
  1694         << QMessageFilter::bySender("Esteemed.Colleague@example.com", QMessageDataComparator::Equal) 
       
  1695         << ( QMessageIdList() << messageIds[1] )
       
  1696         << ( QMessageIdList() << messageIds[0] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1697         << "";
       
  1698 
       
  1699     QTest::newRow("sender equality 2")
       
  1700         << QMessageFilter::bySender("sysadmin@example.com", QMessageDataComparator::Equal) 
       
  1701         << ( QMessageIdList() << messageIds[3] )
       
  1702         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[4] )
       
  1703         << "";
       
  1704 
       
  1705     QTest::newRow("sender equality non-matching")
       
  1706         << QMessageFilter::bySender("Nonesuch", QMessageDataComparator::Equal) 
       
  1707         << QMessageIdList()
       
  1708         << messageIds
       
  1709         << "";
       
  1710 
       
  1711     QTest::newRow("sender equality empty")
       
  1712         << QMessageFilter::bySender(QString(), QMessageDataComparator::Equal) 
       
  1713         << QMessageIdList()
       
  1714         << messageIds
       
  1715         << "";
       
  1716 
       
  1717     QTest::newRow("sender equality zero-length")
       
  1718         << QMessageFilter::bySender("", QMessageDataComparator::Equal) 
       
  1719         << QMessageIdList()
       
  1720         << messageIds
       
  1721         << "";
       
  1722 
       
  1723     QTest::newRow("sender inequality 1")
       
  1724         << QMessageFilter::bySender("Esteemed.Colleague@example.com", QMessageDataComparator::NotEqual) 
       
  1725         << ( QMessageIdList() << messageIds[0] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1726         << ( QMessageIdList() << messageIds[1] )
       
  1727         << "";
       
  1728 
       
  1729     QTest::newRow("sender inequality 2")
       
  1730         << QMessageFilter::bySender("sysadmin@example.com", QMessageDataComparator::NotEqual) 
       
  1731         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[4] )
       
  1732         << ( QMessageIdList() << messageIds[3] )
       
  1733         << "";
       
  1734 
       
  1735     QTest::newRow("sender inequality non-matching")
       
  1736         << QMessageFilter::bySender("Nonesuch", QMessageDataComparator::NotEqual) 
       
  1737         << messageIds
       
  1738         << QMessageIdList()
       
  1739         << "";
       
  1740 
       
  1741     QTest::newRow("sender inequality empty")
       
  1742         << QMessageFilter::bySender(QString(), QMessageDataComparator::NotEqual) 
       
  1743         << messageIds
       
  1744         << QMessageIdList()
       
  1745         << "";
       
  1746 
       
  1747     QTest::newRow("sender inequality zero-length")
       
  1748         << QMessageFilter::bySender("", QMessageDataComparator::NotEqual) 
       
  1749         << messageIds
       
  1750         << QMessageIdList()
       
  1751         << "";
       
  1752 
       
  1753     QTest::newRow("sender inclusion 1")
       
  1754         << QMessageFilter::bySender("example", QMessageDataComparator::Includes) 
       
  1755         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1756         << ( QMessageIdList() << messageIds[0] )
       
  1757         << "";
       
  1758 
       
  1759     QTest::newRow("sender inclusion 2")
       
  1760         << QMessageFilter::bySender("ozone", QMessageDataComparator::Includes) 
       
  1761         << ( QMessageIdList() << messageIds[0] )
       
  1762         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1763         << "";
       
  1764 
       
  1765     QTest::newRow("sender inclusion non-matching")
       
  1766         << QMessageFilter::bySender("Nonesuch", QMessageDataComparator::Includes) 
       
  1767         << QMessageIdList()
       
  1768         << messageIds
       
  1769         << "";
       
  1770 
       
  1771     QTest::newRow("sender inclusion empty")
       
  1772         << QMessageFilter::bySender(QString(), QMessageDataComparator::Includes) 
       
  1773         << messageIds
       
  1774         << QMessageIdList()
       
  1775         << "";
       
  1776 
       
  1777     QTest::newRow("sender inclusion zero-length")
       
  1778         << QMessageFilter::bySender("", QMessageDataComparator::Includes) 
       
  1779         << messageIds
       
  1780         << QMessageIdList()
       
  1781         << "";
       
  1782 
       
  1783     QTest::newRow("sender exclusion 1")
       
  1784         << QMessageFilter::bySender("example", QMessageDataComparator::Excludes) 
       
  1785         << ( QMessageIdList() << messageIds[0] )
       
  1786         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1787         << "";
       
  1788 
       
  1789     QTest::newRow("sender exclusion 2")
       
  1790         << QMessageFilter::bySender("ozone", QMessageDataComparator::Excludes) 
       
  1791         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1792         << ( QMessageIdList() << messageIds[0] )
       
  1793         << "";
       
  1794 
       
  1795     QTest::newRow("sender exclusion non-matching")
       
  1796         << QMessageFilter::bySender("Nonesuch", QMessageDataComparator::Excludes) 
       
  1797         << messageIds
       
  1798         << QMessageIdList()
       
  1799         << "";
       
  1800 
       
  1801     QTest::newRow("sender exclusion empty")
       
  1802         << QMessageFilter::bySender(QString(), QMessageDataComparator::Excludes) 
       
  1803         << QMessageIdList()
       
  1804         << messageIds
       
  1805         << "";
       
  1806 
       
  1807     QTest::newRow("sender exclusion zero-length")
       
  1808         << QMessageFilter::bySender("", QMessageDataComparator::Excludes) 
       
  1809         << QMessageIdList()
       
  1810         << messageIds
       
  1811         << "";
       
  1812 
       
  1813     QTest::newRow("recipients inclusion 1")
       
  1814         << QMessageFilter::byRecipients("example", QMessageDataComparator::Includes) 
       
  1815         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1816         << ( QMessageIdList() << messageIds[0] )
       
  1817         << "";
       
  1818 
       
  1819     QTest::newRow("recipients inclusion 2")
       
  1820         << QMessageFilter::byRecipients("Mega", QMessageDataComparator::Includes) 
       
  1821         << ( QMessageIdList() << messageIds[0] )
       
  1822         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1823         << "";
       
  1824 
       
  1825     QTest::newRow("recipients inclusion non-matching")
       
  1826         << QMessageFilter::byRecipients("Nonesuch", QMessageDataComparator::Includes) 
       
  1827         << QMessageIdList()
       
  1828         << messageIds
       
  1829         << "";
       
  1830 
       
  1831     QTest::newRow("recipients inclusion empty")
       
  1832         << QMessageFilter::byRecipients(QString(), QMessageDataComparator::Includes) 
       
  1833         << messageIds
       
  1834         << QMessageIdList()
       
  1835         << "";
       
  1836 
       
  1837     QTest::newRow("recipients inclusion zero-length")
       
  1838         << QMessageFilter::byRecipients("", QMessageDataComparator::Includes) 
       
  1839         << messageIds
       
  1840         << QMessageIdList()
       
  1841         << "";
       
  1842 
       
  1843     QTest::newRow("recipients exclusion 1")
       
  1844         << QMessageFilter::byRecipients("example", QMessageDataComparator::Excludes) 
       
  1845         << ( QMessageIdList() << messageIds[0] )
       
  1846         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1847         << "";
       
  1848 
       
  1849     QTest::newRow("recipients exclusion 2")
       
  1850         << QMessageFilter::byRecipients("Mega", QMessageDataComparator::Excludes) 
       
  1851         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  1852         << ( QMessageIdList() << messageIds[0] )
       
  1853         << "";
       
  1854 
       
  1855     QTest::newRow("recipients exclusion non-matching")
       
  1856         << QMessageFilter::byRecipients("Nonesuch", QMessageDataComparator::Excludes) 
       
  1857         << messageIds
       
  1858         << QMessageIdList()
       
  1859         << "";
       
  1860 
       
  1861     QTest::newRow("recipients exclusion empty")
       
  1862         << QMessageFilter::byRecipients(QString(), QMessageDataComparator::Excludes) 
       
  1863         << QMessageIdList()
       
  1864         << messageIds
       
  1865         << "";
       
  1866 
       
  1867     QTest::newRow("recipients exclusion zero-length")
       
  1868         << QMessageFilter::byRecipients("", QMessageDataComparator::Excludes) 
       
  1869         << QMessageIdList()
       
  1870         << messageIds
       
  1871         << "";
       
  1872 
       
  1873     QTest::newRow("subject equality 1")
       
  1874         << QMessageFilter::bySubject("Free beer", QMessageDataComparator::Equal) 
       
  1875         << ( QMessageIdList() << messageIds[4] )
       
  1876         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  1877         << "";
       
  1878 
       
  1879     QTest::newRow("subject equality 2")
       
  1880         << QMessageFilter::bySubject("Scheduled maintenance", QMessageDataComparator::Equal) 
       
  1881         << ( QMessageIdList() << messageIds[3] )
       
  1882         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[4] )
       
  1883         << "";
       
  1884 
       
  1885     QTest::newRow("subject equality non-matching")
       
  1886         << QMessageFilter::bySubject("Nonesuch", QMessageDataComparator::Equal) 
       
  1887         << QMessageIdList()
       
  1888         << messageIds
       
  1889         << "";
       
  1890 
       
  1891     QTest::newRow("subject equality empty")
       
  1892         << QMessageFilter::bySubject(QString(), QMessageDataComparator::Equal) 
       
  1893         << QMessageIdList()
       
  1894         << messageIds
       
  1895         << "";
       
  1896 
       
  1897     QTest::newRow("subject equality zero-length")
       
  1898         << QMessageFilter::bySubject("", QMessageDataComparator::Equal) 
       
  1899         << QMessageIdList()
       
  1900         << messageIds
       
  1901         << "";
       
  1902 
       
  1903     QTest::newRow("subject inequality 1")
       
  1904         << QMessageFilter::bySubject("Free beer", QMessageDataComparator::NotEqual) 
       
  1905         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  1906         << ( QMessageIdList() << messageIds[4] )
       
  1907         << "";
       
  1908 
       
  1909     QTest::newRow("subject inequality 2")
       
  1910         << QMessageFilter::bySubject("Scheduled maintenance", QMessageDataComparator::NotEqual) 
       
  1911         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[4] )
       
  1912         << ( QMessageIdList() << messageIds[3] )
       
  1913         << "";
       
  1914 
       
  1915     QTest::newRow("subject inequality non-matching")
       
  1916         << QMessageFilter::bySubject("Nonesuch", QMessageDataComparator::NotEqual) 
       
  1917         << messageIds
       
  1918         << QMessageIdList()
       
  1919         << "";
       
  1920 
       
  1921     QTest::newRow("subject inequality empty")
       
  1922         << QMessageFilter::bySubject(QString(), QMessageDataComparator::NotEqual) 
       
  1923         << messageIds
       
  1924         << QMessageIdList()
       
  1925         << "";
       
  1926 
       
  1927     QTest::newRow("subject inequality zero-length")
       
  1928         << QMessageFilter::bySubject("", QMessageDataComparator::NotEqual) 
       
  1929         << messageIds
       
  1930         << QMessageIdList()
       
  1931         << "";
       
  1932 
       
  1933     QTest::newRow("subject inclusion 1")
       
  1934         << QMessageFilter::bySubject("vation", QMessageDataComparator::Includes) 
       
  1935         << ( QMessageIdList() << messageIds[2] )
       
  1936         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[3] << messageIds[4] )
       
  1937         << "";
       
  1938 
       
  1939     QTest::newRow("subject inclusion 2")
       
  1940         << QMessageFilter::bySubject(" ", QMessageDataComparator::Includes) 
       
  1941         << messageIds
       
  1942         << QMessageIdList()
       
  1943         << "";
       
  1944 
       
  1945     QTest::newRow("subject inclusion non-matching")
       
  1946         << QMessageFilter::bySubject("Nonesuch", QMessageDataComparator::Includes) 
       
  1947         << QMessageIdList()
       
  1948         << messageIds
       
  1949         << "";
       
  1950 
       
  1951     QTest::newRow("subject inclusion empty")
       
  1952         << QMessageFilter::bySubject(QString(), QMessageDataComparator::Includes) 
       
  1953         << messageIds
       
  1954         << QMessageIdList()
       
  1955         << "";
       
  1956 
       
  1957     QTest::newRow("subject inclusion zero-length")
       
  1958         << QMessageFilter::bySubject("", QMessageDataComparator::Includes) 
       
  1959         << messageIds
       
  1960         << QMessageIdList()
       
  1961         << "";
       
  1962 
       
  1963     QTest::newRow("subject exclusion 1")
       
  1964         << QMessageFilter::bySubject("vation", QMessageDataComparator::Excludes) 
       
  1965         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[3] << messageIds[4] )
       
  1966         << ( QMessageIdList() << messageIds[2] )
       
  1967         << "";
       
  1968 
       
  1969     QTest::newRow("subject exclusion 2")
       
  1970         << QMessageFilter::bySubject(" ", QMessageDataComparator::Excludes) 
       
  1971         << QMessageIdList()
       
  1972         << messageIds
       
  1973         << "";
       
  1974 
       
  1975     QTest::newRow("subject exclusion non-matching")
       
  1976         << QMessageFilter::bySubject("Nonesuch", QMessageDataComparator::Excludes) 
       
  1977         << messageIds
       
  1978         << QMessageIdList()
       
  1979         << "";
       
  1980 
       
  1981     QTest::newRow("subject exclusion empty")
       
  1982         << QMessageFilter::bySubject(QString(), QMessageDataComparator::Excludes) 
       
  1983         << QMessageIdList()
       
  1984         << messageIds
       
  1985         << "";
       
  1986 
       
  1987     QTest::newRow("subject exclusion zero-length")
       
  1988         << QMessageFilter::bySubject("", QMessageDataComparator::Excludes) 
       
  1989         << QMessageIdList()
       
  1990         << messageIds
       
  1991         << "";
       
  1992 
       
  1993     QTest::newRow("timeStamp equality 1")
       
  1994         << QMessageFilter::byTimeStamp(QDateTime::fromString("1999-04-01T10:30:00Z", Qt::ISODate), QMessageDataComparator::Equal) 
       
  1995         << ( QMessageIdList() << messageIds[4] )
       
  1996         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  1997         << "";
       
  1998 
       
  1999     QTest::newRow("timeStamp equality 2")
       
  2000         << QMessageFilter::byTimeStamp(QDateTime::fromString("2000-01-01T13:00:00Z", Qt::ISODate), QMessageDataComparator::Equal) 
       
  2001         << ( QMessageIdList() << messageIds[3] << messageIds[2] )
       
  2002         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[4] )
       
  2003         << "";
       
  2004 
       
  2005     QTest::newRow("timeStamp equality non-matching")
       
  2006         << QMessageFilter::byTimeStamp(QDateTime::fromString("1990-01-01T01:00:00Z", Qt::ISODate), QMessageDataComparator::Equal) 
       
  2007         << QMessageIdList()
       
  2008         << messageIds
       
  2009         << "";
       
  2010 
       
  2011     QTest::newRow("timeStamp equality empty")
       
  2012         << QMessageFilter::byTimeStamp(QDateTime(), QMessageDataComparator::Equal) 
       
  2013         << QMessageIdList()
       
  2014         << messageIds
       
  2015         << "";
       
  2016 
       
  2017     QTest::newRow("timeStamp inequality 1")
       
  2018         << QMessageFilter::byTimeStamp(QDateTime::fromString("1999-04-01T10:30:00Z", Qt::ISODate), QMessageDataComparator::NotEqual) 
       
  2019         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2020         << ( QMessageIdList() << messageIds[4] )
       
  2021         << "";
       
  2022 
       
  2023     QTest::newRow("timeStamp inequality 2")
       
  2024         << QMessageFilter::byTimeStamp(QDateTime::fromString("2000-01-01T13:00:00Z", Qt::ISODate), QMessageDataComparator::NotEqual) 
       
  2025         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[4] )
       
  2026         << ( QMessageIdList() << messageIds[3] << messageIds[2] )
       
  2027         << "";
       
  2028 
       
  2029     QTest::newRow("timeStamp inequality non-matching")
       
  2030         << QMessageFilter::byTimeStamp(QDateTime::fromString("1990-01-01T01:00:00Z", Qt::ISODate), QMessageDataComparator::NotEqual) 
       
  2031         << messageIds
       
  2032         << QMessageIdList()
       
  2033         << "";
       
  2034 
       
  2035     QTest::newRow("timeStamp inequality empty")
       
  2036         << QMessageFilter::byTimeStamp(QDateTime(), QMessageDataComparator::NotEqual) 
       
  2037         << messageIds
       
  2038         << QMessageIdList()
       
  2039         << "";
       
  2040 
       
  2041     QDateTime epoch(QDateTime::fromString("2000-01-01T12:00:00Z", Qt::ISODate));
       
  2042 
       
  2043     QTest::newRow("timeStamp less than")
       
  2044         << QMessageFilter::byTimeStamp(epoch, QMessageDataComparator::LessThan) 
       
  2045         << ( QMessageIdList() << messageIds[4] )
       
  2046         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2047         << "";
       
  2048 
       
  2049     QTest::newRow("timeStamp less than equal")
       
  2050         << QMessageFilter::byTimeStamp(epoch, QMessageDataComparator::LessThanEqual) 
       
  2051         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[4] )
       
  2052         << ( QMessageIdList() << messageIds[2] << messageIds[3] )
       
  2053         << "";
       
  2054 
       
  2055     QTest::newRow("timeStamp greater than")
       
  2056         << QMessageFilter::byTimeStamp(epoch, QMessageDataComparator::GreaterThan) 
       
  2057         << ( QMessageIdList() << messageIds[2] << messageIds[3] )
       
  2058         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[4] )
       
  2059         << "";
       
  2060 
       
  2061     QTest::newRow("timeStamp greater than equal")
       
  2062         << QMessageFilter::byTimeStamp(epoch, QMessageDataComparator::GreaterThanEqual) 
       
  2063         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2064         << ( QMessageIdList() << messageIds[4] )
       
  2065         << "";
       
  2066 
       
  2067     QTest::newRow("receptionTimeStamp equality 1")
       
  2068 #ifndef Q_OS_SYMBIAN
       
  2069         << QMessageFilter::byReceptionTimeStamp(QDateTime::fromString("1999-04-01T10:31:00Z", Qt::ISODate), QMessageDataComparator::Equal)
       
  2070 #else    
       
  2071         << QMessageFilter::byReceptionTimeStamp(QDateTime::fromString("1999-04-01T10:30:00Z", Qt::ISODate), QMessageDataComparator::Equal) 
       
  2072 #endif    
       
  2073         << ( QMessageIdList() << messageIds[4] )
       
  2074         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2075         << "";
       
  2076 
       
  2077     QTest::newRow("receptionTimeStamp equality 2")
       
  2078 #ifndef Q_OS_SYMBIAN
       
  2079         << QMessageFilter::byReceptionTimeStamp(QDateTime::fromString("2000-01-01T13:05:00Z", Qt::ISODate), QMessageDataComparator::Equal)
       
  2080         << ( QMessageIdList() << messageIds[2] )
       
  2081         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[3] << messageIds[4] )
       
  2082 #else    
       
  2083         << QMessageFilter::byReceptionTimeStamp(QDateTime::fromString("2000-01-01T13:00:00Z", Qt::ISODate), QMessageDataComparator::Equal)
       
  2084         << ( QMessageIdList() << messageIds[3] << messageIds[2] )
       
  2085         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[4] )
       
  2086 #endif    
       
  2087         << "";
       
  2088 
       
  2089     QTest::newRow("receptionTimeStamp equality non-matching")
       
  2090         << QMessageFilter::byReceptionTimeStamp(QDateTime::fromString("1990-01-01T01:00:00Z", Qt::ISODate), QMessageDataComparator::Equal) 
       
  2091         << QMessageIdList()
       
  2092         << messageIds
       
  2093         << "";
       
  2094 
       
  2095     QTest::newRow("receptionTimeStamp equality empty")
       
  2096         << QMessageFilter::byReceptionTimeStamp(QDateTime(), QMessageDataComparator::Equal) 
       
  2097         << QMessageIdList()
       
  2098         << messageIds
       
  2099         << "";
       
  2100 
       
  2101     QTest::newRow("receptionTimeStamp inequality 1")
       
  2102 #ifndef Q_OS_SYMBIAN    
       
  2103         << QMessageFilter::byReceptionTimeStamp(QDateTime::fromString("1999-04-01T10:31:00Z", Qt::ISODate), QMessageDataComparator::NotEqual)
       
  2104 #else    
       
  2105         << QMessageFilter::byReceptionTimeStamp(QDateTime::fromString("1999-04-01T10:30:00Z", Qt::ISODate), QMessageDataComparator::NotEqual)
       
  2106 #endif    
       
  2107         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2108         << ( QMessageIdList() << messageIds[4] )
       
  2109         << "";
       
  2110 
       
  2111     QTest::newRow("receptionTimeStamp inequality 2")
       
  2112 #ifndef Q_OS_SYMBIAN    
       
  2113         << QMessageFilter::byReceptionTimeStamp(QDateTime::fromString("2000-01-01T13:05:00Z", Qt::ISODate), QMessageDataComparator::NotEqual) 
       
  2114         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[3] << messageIds[4] )
       
  2115         << ( QMessageIdList() << messageIds[2] )
       
  2116 #else    
       
  2117         << QMessageFilter::byReceptionTimeStamp(QDateTime::fromString("2000-01-01T13:00:00Z", Qt::ISODate), QMessageDataComparator::NotEqual) 
       
  2118         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[4] )
       
  2119         << ( QMessageIdList() << messageIds[3] << messageIds[2] )
       
  2120 #endif    
       
  2121         << "";
       
  2122 
       
  2123     QTest::newRow("receptionTimeStamp inequality non-matching")
       
  2124         << QMessageFilter::byReceptionTimeStamp(QDateTime::fromString("1990-01-01T01:00:00Z", Qt::ISODate), QMessageDataComparator::NotEqual) 
       
  2125         << messageIds
       
  2126         << QMessageIdList()
       
  2127         << "";
       
  2128 
       
  2129     QTest::newRow("receptionTimeStamp inequality empty")
       
  2130         << QMessageFilter::byReceptionTimeStamp(QDateTime(), QMessageDataComparator::NotEqual) 
       
  2131         << messageIds
       
  2132         << QMessageIdList()
       
  2133         << "";
       
  2134 
       
  2135     QTest::newRow("receptionTimeStamp less than")
       
  2136         << QMessageFilter::byReceptionTimeStamp(epoch, QMessageDataComparator::LessThan) 
       
  2137         << ( QMessageIdList() << messageIds[4] )
       
  2138         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2139         << "";
       
  2140 
       
  2141     QTest::newRow("receptionTimeStamp less than equal")
       
  2142         << QMessageFilter::byReceptionTimeStamp(epoch, QMessageDataComparator::LessThanEqual) 
       
  2143 #ifndef Q_OS_SYMBIAN    
       
  2144         << ( QMessageIdList() << messageIds[4] )
       
  2145         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2146 #else        
       
  2147         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[4] )
       
  2148         << ( QMessageIdList() << messageIds[2] << messageIds[3] )
       
  2149 #endif
       
  2150         << "";
       
  2151 
       
  2152     QTest::newRow("receptionTimeStamp greater than")
       
  2153         << QMessageFilter::byReceptionTimeStamp(epoch, QMessageDataComparator::GreaterThan) 
       
  2154 #ifndef Q_OS_SYMBIAN    
       
  2155         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2156         << ( QMessageIdList() << messageIds[4] )
       
  2157 #else        
       
  2158         << ( QMessageIdList() << messageIds[2] << messageIds[3] )
       
  2159         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[4] )
       
  2160 #endif
       
  2161         << "";
       
  2162 
       
  2163     QTest::newRow("receptionTimeStamp greater than equal")
       
  2164         << QMessageFilter::byReceptionTimeStamp(epoch, QMessageDataComparator::GreaterThanEqual) 
       
  2165         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2166         << ( QMessageIdList() << messageIds[4] )
       
  2167         << "";
       
  2168 
       
  2169     QTest::newRow("status equality 1")
       
  2170         << QMessageFilter::byStatus(QMessage::Read, QMessageDataComparator::Equal) 
       
  2171         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2172         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2173         << "";
       
  2174 
       
  2175     QTest::newRow("status equality 2")
       
  2176         << QMessageFilter::byStatus(QMessage::HasAttachments, QMessageDataComparator::Equal) 
       
  2177         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[4] )
       
  2178         << ( QMessageIdList() << messageIds[0] << messageIds[3] )
       
  2179         << "";
       
  2180 
       
  2181     QTest::newRow("status equality 3")
       
  2182         << QMessageFilter::byStatus(QMessage::Removed, QMessageDataComparator::Equal) 
       
  2183         << QMessageIdList()
       
  2184         << messageIds
       
  2185         << "";
       
  2186 
       
  2187     QTest::newRow("status inequality 1")
       
  2188         << QMessageFilter::byStatus(QMessage::Read, QMessageDataComparator::NotEqual) 
       
  2189         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2190         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2191         << "";
       
  2192 
       
  2193     QTest::newRow("status inequality 2")
       
  2194         << QMessageFilter::byStatus(QMessage::HasAttachments, QMessageDataComparator::NotEqual) 
       
  2195         << ( QMessageIdList() << messageIds[0] << messageIds[3] )
       
  2196         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[4] )
       
  2197         << "";
       
  2198 
       
  2199     QTest::newRow("status inequality 3")
       
  2200         << QMessageFilter::byStatus(QMessage::Removed, QMessageDataComparator::NotEqual) 
       
  2201         << messageIds
       
  2202         << QMessageIdList()
       
  2203         << "";
       
  2204 
       
  2205     QTest::newRow("status mask inclusion 1")
       
  2206         << QMessageFilter::byStatus(QMessage::Read, QMessageDataComparator::Includes) 
       
  2207         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2208         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2209         << "";
       
  2210 
       
  2211     QTest::newRow("status mask inclusion 2")
       
  2212         << QMessageFilter::byStatus(QMessage::Read | QMessage::HasAttachments, QMessageDataComparator::Includes) 
       
  2213         << ( QMessageIdList() << messageIds[4] )
       
  2214         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2215         << "";
       
  2216 
       
  2217     QTest::newRow("status mask inclusion 3")
       
  2218         << QMessageFilter::byStatus(QMessage::Read | QMessage::Removed, QMessageDataComparator::Includes) 
       
  2219         << QMessageIdList()
       
  2220         << messageIds
       
  2221         << "";
       
  2222 
       
  2223     QTest::newRow("status mask inclusion empty")
       
  2224         << QMessageFilter::byStatus(static_cast<QMessage::StatusFlags>(0), QMessageDataComparator::Includes) 
       
  2225         << QMessageIdList()
       
  2226         << messageIds
       
  2227         << "";
       
  2228 
       
  2229     QTest::newRow("status mask exclusion 1")
       
  2230         << QMessageFilter::byStatus(QMessage::Read, QMessageDataComparator::Excludes) 
       
  2231         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2232         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2233         << "";
       
  2234 
       
  2235     QTest::newRow("status mask exclusion 2")
       
  2236         << QMessageFilter::byStatus(QMessage::Read | QMessage::HasAttachments, QMessageDataComparator::Excludes) 
       
  2237         << QMessageIdList()
       
  2238         << messageIds
       
  2239         << "";
       
  2240 
       
  2241     QTest::newRow("status mask exclusion 3")
       
  2242         << QMessageFilter::byStatus(QMessage::Read | QMessage::Removed, QMessageDataComparator::Excludes) 
       
  2243         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2244         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2245         << "";
       
  2246 
       
  2247     QTest::newRow("status mask exclusion empty")
       
  2248         << QMessageFilter::byStatus(static_cast<QMessage::StatusFlags>(0), QMessageDataComparator::Excludes) 
       
  2249         << QMessageIdList()
       
  2250         << messageIds
       
  2251         << "";
       
  2252 
       
  2253     QTest::newRow("priority equality 1")
       
  2254         << QMessageFilter::byPriority(QMessage::HighPriority, QMessageDataComparator::Equal) 
       
  2255         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2256         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2257         << "";
       
  2258 
       
  2259     QTest::newRow("priority equality 2")
       
  2260         << QMessageFilter::byPriority(QMessage::LowPriority, QMessageDataComparator::Equal) 
       
  2261         << ( QMessageIdList() << messageIds[4] )
       
  2262         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2263         << "";
       
  2264 
       
  2265     QTest::newRow("priority equality 3")
       
  2266         << QMessageFilter::byPriority(QMessage::NormalPriority, QMessageDataComparator::Equal) 
       
  2267         << ( QMessageIdList() << messageIds[0] << messageIds[3] )
       
  2268         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[4] )
       
  2269         << "";
       
  2270 
       
  2271     QTest::newRow("priority inequality 1")
       
  2272         << QMessageFilter::byPriority(QMessage::HighPriority, QMessageDataComparator::NotEqual) 
       
  2273         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2274         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2275         << "";
       
  2276 
       
  2277     QTest::newRow("priority inequality 2")
       
  2278         << QMessageFilter::byPriority(QMessage::LowPriority, QMessageDataComparator::NotEqual) 
       
  2279         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2280         << ( QMessageIdList() << messageIds[4] )
       
  2281         << "";
       
  2282 
       
  2283     QTest::newRow("priority inequality 3")
       
  2284         << QMessageFilter::byPriority(QMessage::NormalPriority, QMessageDataComparator::NotEqual) 
       
  2285         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[4] )
       
  2286         << ( QMessageIdList() << messageIds[0] << messageIds[3] )
       
  2287         << "";
       
  2288 
       
  2289     QTest::newRow("size equality 1")
       
  2290         << QMessageFilter::bySize(messageSizes[3], QMessageDataComparator::Equal) 
       
  2291         << ( QMessageIdList() << messageIds[3] )
       
  2292         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[4] )
       
  2293         << "";
       
  2294 
       
  2295     QTest::newRow("size equality 2")
       
  2296         << QMessageFilter::bySize(messageSizes[2], QMessageDataComparator::Equal) 
       
  2297         << ( QMessageIdList() << messageIds[2] )
       
  2298         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[3] << messageIds[4] )
       
  2299         << "";
       
  2300 
       
  2301     QTest::newRow("size equality non-matching")
       
  2302         << QMessageFilter::bySize(13, QMessageDataComparator::Equal) 
       
  2303         << QMessageIdList()
       
  2304         << messageIds
       
  2305         << "";
       
  2306 
       
  2307     QTest::newRow("size equality zero")
       
  2308         << QMessageFilter::bySize(0, QMessageDataComparator::Equal) 
       
  2309         << QMessageIdList()
       
  2310         << messageIds
       
  2311         << "";
       
  2312 
       
  2313     QTest::newRow("size inequality 1")
       
  2314         << QMessageFilter::bySize(messageSizes[3], QMessageDataComparator::NotEqual) 
       
  2315         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[4] )
       
  2316         << ( QMessageIdList() << messageIds[3] )
       
  2317         << "";
       
  2318 
       
  2319     QTest::newRow("size inequality 2")
       
  2320         << QMessageFilter::bySize(messageSizes[2], QMessageDataComparator::NotEqual) 
       
  2321         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[3] << messageIds[4] )
       
  2322         << ( QMessageIdList() << messageIds[2] )
       
  2323         << "";
       
  2324 
       
  2325     QTest::newRow("size inequality non-matching")
       
  2326         << QMessageFilter::bySize(13, QMessageDataComparator::NotEqual) 
       
  2327         << messageIds
       
  2328         << QMessageIdList()
       
  2329         << "";
       
  2330 
       
  2331     QTest::newRow("size inequality empty")
       
  2332         << QMessageFilter::bySize(0, QMessageDataComparator::NotEqual) 
       
  2333         << messageIds
       
  2334         << QMessageIdList()
       
  2335         << "";
       
  2336 
       
  2337 #if defined(Q_OS_WIN) && defined(_WIN32_WCE)
       
  2338 	// Sizes are ordered differently on CE
       
  2339     uint discriminator(messageSizes[2]);
       
  2340 #else
       
  2341     uint discriminator(messageSizes[1]);
       
  2342 #endif
       
  2343 
       
  2344     QTest::newRow("size less than")
       
  2345         << QMessageFilter::bySize(discriminator, QMessageDataComparator::LessThan) 
       
  2346 #if defined(Q_OS_WIN) && defined(_WIN32_WCE)
       
  2347         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[4] )
       
  2348         << ( QMessageIdList() << messageIds[2] << messageIds[3] )
       
  2349 #elif defined(Q_OS_SYMBIAN)
       
  2350         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2351         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2352 #else
       
  2353         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2354         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2355 #endif
       
  2356         << "";
       
  2357 
       
  2358     QTest::newRow("size less than equal")
       
  2359         << QMessageFilter::bySize(discriminator, QMessageDataComparator::LessThanEqual) 
       
  2360 #if defined(Q_OS_WIN) && defined(_WIN32_WCE)
       
  2361         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[4] )
       
  2362         << ( QMessageIdList() << messageIds[3] )
       
  2363 #else
       
  2364         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[3] << messageIds[4] )
       
  2365         << ( QMessageIdList() << messageIds[2] )
       
  2366 #endif
       
  2367         << "";
       
  2368 
       
  2369     QTest::newRow("size greater than")
       
  2370         << QMessageFilter::bySize(discriminator, QMessageDataComparator::GreaterThan) 
       
  2371 #if defined(Q_OS_WIN) && defined(_WIN32_WCE)
       
  2372         << ( QMessageIdList() << messageIds[3] )
       
  2373         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[4] )
       
  2374 #else
       
  2375         << ( QMessageIdList() << messageIds[2] )
       
  2376         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[3] << messageIds[4] )
       
  2377 #endif
       
  2378         << "";
       
  2379 
       
  2380     QTest::newRow("size greater than equal")
       
  2381         << QMessageFilter::bySize(discriminator, QMessageDataComparator::GreaterThanEqual) 
       
  2382 #if defined(Q_OS_WIN) && defined(_WIN32_WCE)
       
  2383         << ( QMessageIdList() << messageIds[2] << messageIds[3] )
       
  2384         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[4] )
       
  2385 #elif defined(Q_OS_SYMBIAN)        
       
  2386         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2387         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2388 #else
       
  2389         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2390         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2391 #endif
       
  2392         << "";
       
  2393 
       
  2394     QTest::newRow("parentAccountId equality 1")
       
  2395         << QMessageFilter::byParentAccountId(accountIds[0], QMessageDataComparator::Equal) 
       
  2396         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2397         << ( QMessageIdList() << messageIds[0] )
       
  2398         << "";
       
  2399 
       
  2400     QTest::newRow("parentAccountId equality 2")
       
  2401         << QMessageFilter::byParentAccountId(accountIds[2], QMessageDataComparator::Equal) 
       
  2402         << ( QMessageIdList() << messageIds[0] )
       
  2403         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2404         << "";
       
  2405 
       
  2406     QTest::newRow("parentAccountId equality invalid")
       
  2407         << QMessageFilter::byParentAccountId(QMessageAccountId(), QMessageDataComparator::Equal) 
       
  2408         << QMessageIdList()
       
  2409         << messageIds
       
  2410         << "";
       
  2411 
       
  2412     QTest::newRow("parentAccountId inequality 1")
       
  2413         << QMessageFilter::byParentAccountId(accountIds[0], QMessageDataComparator::NotEqual) 
       
  2414         << ( QMessageIdList() << messageIds[0] )
       
  2415         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2416         << "";
       
  2417 
       
  2418     QTest::newRow("parentAccountId inequality 2")
       
  2419         << QMessageFilter::byParentAccountId(accountIds[2], QMessageDataComparator::NotEqual) 
       
  2420         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2421         << ( QMessageIdList() << messageIds[0] )
       
  2422         << "";
       
  2423 
       
  2424     QTest::newRow("parentAccountId inequality invalid")
       
  2425         << QMessageFilter::byParentAccountId(QMessageAccountId(), QMessageDataComparator::NotEqual) 
       
  2426         << messageIds
       
  2427         << QMessageIdList()
       
  2428         << "";
       
  2429 
       
  2430     QTest::newRow("parentAccountId filter inclusion 1")
       
  2431         << QMessageFilter::byParentAccountId(QMessageAccountFilter::byName("Alter Ego", QMessageDataComparator::Equal), QMessageDataComparator::Includes) 
       
  2432         << ( QMessageIdList() << messageIds[0] )
       
  2433         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2434         << "";
       
  2435 
       
  2436     QTest::newRow("parentAccountId filter inclusion 2")
       
  2437         << QMessageFilter::byParentAccountId(QMessageAccountFilter::byName("Work", QMessageDataComparator::Equal), QMessageDataComparator::Includes) 
       
  2438         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2439         << ( QMessageIdList() << messageIds[0] )
       
  2440         << "";
       
  2441 
       
  2442     QTest::newRow("parentAccountId filter inclusion 3")
       
  2443         << QMessageFilter::byParentAccountId(QMessageAccountFilter::byName("o", QMessageDataComparator::Includes), QMessageDataComparator::Includes) 
       
  2444         << messageIds
       
  2445         << QMessageIdList()
       
  2446         << "";
       
  2447 
       
  2448     QTest::newRow("parentAccountId filter inclusion empty")
       
  2449         << QMessageFilter::byParentAccountId(QMessageAccountFilter(), QMessageDataComparator::Includes) 
       
  2450         << messageIds
       
  2451         << QMessageIdList()
       
  2452         << "";
       
  2453 
       
  2454     QTest::newRow("parentAccountId filter inclusion non-matching")
       
  2455         << QMessageFilter::byParentAccountId(QMessageAccountFilter::byName("NoneSuch"), QMessageDataComparator::Includes) 
       
  2456         << QMessageIdList()
       
  2457         << messageIds
       
  2458         << "";
       
  2459 
       
  2460     QTest::newRow("parentAccountId filter exclusion 1")
       
  2461         << QMessageFilter::byParentAccountId(QMessageAccountFilter::byName("Alter Ego", QMessageDataComparator::Equal), QMessageDataComparator::Excludes) 
       
  2462         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2463         << ( QMessageIdList() << messageIds[0] )
       
  2464         << "";
       
  2465 
       
  2466     QTest::newRow("parentAccountId filter exclusion 2")
       
  2467         << QMessageFilter::byParentAccountId(QMessageAccountFilter::byName("Work", QMessageDataComparator::Equal), QMessageDataComparator::Excludes) 
       
  2468         << ( QMessageIdList() << messageIds[0] )
       
  2469         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2470         << "";
       
  2471 
       
  2472     QTest::newRow("parentAccountId filter exclusion 3")
       
  2473         << QMessageFilter::byParentAccountId(QMessageAccountFilter::byName("o", QMessageDataComparator::Includes), QMessageDataComparator::Excludes) 
       
  2474         << QMessageIdList()
       
  2475         << messageIds
       
  2476         << "";
       
  2477 
       
  2478     QTest::newRow("parentAccountId filter exclusion empty")
       
  2479         << QMessageFilter::byParentAccountId(QMessageAccountFilter(), QMessageDataComparator::Excludes) 
       
  2480         << QMessageIdList()
       
  2481         << messageIds
       
  2482         << "";
       
  2483 
       
  2484     QTest::newRow("parentAccountId filter exclusion non-matching")
       
  2485         << QMessageFilter::byParentAccountId(QMessageAccountFilter::byName("NoneSuch"), QMessageDataComparator::Excludes) 
       
  2486         << messageIds
       
  2487         << QMessageIdList()
       
  2488         << "";
       
  2489 
       
  2490     QTest::newRow("standardFolder equality 1")
       
  2491         << QMessageFilter::byStandardFolder(QMessage::InboxFolder, QMessageDataComparator::Equal)
       
  2492 #ifndef Q_OS_SYMBIAN    
       
  2493         << messageIds
       
  2494         << ( QMessageIdList() )
       
  2495 #else // Created folders are not mapped to any Standard Folder in Symbian 
       
  2496       // <=> No messages will be returned, if messages are searched using Standard Folder Filter     
       
  2497         << ( QMessageIdList() )
       
  2498         << ( QMessageIdList() )
       
  2499 #endif        
       
  2500         << "";
       
  2501 
       
  2502     QTest::newRow("standardFolder equality 2")
       
  2503         << QMessageFilter::byStandardFolder(QMessage::TrashFolder, QMessageDataComparator::Equal) 
       
  2504 #ifndef Q_OS_SYMBIAN    
       
  2505         << ( QMessageIdList() )
       
  2506         << messageIds
       
  2507 #else // Created folders are not mapped to any Standard Folder in Symbian 
       
  2508       // <=> No messages will be returned, if messages are searched using Standard Folder Filter     
       
  2509         << ( QMessageIdList() )
       
  2510         << ( QMessageIdList() )
       
  2511 #endif        
       
  2512         << "";
       
  2513 
       
  2514     QTest::newRow("standardFolder inequality 1")
       
  2515         << QMessageFilter::byStandardFolder(QMessage::InboxFolder, QMessageDataComparator::NotEqual) 
       
  2516 #ifndef Q_OS_SYMBIAN    
       
  2517         << ( QMessageIdList() )
       
  2518         << messageIds
       
  2519 #else // Created folders are not mapped to any Standard Folder in Symbian 
       
  2520       // <=> No messages will be returned, if messages are searched using Standard Folder Filter     
       
  2521         << ( QMessageIdList() )
       
  2522         << ( QMessageIdList() )
       
  2523 #endif        
       
  2524         << "";
       
  2525 
       
  2526     QTest::newRow("standardFolder inequality 2")
       
  2527         << QMessageFilter::byStandardFolder(QMessage::TrashFolder, QMessageDataComparator::NotEqual) 
       
  2528 #ifndef Q_OS_SYMBIAN    
       
  2529         << messageIds
       
  2530         << ( QMessageIdList() )
       
  2531 #else // Created folders are not mapped to any Standard Folder in Symbian 
       
  2532       // <=> No messages will be returned, if messages are searched using Standard Folder Filter     
       
  2533         << ( QMessageIdList() )
       
  2534         << ( QMessageIdList() )
       
  2535 #endif        
       
  2536         << "";
       
  2537 
       
  2538     QTest::newRow("parentFolderId equality 1")
       
  2539         << QMessageFilter::byParentFolderId(folderIds[0], QMessageDataComparator::Equal) 
       
  2540         << ( QMessageIdList() << messageIds[0] )
       
  2541         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2542         << "";
       
  2543 
       
  2544     QTest::newRow("parentFolderId equality 2")
       
  2545         << QMessageFilter::byParentFolderId(folderIds[1], QMessageDataComparator::Equal) 
       
  2546         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2547         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2548         << "";
       
  2549 
       
  2550     QTest::newRow("parentFolderId equality invalid")
       
  2551         << QMessageFilter::byParentFolderId(QMessageFolderId(), QMessageDataComparator::Equal) 
       
  2552         << QMessageIdList()
       
  2553         << messageIds
       
  2554         << "";
       
  2555 
       
  2556     QTest::newRow("parentFolderId inequality 1")
       
  2557         << QMessageFilter::byParentFolderId(folderIds[0], QMessageDataComparator::NotEqual) 
       
  2558         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2559         << ( QMessageIdList() << messageIds[0] )
       
  2560         << "";
       
  2561 
       
  2562     QTest::newRow("parentFolderId inequality 2")
       
  2563         << QMessageFilter::byParentFolderId(folderIds[1], QMessageDataComparator::NotEqual) 
       
  2564         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2565         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2566         << "";
       
  2567 
       
  2568     QTest::newRow("parentFolderId inequality invalid")
       
  2569         << QMessageFilter::byParentFolderId(QMessageFolderId(), QMessageDataComparator::NotEqual) 
       
  2570         << messageIds
       
  2571         << QMessageIdList()
       
  2572         << "";
       
  2573 
       
  2574     QTest::newRow("parentFolderId filter inclusion 1")
       
  2575         << QMessageFilter::byParentFolderId(QMessageFolderFilter::byPath("My messages", QMessageDataComparator::Equal), QMessageDataComparator::Includes)
       
  2576         << ( QMessageIdList() << messageIds[0] )
       
  2577         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2578         << "";
       
  2579 
       
  2580     QTest::newRow("parentFolderId filter inclusion 2")
       
  2581         << QMessageFilter::byParentFolderId(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Equal), QMessageDataComparator::Includes)
       
  2582         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2583         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2584         << "";
       
  2585 
       
  2586     QTest::newRow("parentFolderId filter inclusion 3")
       
  2587         << QMessageFilter::byParentFolderId(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Includes), QMessageDataComparator::Includes)
       
  2588 #ifndef Q_OS_SYMBIAN    
       
  2589         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2590         << ( QMessageIdList() << messageIds[0] )
       
  2591 #else
       
  2592         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2593         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2594 #endif
       
  2595         << "";
       
  2596 
       
  2597     QTest::newRow("parentFolderId filter inclusion empty")
       
  2598         << QMessageFilter::byParentFolderId(QMessageFolderFilter(), QMessageDataComparator::Includes) 
       
  2599         << messageIds
       
  2600         << QMessageIdList()
       
  2601         << "";
       
  2602 
       
  2603     QTest::newRow("parentFolderId filter inclusion non-matching")
       
  2604         << QMessageFilter::byParentFolderId(QMessageFolderFilter::byPath("NoneSuch"), QMessageDataComparator::Includes) 
       
  2605         << QMessageIdList()
       
  2606         << messageIds
       
  2607         << "";
       
  2608 
       
  2609     QTest::newRow("parentFolderId filter exclusion 1")
       
  2610         << QMessageFilter::byParentFolderId(QMessageFolderFilter::byPath("My messages", QMessageDataComparator::Equal), QMessageDataComparator::Excludes)
       
  2611         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2612         << ( QMessageIdList() << messageIds[0] )
       
  2613         << "";
       
  2614 
       
  2615     QTest::newRow("parentFolderId filter exclusion 2")
       
  2616         << QMessageFilter::byParentFolderId(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Equal), QMessageDataComparator::Excludes)
       
  2617         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2618         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2619         << "";
       
  2620 
       
  2621     QTest::newRow("parentFolderId filter exclusion 3")
       
  2622         << QMessageFilter::byParentFolderId(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Includes), QMessageDataComparator::Excludes)
       
  2623 #ifndef Q_OS_SYMBIAN    
       
  2624         << ( QMessageIdList() << messageIds[0] )
       
  2625         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2626 #else
       
  2627         << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  2628         << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2629 #endif
       
  2630         << "";
       
  2631 
       
  2632     QTest::newRow("parentFolderId filter exclusion empty")
       
  2633         << QMessageFilter::byParentFolderId(QMessageFolderFilter(), QMessageDataComparator::Excludes) 
       
  2634         << QMessageIdList()
       
  2635         << messageIds
       
  2636         << "";
       
  2637 
       
  2638     QTest::newRow("parentFolderId filter exclusion non-matching")
       
  2639         << QMessageFilter::byParentFolderId(QMessageFolderFilter::byPath("NoneSuch"), QMessageDataComparator::Excludes) 
       
  2640         << messageIds
       
  2641         << QMessageIdList()
       
  2642         << "";
       
  2643 
       
  2644 #ifndef Q_OS_SYMBIAN
       
  2645     QTest::newRow("ancestorFolderIds inclusion 1")
       
  2646         << QMessageFilter::byAncestorFolderIds(folderIds[1], QMessageDataComparator::Includes)
       
  2647         << ( QMessageIdList() << messageIds[3] << messageIds[4] )
       
  2648         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] )
       
  2649         << "";
       
  2650 
       
  2651     QTest::newRow("ancestorFolderIds inclusion 2")
       
  2652         << QMessageFilter::byAncestorFolderIds(folderIds[2], QMessageDataComparator::Includes) 
       
  2653         << ( QMessageIdList() << messageIds[4] )
       
  2654         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2655         << "";
       
  2656 
       
  2657     QTest::newRow("ancestorFolderIds inclusion invalid")
       
  2658         << QMessageFilter::byAncestorFolderIds(QMessageFolderId(), QMessageDataComparator::Includes) 
       
  2659         << QMessageIdList()
       
  2660         << messageIds
       
  2661         << "";
       
  2662 
       
  2663     QTest::newRow("ancestorFolderIds exclusion 1")
       
  2664         << QMessageFilter::byAncestorFolderIds(folderIds[1], QMessageDataComparator::Excludes) 
       
  2665         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] )
       
  2666         << ( QMessageIdList() << messageIds[3] << messageIds[4] )
       
  2667         << "";
       
  2668 
       
  2669     QTest::newRow("ancestorFolderIds exclusion 2")
       
  2670         << QMessageFilter::byAncestorFolderIds(folderIds[2], QMessageDataComparator::Excludes) 
       
  2671         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2672         << ( QMessageIdList() << messageIds[4] )
       
  2673         << "";
       
  2674 
       
  2675     QTest::newRow("ancestorFolderIds exclusion invalid")
       
  2676         << QMessageFilter::byAncestorFolderIds(QMessageFolderId(), QMessageDataComparator::Excludes) 
       
  2677         << messageIds
       
  2678         << QMessageIdList()
       
  2679         << "";
       
  2680 
       
  2681     QTest::newRow("ancestorFolderIds filter inclusion 1")
       
  2682         << QMessageFilter::byAncestorFolderIds(QMessageFolderFilter::byName("Innbox", QMessageDataComparator::Equal), QMessageDataComparator::Includes) 
       
  2683         << ( QMessageIdList() << messageIds[3] << messageIds[4] )
       
  2684         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] )
       
  2685         << "";
       
  2686 
       
  2687     QTest::newRow("ancestorFolderIds filter inclusion 2")
       
  2688         << QMessageFilter::byAncestorFolderIds(QMessageFolderFilter::byName("X-Announce", QMessageDataComparator::Equal), QMessageDataComparator::Includes) 
       
  2689         << ( QMessageIdList() << messageIds[4] )
       
  2690         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2691         << "";
       
  2692 
       
  2693     QTest::newRow("ancestorFolderIds filter inclusion 3")
       
  2694         << QMessageFilter::byAncestorFolderIds(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Includes), QMessageDataComparator::Includes)
       
  2695         << ( QMessageIdList() << messageIds[3] << messageIds[4] )
       
  2696         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] )
       
  2697         << "";
       
  2698 
       
  2699     QTest::newRow("ancestorFolderIds filter inclusion empty")
       
  2700         << QMessageFilter::byAncestorFolderIds(QMessageFolderFilter(), QMessageDataComparator::Includes) 
       
  2701         << ( QMessageIdList() << messageIds[3] << messageIds[4] )
       
  2702         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] )
       
  2703         << "";
       
  2704 
       
  2705     QTest::newRow("ancestorFolderIds filter inclusion non-matching")
       
  2706         << QMessageFilter::byAncestorFolderIds(QMessageFolderFilter::byPath("NoneSuch"), QMessageDataComparator::Includes) 
       
  2707         << QMessageIdList()
       
  2708         << messageIds
       
  2709         << "";
       
  2710 
       
  2711     QTest::newRow("ancestorFolderIds filter exclusion 1")
       
  2712         << QMessageFilter::byAncestorFolderIds(QMessageFolderFilter::byName("Innbox", QMessageDataComparator::Equal), QMessageDataComparator::Excludes) 
       
  2713         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] )
       
  2714         << ( QMessageIdList() << messageIds[3] << messageIds[4] )
       
  2715         << "";
       
  2716 
       
  2717     QTest::newRow("ancestorFolderIds filter exclusion 2")
       
  2718         << QMessageFilter::byAncestorFolderIds(QMessageFolderFilter::byName("X-Announce", QMessageDataComparator::Equal), QMessageDataComparator::Excludes) 
       
  2719         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2720         << ( QMessageIdList() << messageIds[4] )
       
  2721         << "";
       
  2722 
       
  2723     QTest::newRow("ancestorFolderIds filter exclusion 3")
       
  2724         << QMessageFilter::byAncestorFolderIds(QMessageFolderFilter::byPath("Innbox", QMessageDataComparator::Includes), QMessageDataComparator::Excludes)
       
  2725         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] )
       
  2726         << ( QMessageIdList() << messageIds[3] << messageIds[4] )
       
  2727         << "";
       
  2728 
       
  2729     QTest::newRow("ancestorFolderIds filter exclusion empty")
       
  2730         << QMessageFilter::byAncestorFolderIds(QMessageFolderFilter(), QMessageDataComparator::Excludes) 
       
  2731         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] )
       
  2732         << ( QMessageIdList() << messageIds[3] << messageIds[4] )
       
  2733         << "";
       
  2734 
       
  2735     QTest::newRow("ancestorFolderIds filter exclusion non-matching")
       
  2736         << QMessageFilter::byAncestorFolderIds(QMessageFolderFilter::byPath("NoneSuch"), QMessageDataComparator::Excludes) 
       
  2737         << messageIds
       
  2738         << QMessageIdList()
       
  2739         << "";
       
  2740 #endif    
       
  2741 
       
  2742     // Test some basic combinations
       
  2743     QTest::newRow("status mask inclusion AND timeStamp greater than")
       
  2744         << ( QMessageFilter::byStatus(QMessage::Read, QMessageDataComparator::Includes) &
       
  2745              QMessageFilter::byTimeStamp(epoch, QMessageDataComparator::GreaterThan) )
       
  2746         << ( QMessageIdList() << messageIds[3] )
       
  2747         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[4] )
       
  2748         << "";
       
  2749 
       
  2750     QTest::newRow("size greater than equal OR timeStamp greater than")
       
  2751         << ( QMessageFilter::bySize(discriminator, QMessageDataComparator::GreaterThanEqual) |
       
  2752              QMessageFilter::byTimeStamp(epoch, QMessageDataComparator::GreaterThan) )
       
  2753 #if defined(Q_OS_WIN) && defined(_WIN32_WCE)
       
  2754         << ( QMessageIdList() << messageIds[2] << messageIds[3] )
       
  2755         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[4] )
       
  2756 #elif defined(Q_OS_SYMBIAN)        
       
  2757         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2758         << ( QMessageIdList() << messageIds[0] << messageIds[4] )
       
  2759 #else
       
  2760         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2761         << ( QMessageIdList() << messageIds[0] << messageIds[4] )
       
  2762 #endif
       
  2763         << "";
       
  2764 
       
  2765     QTest::newRow("sender inclusion AND timeStamp greater than")
       
  2766         << ( QMessageFilter::bySender("Boss", QMessageDataComparator::Includes) &
       
  2767              QMessageFilter::byTimeStamp(epoch, QMessageDataComparator::GreaterThan) )
       
  2768         << ( QMessageIdList() << messageIds[2] )
       
  2769         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[3] << messageIds[4] )
       
  2770         << "";
       
  2771 
       
  2772     QTest::newRow("subject inclusion OR subject exclusion")
       
  2773         << ( QMessageFilter::bySubject("agenda", QMessageDataComparator::Includes) |
       
  2774              QMessageFilter::bySubject("ee", QMessageDataComparator::Excludes) )
       
  2775         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2776         << ( QMessageIdList() << messageIds[0] << messageIds[4] )
       
  2777         << "";
       
  2778 
       
  2779     QMessageFilter andEquals(QMessageFilter::bySender("Boss", QMessageDataComparator::Includes));
       
  2780     andEquals &= QMessageFilter::byTimeStamp(epoch, QMessageDataComparator::GreaterThan);
       
  2781     QTest::newRow("QMessageFilter::operator&=")
       
  2782         << andEquals
       
  2783         << ( QMessageIdList() << messageIds[2] )
       
  2784         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[3] << messageIds[4] )
       
  2785         << "";
       
  2786 
       
  2787     QMessageFilter orEquals(QMessageFilter::bySubject("agenda", QMessageDataComparator::Includes));
       
  2788     orEquals |= QMessageFilter::bySubject("ee", QMessageDataComparator::Excludes);
       
  2789     QTest::newRow("QMessageFilter::operator|=")
       
  2790         << orEquals
       
  2791         << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2792         << ( QMessageIdList() << messageIds[0] << messageIds[4] )
       
  2793         << "";
       
  2794 
       
  2795     QTest::newRow("body")
       
  2796         << QMessageFilter()
       
  2797         << ( QMessageIdList() << messageIds[0] << messageIds[2] )
       
  2798         << QMessageIdList() // contains body but does not match filter
       
  2799         << "summer";
       
  2800 
       
  2801     QTest::newRow("body and subject")
       
  2802         << QMessageFilter::bySubject("message", QMessageDataComparator::Includes)
       
  2803         << ( QMessageIdList() << messageIds[2] )
       
  2804         << ( QMessageIdList() << messageIds[0] ) // contains body but does not match filter
       
  2805         << "summer";
       
  2806 
       
  2807     // Test matchFlags
       
  2808     QMessageFilter caseInsensitive1(QMessageFilter::bySubject("free beer", QMessageDataComparator::Equal));
       
  2809     QTest::newRow("matchFlags:caseInsensitive 1")
       
  2810         << caseInsensitive1
       
  2811         << ( QMessageIdList() << messageIds[4] )
       
  2812         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2813         << "";
       
  2814 
       
  2815     QMessageFilter caseSensitive1(QMessageFilter::bySubject("free beer", QMessageDataComparator::Equal));
       
  2816     caseSensitive1.setMatchFlags(QMessageDataComparator::MatchCaseSensitive);
       
  2817     QTest::newRow("matchFlags:caseSensitive 1")
       
  2818         << caseSensitive1
       
  2819         << QMessageIdList()
       
  2820         << messageIds
       
  2821         << "";
       
  2822 
       
  2823     QMessageFilter caseSensitive2(QMessageFilter::bySubject("Free beer", QMessageDataComparator::Equal));
       
  2824     caseSensitive2.setMatchFlags(QMessageDataComparator::MatchCaseSensitive);
       
  2825     QTest::newRow("matchFlags:caseSensitive 2")
       
  2826         << caseSensitive2
       
  2827         << ( QMessageIdList() << messageIds[4] )
       
  2828         << ( QMessageIdList() << messageIds[0] << messageIds[1] << messageIds[2] << messageIds[3] )
       
  2829         << "";
       
  2830 }
       
  2831 
       
  2832 void tst_QMessageStoreKeys::testMessageFilter()
       
  2833 {
       
  2834     QFETCH(QMessageFilter, filter);
       
  2835     QFETCH(QMessageIdList, ids);
       
  2836     QFETCH(QMessageIdList, negatedIds);
       
  2837     QFETCH(QString, body);
       
  2838 
       
  2839     if (filter.isSupported()) {
       
  2840         QVERIFY(filter == filter);
       
  2841         QCOMPARE(filter != QMessageFilter(), !filter.isEmpty());
       
  2842         
       
  2843         // Order is irrelevant for filtering
       
  2844         if (body.isEmpty()) {
       
  2845             QCOMPARE(manager->queryMessages(filter&~existingAccountsFilter).toSet().subtract(existingMessageIds), ids.toSet());
       
  2846             QCOMPARE(manager->queryMessages(~filter&~existingAccountsFilter).toSet().subtract(existingMessageIds), negatedIds.toSet());
       
  2847         } else {
       
  2848             QCOMPARE(manager->queryMessages(filter&~existingAccountsFilter, body).toSet().subtract(existingMessageIds), ids.toSet());
       
  2849             QCOMPARE(manager->queryMessages(~filter&~existingAccountsFilter, body).toSet().subtract(existingMessageIds), negatedIds.toSet());
       
  2850         }
       
  2851     } else {
       
  2852         QSKIP("Unsupported for this configuration", SkipSingle);
       
  2853     }
       
  2854 }
       
  2855 
       
  2856 void tst_QMessageStoreKeys::testMessageOrdering_data()
       
  2857 {
       
  2858     QTest::addColumn<MessageSortList>("sorts");
       
  2859     QTest::addColumn<MessageListList>("ids");
       
  2860 
       
  2861     QTest::newRow("type ascending")
       
  2862         << ( MessageSortList() << QMessageSortOrder::byType(Qt::AscendingOrder) )
       
  2863 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN))
       
  2864         << ( MessageListList() << messageIds ); // All messages are Email type
       
  2865 #else
       
  2866         << ( MessageListList() << ( QMessageIdList() << messageIds[0] )
       
  2867                                << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] ) );
       
  2868 #endif
       
  2869 
       
  2870     QTest::newRow("type descending")
       
  2871         << ( MessageSortList() << QMessageSortOrder::byType(Qt::DescendingOrder) )
       
  2872 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN))
       
  2873         << ( MessageListList() << messageIds ); // All messages are Email type
       
  2874 #else
       
  2875         << ( MessageListList() << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[3] << messageIds[4] )
       
  2876                                << ( QMessageIdList() << messageIds[0] ) );
       
  2877 #endif
       
  2878 
       
  2879     QTest::newRow("sender ascending")
       
  2880         << ( MessageSortList() << QMessageSortOrder::bySender(Qt::AscendingOrder) )
       
  2881         << ( MessageListList() << ( QMessageIdList() << messageIds[2] << messageIds[4] )
       
  2882                                << ( QMessageIdList() << messageIds[1] )
       
  2883                                << ( QMessageIdList() << messageIds[0] )
       
  2884                                << ( QMessageIdList() << messageIds[3] ) );
       
  2885 
       
  2886     QTest::newRow("sender descending")
       
  2887         << ( MessageSortList() << QMessageSortOrder::bySender(Qt::DescendingOrder) )
       
  2888         << ( MessageListList() << ( QMessageIdList() << messageIds[3] )
       
  2889                                << ( QMessageIdList() << messageIds[0] )
       
  2890                                << ( QMessageIdList() << messageIds[1] )
       
  2891                                << ( QMessageIdList() << messageIds[2] << messageIds[4] ) );
       
  2892 
       
  2893     QTest::newRow("recipients ascending")
       
  2894         << ( MessageSortList() << QMessageSortOrder::byRecipients(Qt::AscendingOrder) )
       
  2895         << ( MessageListList() << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2896                                << ( QMessageIdList() << messageIds[0] )
       
  2897                                << ( QMessageIdList() << messageIds[3] << messageIds[4] ) );
       
  2898 
       
  2899     QTest::newRow("recipients descending")
       
  2900         << ( MessageSortList() << QMessageSortOrder::byRecipients(Qt::DescendingOrder) )
       
  2901         << ( MessageListList() << ( QMessageIdList() << messageIds[3] << messageIds[4] )
       
  2902                                << ( QMessageIdList() << messageIds[0] )
       
  2903                                << ( QMessageIdList() << messageIds[1] << messageIds[2] ) );
       
  2904 
       
  2905     QTest::newRow("subject ascending")
       
  2906         << ( MessageSortList() << QMessageSortOrder::bySubject(Qt::AscendingOrder) )
       
  2907         << ( MessageListList() << ( QMessageIdList() << messageIds[4] )
       
  2908                                << ( QMessageIdList() << messageIds[0] )
       
  2909                                << ( QMessageIdList() << messageIds[1] )
       
  2910                                << ( QMessageIdList() << messageIds[2] )
       
  2911                                << ( QMessageIdList() << messageIds[3] ) );
       
  2912 
       
  2913     QTest::newRow("subject descending")
       
  2914         << ( MessageSortList() << QMessageSortOrder::bySubject(Qt::DescendingOrder) )
       
  2915         << ( MessageListList() << ( QMessageIdList() << messageIds[3] )
       
  2916                                << ( QMessageIdList() << messageIds[2] )
       
  2917                                << ( QMessageIdList() << messageIds[1] )
       
  2918                                << ( QMessageIdList() << messageIds[0] )
       
  2919                                << ( QMessageIdList() << messageIds[4] ) );
       
  2920 
       
  2921     QTest::newRow("timeStamp ascending")
       
  2922         << ( MessageSortList() << QMessageSortOrder::byTimeStamp(Qt::AscendingOrder) )
       
  2923         << ( MessageListList() << ( QMessageIdList() << messageIds[4] )
       
  2924                                << ( QMessageIdList() << messageIds[0] << messageIds[1] )
       
  2925                                << ( QMessageIdList() << messageIds[2] << messageIds[3] ) );
       
  2926 
       
  2927     QTest::newRow("timeStamp descending")
       
  2928         << ( MessageSortList() << QMessageSortOrder::byTimeStamp(Qt::DescendingOrder) )
       
  2929         << ( MessageListList() << ( QMessageIdList() << messageIds[2] << messageIds[3] )
       
  2930                                << ( QMessageIdList() << messageIds[0] << messageIds[1] )
       
  2931                                << ( QMessageIdList() << messageIds[4] ) );
       
  2932 
       
  2933 #ifndef Q_OS_SYMBIAN
       
  2934     QTest::newRow("receptionTimeStamp ascending")
       
  2935         << ( MessageSortList() << QMessageSortOrder::byReceptionTimeStamp(Qt::AscendingOrder) )
       
  2936         << ( MessageListList() << ( QMessageIdList() << messageIds[4] )
       
  2937                                << ( QMessageIdList() << messageIds[0] )
       
  2938                                << ( QMessageIdList() << messageIds[3] )
       
  2939                                << ( QMessageIdList() << messageIds[2] )
       
  2940                                << ( QMessageIdList() << messageIds[1] ) );
       
  2941 
       
  2942     QTest::newRow("receptionTimeStamp descending")
       
  2943         << ( MessageSortList() << QMessageSortOrder::byReceptionTimeStamp(Qt::DescendingOrder) )
       
  2944         << ( MessageListList() << ( QMessageIdList() << messageIds[1] )
       
  2945                                << ( QMessageIdList() << messageIds[2] )
       
  2946                                << ( QMessageIdList() << messageIds[3] )
       
  2947                                << ( QMessageIdList() << messageIds[0] )
       
  2948                                << ( QMessageIdList() << messageIds[4] ) );
       
  2949 #endif    
       
  2950 
       
  2951     QTest::newRow("priority ascending")
       
  2952         << ( MessageSortList() << QMessageSortOrder::byPriority(Qt::AscendingOrder) )
       
  2953         << ( MessageListList() << ( QMessageIdList() << messageIds[4] )
       
  2954                                << ( QMessageIdList() << messageIds[0] << messageIds[3] )
       
  2955                                << ( QMessageIdList() << messageIds[1] << messageIds[2] ) );
       
  2956 
       
  2957     QTest::newRow("priority descending")
       
  2958         << ( MessageSortList() << QMessageSortOrder::byPriority(Qt::DescendingOrder) )
       
  2959         << ( MessageListList() << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  2960                                << ( QMessageIdList() << messageIds[0] << messageIds[3] )
       
  2961                                << ( QMessageIdList() << messageIds[4] ) );
       
  2962 
       
  2963     QTest::newRow("size ascending")
       
  2964         << ( MessageSortList() << QMessageSortOrder::bySize(Qt::AscendingOrder) )
       
  2965 #if defined(Q_OS_SYMBIAN)
       
  2966         << ( MessageListList() << ( QMessageIdList() << messageIds[3] )
       
  2967                                << ( QMessageIdList() << messageIds[0] )
       
  2968                                << ( QMessageIdList() << messageIds[4] )
       
  2969                                << ( QMessageIdList() << messageIds[1] )
       
  2970 #else    
       
  2971         << ( MessageListList() << ( QMessageIdList() << messageIds[0] )
       
  2972 #if defined(Q_OS_WIN)
       
  2973                                << ( QMessageIdList() << messageIds[4] )
       
  2974                                << ( QMessageIdList() << messageIds[3] )
       
  2975 #else
       
  2976                                << ( QMessageIdList() << messageIds[3] )
       
  2977                                << ( QMessageIdList() << messageIds[4] )
       
  2978 #endif
       
  2979                                << ( QMessageIdList() << messageIds[1] )
       
  2980 #endif    
       
  2981                                << ( QMessageIdList() << messageIds[2] ) );
       
  2982 
       
  2983     QTest::newRow("size descending")
       
  2984         << ( MessageSortList() << QMessageSortOrder::bySize(Qt::DescendingOrder) )
       
  2985         << ( MessageListList() << ( QMessageIdList() << messageIds[2] )
       
  2986 #if defined(Q_OS_SYMBIAN)
       
  2987                                << ( QMessageIdList() << messageIds[1] )
       
  2988                                << ( QMessageIdList() << messageIds[4] )
       
  2989                                << ( QMessageIdList() << messageIds[0] )
       
  2990                                << ( QMessageIdList() << messageIds[3] ) );
       
  2991 #else    
       
  2992                                << ( QMessageIdList() << messageIds[1] )
       
  2993 #if defined(Q_OS_WIN)
       
  2994                                << ( QMessageIdList() << messageIds[3] )
       
  2995                                << ( QMessageIdList() << messageIds[4] )
       
  2996 #else
       
  2997                                << ( QMessageIdList() << messageIds[4] )
       
  2998                                << ( QMessageIdList() << messageIds[3] )
       
  2999 #endif
       
  3000                                << ( QMessageIdList() << messageIds[0] ) );
       
  3001 #endif        
       
  3002 
       
  3003     QTest::newRow("status:HasAttachments ascending")
       
  3004         << ( MessageSortList() << QMessageSortOrder::byStatus(QMessage::HasAttachments, Qt::AscendingOrder) )
       
  3005         << ( MessageListList() << ( QMessageIdList() << messageIds[0] << messageIds[3] )
       
  3006                                << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[4] ) );
       
  3007 
       
  3008     QTest::newRow("status:HasAttachments descending")
       
  3009         << ( MessageSortList() << QMessageSortOrder::byStatus(QMessage::HasAttachments, Qt::DescendingOrder) )
       
  3010         << ( MessageListList() << ( QMessageIdList() << messageIds[1] << messageIds[2] << messageIds[4] )
       
  3011                                << ( QMessageIdList() << messageIds[0] << messageIds[3] ) );
       
  3012 
       
  3013     QTest::newRow("status:Read ascending")
       
  3014         << ( MessageSortList() << QMessageSortOrder::byStatus(QMessage::Read, Qt::AscendingOrder) )
       
  3015         << ( MessageListList() << ( QMessageIdList() << messageIds[1] << messageIds[2] )
       
  3016                                << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] ) );
       
  3017 
       
  3018     QTest::newRow("status:Read descending")
       
  3019         << ( MessageSortList() << QMessageSortOrder::byStatus(QMessage::Read, Qt::DescendingOrder) )
       
  3020         << ( MessageListList() << ( QMessageIdList() << messageIds[0] << messageIds[3] << messageIds[4] )
       
  3021                                << ( QMessageIdList() << messageIds[1] << messageIds[2] ) );
       
  3022 
       
  3023     // On Windows, the following tests do not vary by type (which is always Email)
       
  3024     QTest::newRow("type ascending, priority ascending, size ascending")
       
  3025         << ( MessageSortList() << QMessageSortOrder::byType(Qt::AscendingOrder)
       
  3026                                << QMessageSortOrder::byPriority(Qt::AscendingOrder)
       
  3027                                << QMessageSortOrder::bySize(Qt::AscendingOrder) )
       
  3028 #if defined(Q_OS_WIN)
       
  3029         << ( MessageListList() << ( QMessageIdList() << messageIds[4] )
       
  3030                                << ( QMessageIdList() << messageIds[0] )
       
  3031                                << ( QMessageIdList() << messageIds[3] )
       
  3032                                << ( QMessageIdList() << messageIds[1] )
       
  3033                                << ( QMessageIdList() << messageIds[2] ) );
       
  3034 #elif defined(Q_OS_SYMBIAN)
       
  3035         << ( MessageListList() << ( QMessageIdList() << messageIds[4] )
       
  3036                                << ( QMessageIdList() << messageIds[3] )
       
  3037                                << ( QMessageIdList() << messageIds[0] )
       
  3038                                << ( QMessageIdList() << messageIds[1] )
       
  3039                                << ( QMessageIdList() << messageIds[2] ) );
       
  3040 #else
       
  3041         << ( MessageListList() << ( QMessageIdList() << messageIds[0] )
       
  3042                                << ( QMessageIdList() << messageIds[4] )
       
  3043                                << ( QMessageIdList() << messageIds[3] )
       
  3044                                << ( QMessageIdList() << messageIds[1] )
       
  3045                                << ( QMessageIdList() << messageIds[2] ) );
       
  3046 #endif
       
  3047 
       
  3048     QTest::newRow("type ascending, priority ascending, size descending")
       
  3049         << ( MessageSortList() << QMessageSortOrder::byType(Qt::AscendingOrder)
       
  3050                                << QMessageSortOrder::byPriority(Qt::AscendingOrder)
       
  3051                                << QMessageSortOrder::bySize(Qt::DescendingOrder) )
       
  3052 #if defined(Q_OS_WIN)
       
  3053         << ( MessageListList() << ( QMessageIdList() << messageIds[4] )
       
  3054                                << ( QMessageIdList() << messageIds[3] )
       
  3055                                << ( QMessageIdList() << messageIds[0] )
       
  3056                                << ( QMessageIdList() << messageIds[2] )
       
  3057                                << ( QMessageIdList() << messageIds[1] ) );
       
  3058 #elif defined(Q_OS_SYMBIAN)
       
  3059         << ( MessageListList() << ( QMessageIdList() << messageIds[4] )
       
  3060                                << ( QMessageIdList() << messageIds[0] )
       
  3061                                << ( QMessageIdList() << messageIds[3] )
       
  3062                                << ( QMessageIdList() << messageIds[2] )
       
  3063                                << ( QMessageIdList() << messageIds[1] ) );
       
  3064 #else
       
  3065         << ( MessageListList() << ( QMessageIdList() << messageIds[0] )
       
  3066                                << ( QMessageIdList() << messageIds[4] )
       
  3067                                << ( QMessageIdList() << messageIds[3] )
       
  3068                                << ( QMessageIdList() << messageIds[2] )
       
  3069                                << ( QMessageIdList() << messageIds[1] ) );
       
  3070 #endif
       
  3071 
       
  3072     QTest::newRow("type ascending, priority descending, size ascending")
       
  3073         << ( MessageSortList() << QMessageSortOrder::byType(Qt::AscendingOrder) 
       
  3074                                << QMessageSortOrder::byPriority(Qt::DescendingOrder)
       
  3075                                << QMessageSortOrder::bySize(Qt::AscendingOrder) )
       
  3076 #if defined(Q_OS_WIN)
       
  3077         << ( MessageListList() << ( QMessageIdList() << messageIds[1] )
       
  3078                                << ( QMessageIdList() << messageIds[2] )
       
  3079                                << ( QMessageIdList() << messageIds[0] )
       
  3080                                << ( QMessageIdList() << messageIds[3] )
       
  3081                                << ( QMessageIdList() << messageIds[4] ) );
       
  3082 #elif defined(Q_OS_SYMBIAN)
       
  3083         << ( MessageListList() << ( QMessageIdList() << messageIds[1] )
       
  3084                                << ( QMessageIdList() << messageIds[2] )
       
  3085                                << ( QMessageIdList() << messageIds[3] )
       
  3086                                << ( QMessageIdList() << messageIds[0] )
       
  3087                                << ( QMessageIdList() << messageIds[4] ) );
       
  3088 #else
       
  3089         << ( MessageListList() << ( QMessageIdList() << messageIds[0] )
       
  3090                                << ( QMessageIdList() << messageIds[1] )
       
  3091                                << ( QMessageIdList() << messageIds[2] )
       
  3092                                << ( QMessageIdList() << messageIds[3] )
       
  3093                                << ( QMessageIdList() << messageIds[4] ) );
       
  3094 #endif
       
  3095 
       
  3096     QMessageSortOrder plus(QMessageSortOrder::byType(Qt::AscendingOrder) + 
       
  3097                            QMessageSortOrder::byPriority(Qt::DescendingOrder) + 
       
  3098                            QMessageSortOrder::bySize(Qt::DescendingOrder));
       
  3099 
       
  3100     QTest::newRow("type ascending, priority descending, size descending")
       
  3101         << ( MessageSortList() << plus )
       
  3102 #if defined(Q_OS_WIN)
       
  3103         << ( MessageListList() << ( QMessageIdList() << messageIds[2] )
       
  3104                                << ( QMessageIdList() << messageIds[1] )
       
  3105                                << ( QMessageIdList() << messageIds[3] )
       
  3106                                << ( QMessageIdList() << messageIds[0] )
       
  3107                                << ( QMessageIdList() << messageIds[4] ) );
       
  3108 #elif defined(Q_OS_SYMBIAN)
       
  3109         << ( MessageListList() << ( QMessageIdList() << messageIds[2] )
       
  3110                                << ( QMessageIdList() << messageIds[1] )
       
  3111                                << ( QMessageIdList() << messageIds[0] )
       
  3112                                << ( QMessageIdList() << messageIds[3] )
       
  3113                                << ( QMessageIdList() << messageIds[4] ) );
       
  3114 #else
       
  3115         << ( MessageListList() << ( QMessageIdList() << messageIds[0] )
       
  3116                                << ( QMessageIdList() << messageIds[2] )
       
  3117                                << ( QMessageIdList() << messageIds[1] )
       
  3118                                << ( QMessageIdList() << messageIds[3] )
       
  3119                                << ( QMessageIdList() << messageIds[4] ) );
       
  3120 #endif
       
  3121 
       
  3122     QMessageSortOrder plusEquals(QMessageSortOrder::byType(Qt::AscendingOrder));
       
  3123     plusEquals += QMessageSortOrder::byPriority(Qt::DescendingOrder);
       
  3124     plusEquals += QMessageSortOrder::bySize(Qt::DescendingOrder);
       
  3125 
       
  3126     QTest::newRow("type ascending += priority descending += size descending")
       
  3127         << ( MessageSortList() << plusEquals )
       
  3128 #if defined(Q_OS_WIN)
       
  3129         << ( MessageListList() << ( QMessageIdList() << messageIds[2] )
       
  3130                                << ( QMessageIdList() << messageIds[1] )
       
  3131                                << ( QMessageIdList() << messageIds[3] )
       
  3132                                << ( QMessageIdList() << messageIds[0] )
       
  3133                                << ( QMessageIdList() << messageIds[4] ) );
       
  3134 #elif defined(Q_OS_SYMBIAN)
       
  3135         << ( MessageListList() << ( QMessageIdList() << messageIds[2] )
       
  3136                                << ( QMessageIdList() << messageIds[1] )
       
  3137                                << ( QMessageIdList() << messageIds[0] )
       
  3138                                << ( QMessageIdList() << messageIds[3] )
       
  3139                                << ( QMessageIdList() << messageIds[4] ) );
       
  3140 #else
       
  3141         << ( MessageListList() << ( QMessageIdList() << messageIds[0] )
       
  3142                                << ( QMessageIdList() << messageIds[2] )
       
  3143                                << ( QMessageIdList() << messageIds[1] )
       
  3144                                << ( QMessageIdList() << messageIds[3] )
       
  3145                                << ( QMessageIdList() << messageIds[4] ) );
       
  3146 #endif
       
  3147 
       
  3148 #if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN)
       
  3149     QTest::newRow("type descending, priority ascending, size ascending")
       
  3150         << ( MessageSortList() << QMessageSortOrder::byType(Qt::DescendingOrder)
       
  3151                                << QMessageSortOrder::byPriority(Qt::AscendingOrder)
       
  3152                                << QMessageSortOrder::bySize(Qt::AscendingOrder) )
       
  3153         << ( MessageListList() << ( QMessageIdList() << messageIds[4] )
       
  3154                                << ( QMessageIdList() << messageIds[3] )
       
  3155                                << ( QMessageIdList() << messageIds[1] )
       
  3156                                << ( QMessageIdList() << messageIds[2] )
       
  3157                                << ( QMessageIdList() << messageIds[0] ) );
       
  3158 
       
  3159     QTest::newRow("type descending, priority ascending, size descending")
       
  3160         << ( MessageSortList() << QMessageSortOrder::byType(Qt::DescendingOrder)
       
  3161                                << QMessageSortOrder::byPriority(Qt::AscendingOrder)
       
  3162                                << QMessageSortOrder::bySize(Qt::DescendingOrder) )
       
  3163         << ( MessageListList() << ( QMessageIdList() << messageIds[4] )
       
  3164                                << ( QMessageIdList() << messageIds[3] )
       
  3165                                << ( QMessageIdList() << messageIds[2] )
       
  3166                                << ( QMessageIdList() << messageIds[1] )
       
  3167                                << ( QMessageIdList() << messageIds[0] ) );
       
  3168 
       
  3169     QTest::newRow("type descending, priority descending, size ascending")
       
  3170         << ( MessageSortList() << QMessageSortOrder::byType(Qt::DescendingOrder)
       
  3171                                << QMessageSortOrder::byPriority(Qt::DescendingOrder)
       
  3172                                << QMessageSortOrder::bySize(Qt::AscendingOrder) )
       
  3173         << ( MessageListList() << ( QMessageIdList() << messageIds[1] )
       
  3174                                << ( QMessageIdList() << messageIds[2] )
       
  3175                                << ( QMessageIdList() << messageIds[3] )
       
  3176                                << ( QMessageIdList() << messageIds[4] )
       
  3177                                << ( QMessageIdList() << messageIds[0] ) );
       
  3178 
       
  3179     QTest::newRow("type descending, priority descending, size descending")
       
  3180         << ( MessageSortList() << QMessageSortOrder::byType(Qt::DescendingOrder)
       
  3181                                << QMessageSortOrder::byPriority(Qt::DescendingOrder)
       
  3182                                << QMessageSortOrder::bySize(Qt::DescendingOrder) )
       
  3183         << ( MessageListList() << ( QMessageIdList() << messageIds[2] )
       
  3184                                << ( QMessageIdList() << messageIds[1] )
       
  3185                                << ( QMessageIdList() << messageIds[3] )
       
  3186                                << ( QMessageIdList() << messageIds[4] )
       
  3187                                << ( QMessageIdList() << messageIds[0] ) );
       
  3188 #endif
       
  3189 }
       
  3190 
       
  3191 void tst_QMessageStoreKeys::testMessageOrdering()
       
  3192 {
       
  3193     QFETCH(MessageSortList, sorts);
       
  3194     QFETCH(MessageListList, ids);
       
  3195 
       
  3196     bool supported(true);
       
  3197     foreach (const QMessageSortOrder &element, sorts) {
       
  3198         QVERIFY(element == element);
       
  3199         QCOMPARE(element != QMessageSortOrder(), !element.isEmpty());
       
  3200 
       
  3201         supported &= element.isSupported();
       
  3202     }
       
  3203 
       
  3204     if (supported) {
       
  3205         // Filter out the existing messages
       
  3206         QMessageIdList sortedIds(manager->queryMessages(~existingAccountsFilter, sorts));
       
  3207         for (QMessageIdList::iterator it = sortedIds.begin(); it != sortedIds.end(); ) {
       
  3208             if (existingMessageIds.contains(*it)) {
       
  3209                 it = sortedIds.erase(it);
       
  3210             } else {
       
  3211                 ++it;
       
  3212             }
       
  3213         }
       
  3214 
       
  3215         QMessageIdList::const_iterator sit = sortedIds.begin();
       
  3216         MessageListList::const_iterator iit = ids.begin();
       
  3217 
       
  3218         bool match(true);
       
  3219         for (int groupCount = 0; sit != sortedIds.end(); ++sit) {
       
  3220             if (iit == ids.end()) {
       
  3221                 match = false;
       
  3222                 break;
       
  3223             } else {
       
  3224                 if ((*iit).contains(*sit)) {
       
  3225                     ++groupCount;
       
  3226                     if (groupCount == (*iit).count()) {
       
  3227                         // We have matched all members of this group
       
  3228                         ++iit;
       
  3229                         groupCount = 0;
       
  3230                     }
       
  3231                 } else {
       
  3232                     match = false;
       
  3233                     break;
       
  3234                 }
       
  3235             }
       
  3236         }
       
  3237 
       
  3238         QVERIFY(match);
       
  3239         QVERIFY(iit == ids.end());
       
  3240     } else {
       
  3241         QSKIP("Unsupported for this configuration", SkipSingle);
       
  3242     }
       
  3243 }
       
  3244