qtmobility/tests/auto/qcontactactions/unittest/tst_qcontactactions.cpp
changeset 5 453da2cfceef
parent 4 90517678cc4f
child 8 71781823f776
child 9 5561c345355e
equal deleted inserted replaced
4:90517678cc4f 5:453da2cfceef
     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 
       
    42 #define QT_STATICPLUGIN
       
    43 #include <QtTest/QtTest>
       
    44 #include <QApplication>
       
    45 
       
    46 #include "qtcontacts.h"
       
    47 #include "qcontactmanagerdataholder.h" //QContactManagerDataHolder
       
    48 #include "qcontactaction.h"
       
    49 #include "qcontactactionfactory.h"
       
    50 #include "qcontactactiondescriptor.h"
       
    51 
       
    52 QTM_USE_NAMESPACE 
       
    53 
       
    54 class tst_QContactActions : public QObject
       
    55 {
       
    56 Q_OBJECT
       
    57 
       
    58 public:
       
    59     tst_QContactActions();
       
    60     virtual ~tst_QContactActions();
       
    61 private:
       
    62     QContactManagerDataHolder managerDataHolder;
       
    63 
       
    64 public slots:
       
    65     void init();
       
    66     void cleanup();
       
    67 private slots:
       
    68     void testSendEmail();
       
    69     void testDescriptor();
       
    70     void testDescriptorLessThan();
       
    71     void testDescriptorHash();
       
    72     void traits();
       
    73 };
       
    74 
       
    75 /* Test a static factory as well */
       
    76 class DummyStaticActionFactory : public QContactActionFactory
       
    77 {
       
    78     Q_OBJECT
       
    79     Q_INTERFACES(QtMobility::QContactActionFactory)
       
    80 
       
    81 public:
       
    82     DummyStaticActionFactory() {}
       
    83     ~DummyStaticActionFactory() {}
       
    84 
       
    85     QString name() const
       
    86     {
       
    87         return QString("dummystaticactionfactory");
       
    88     }
       
    89 
       
    90     QList<QContactActionDescriptor> actionDescriptors() const
       
    91     {
       
    92         return QList<QContactActionDescriptor>();
       
    93     }
       
    94 
       
    95     QContactAction* instance(const QContactActionDescriptor&) const
       
    96     {
       
    97         return 0;
       
    98     }
       
    99 
       
   100     QVariantMap actionMetadata(const QContactActionDescriptor&) const
       
   101     {
       
   102         return QVariantMap();
       
   103     }
       
   104 };
       
   105 
       
   106 /* Statically import it (and a duplicate copy of it, purely for testing purposes) */
       
   107 Q_EXPORT_PLUGIN2(contacts_testdummystaticactionfactory, DummyStaticActionFactory)
       
   108 Q_IMPORT_PLUGIN(contacts_testdummystaticactionfactory)
       
   109 Q_EXPORT_PLUGIN2(contacts_testdummystaticactionfactorycopy, DummyStaticActionFactory)
       
   110 Q_IMPORT_PLUGIN(contacts_testdummystaticactionfactorycopy)
       
   111 
       
   112 tst_QContactActions::tst_QContactActions()
       
   113 {
       
   114     // set the correct path to look for plugins
       
   115     QString path = QApplication::applicationDirPath() + "/dummyplugin/plugins";
       
   116     QApplication::addLibraryPath(path);
       
   117 }
       
   118 
       
   119 tst_QContactActions::~tst_QContactActions()
       
   120 {
       
   121     QString path = QApplication::applicationDirPath() + "/dummyplugin/plugins";
       
   122     QApplication::removeLibraryPath(path);
       
   123 }
       
   124 
       
   125 void tst_QContactActions::init()
       
   126 {
       
   127 }
       
   128 
       
   129 void tst_QContactActions::cleanup()
       
   130 {
       
   131 }
       
   132 
       
   133 void tst_QContactActions::testSendEmail()
       
   134 {
       
   135     QContact c;
       
   136     QContactEmailAddress e;
       
   137     e.setEmailAddress("test@nokia.com");
       
   138     c.saveDetail(&e);
       
   139 
       
   140     QVERIFY(QContactAction::availableActions().contains("SendEmail"));
       
   141     QVERIFY(QContactAction::availableActions("Test").contains("SendEmail"));
       
   142     QVERIFY(QContactAction::availableActions("Test", 1).contains("SendEmail"));
       
   143     QVERIFY(QContactAction::availableActions(QString(), -200).contains("SendEmail"));
       
   144 
       
   145     QList<QContactActionDescriptor> descrs = QContactAction::actionDescriptors();
       
   146     bool foundSendEmail = false;
       
   147     for (int i = 0; i < descrs.size(); i++) {
       
   148         if (descrs.at(i).actionName() == QString("SendEmail")) {
       
   149             foundSendEmail = true;
       
   150             break;
       
   151         }
       
   152     }
       
   153     QVERIFY(foundSendEmail);
       
   154 
       
   155     descrs = QContactAction::actionDescriptors(QString(), "Test");
       
   156     foundSendEmail = false;
       
   157     for (int i = 0; i < descrs.size(); i++) {
       
   158         QCOMPARE(descrs.at(i).vendorName(), QString("Test"));
       
   159         if (descrs.at(i).actionName() == QString("SendEmail")) {
       
   160             foundSendEmail = true;
       
   161             break;
       
   162         }
       
   163     }
       
   164     QVERIFY(foundSendEmail);
       
   165 
       
   166     descrs = QContactAction::actionDescriptors(QString(), "Test", 1);
       
   167     foundSendEmail = false;
       
   168     for (int i = 0; i < descrs.size(); i++) {
       
   169         QCOMPARE(descrs.at(i).vendorName(), QString("Test"));
       
   170         QCOMPARE(descrs.at(i).implementationVersion(), 1);
       
   171         if (descrs.at(i).actionName() == QString("SendEmail")
       
   172                 && descrs.at(i).vendorName() == QString("Test")
       
   173                 && descrs.at(i).implementationVersion() == 1) {
       
   174             foundSendEmail = true;
       
   175             break;
       
   176         }
       
   177     }
       
   178     QVERIFY(foundSendEmail);
       
   179 
       
   180     descrs = QContactAction::actionDescriptors(QString(), "Test", -200); // shouldn't find any with this impl.version.
       
   181     foundSendEmail = false;
       
   182     for (int i = 0; i < descrs.size(); i++) {
       
   183         QCOMPARE(descrs.at(i).vendorName(), QString("Test"));
       
   184         if (descrs.at(i).actionName() == QString("SendEmail")
       
   185                 && descrs.at(i).vendorName() == QString("Test")
       
   186                 && descrs.at(i).implementationVersion() == 1) {
       
   187             foundSendEmail = true;
       
   188             break;
       
   189         }
       
   190     }
       
   191     QVERIFY(!foundSendEmail);
       
   192 
       
   193     descrs = QContactAction::actionDescriptors(QString(), QString(), -200); // ignores implementation Version if empty vendor
       
   194     foundSendEmail = false;
       
   195     for (int i = 0; i < descrs.size(); i++) {
       
   196         if (descrs.at(i).actionName() == QString("SendEmail")
       
   197                 && descrs.at(i).vendorName() == QString("Test")
       
   198                 && descrs.at(i).implementationVersion() == 1) {
       
   199             foundSendEmail = true;
       
   200             break;
       
   201         }
       
   202     }
       
   203     QVERIFY(foundSendEmail);
       
   204 
       
   205     descrs = QContactAction::actionDescriptors(QString(), "Nonexistent");
       
   206     foundSendEmail = false;
       
   207     for (int i = 0; i < descrs.size(); i++) {
       
   208         QCOMPARE(descrs.at(i).vendorName(), QString("Nonexistent"));
       
   209         if (descrs.at(i).actionName() == QString("SendEmail")
       
   210                 && descrs.at(i).vendorName() == QString("Test")
       
   211                 && descrs.at(i).implementationVersion() == 1) {
       
   212             foundSendEmail = true;
       
   213             break;
       
   214         }
       
   215     }
       
   216     QVERIFY(!foundSendEmail);
       
   217 
       
   218     descrs = QContactAction::actionDescriptors("SendEmail");
       
   219     foundSendEmail = false;
       
   220     for (int i = 0; i < descrs.size(); i++) {
       
   221         QCOMPARE(descrs.at(i).actionName(), QString("SendEmail"));
       
   222         if (descrs.at(i).actionName() == QString("SendEmail")
       
   223                 && descrs.at(i).vendorName() == QString("Test")
       
   224                 && descrs.at(i).implementationVersion() == 1) {
       
   225             foundSendEmail = true;
       
   226             break;
       
   227         }
       
   228     }
       
   229     QVERIFY(foundSendEmail);
       
   230 
       
   231     descrs = QContactAction::actionDescriptors("SendEmail", "Test");
       
   232     foundSendEmail = false;
       
   233     for (int i = 0; i < descrs.size(); i++) {
       
   234         QCOMPARE(descrs.at(i).actionName(), QString("SendEmail"));
       
   235         QCOMPARE(descrs.at(i).vendorName(), QString("Test"));
       
   236         if (descrs.at(i).actionName() == QString("SendEmail")
       
   237                 && descrs.at(i).vendorName() == QString("Test")
       
   238                 && descrs.at(i).implementationVersion() == 1) {
       
   239             foundSendEmail = true;
       
   240             break;
       
   241         }
       
   242     }
       
   243     QVERIFY(foundSendEmail);
       
   244 
       
   245     descrs = QContactAction::actionDescriptors("SendEmail", "Test", 1);
       
   246     foundSendEmail = false;
       
   247     for (int i = 0; i < descrs.size(); i++) {
       
   248         QCOMPARE(descrs.at(i).actionName(), QString("SendEmail"));
       
   249         QCOMPARE(descrs.at(i).vendorName(), QString("Test"));
       
   250         QCOMPARE(descrs.at(i).implementationVersion(), 1);
       
   251         if (descrs.at(i).actionName() == QString("SendEmail")
       
   252                 && descrs.at(i).vendorName() == QString("Test")
       
   253                 && descrs.at(i).implementationVersion() == 1) {
       
   254             foundSendEmail = true;
       
   255             break;
       
   256         }
       
   257     }
       
   258     QVERIFY(foundSendEmail);
       
   259 
       
   260     descrs = QContactAction::actionDescriptors("SendEmail", "Test", -200); // shouldn't find any with this impl.version.
       
   261     foundSendEmail = false;
       
   262     for (int i = 0; i < descrs.size(); i++) {
       
   263         QCOMPARE(descrs.at(i).actionName(), QString("SendEmail"));
       
   264         QCOMPARE(descrs.at(i).vendorName(), QString("Test"));
       
   265         if (descrs.at(i).actionName() == QString("SendEmail")
       
   266                 && descrs.at(i).vendorName() == QString("Test")
       
   267                 && descrs.at(i).implementationVersion() == 1) {
       
   268             foundSendEmail = true;
       
   269             break;
       
   270         }
       
   271     }
       
   272     QVERIFY(!foundSendEmail);
       
   273 
       
   274     descrs = QContactAction::actionDescriptors("SendEmail", QString(), -200); // ignores implementation Version if empty vendor
       
   275     foundSendEmail = false;
       
   276     for (int i = 0; i < descrs.size(); i++) {
       
   277         QCOMPARE(descrs.at(i).actionName(), QString("SendEmail"));
       
   278         if (descrs.at(i).actionName() == QString("SendEmail")
       
   279                 && descrs.at(i).vendorName() == QString("Test")
       
   280                 && descrs.at(i).implementationVersion() == 1) {
       
   281             foundSendEmail = true;
       
   282             break;
       
   283         }
       
   284     }
       
   285     QVERIFY(foundSendEmail);
       
   286 
       
   287     descrs = QContactAction::actionDescriptors("SendEmail", "Nonexistent");
       
   288     foundSendEmail = false;
       
   289     for (int i = 0; i < descrs.size(); i++) {
       
   290         QCOMPARE(descrs.at(i).actionName(), QString("SendEmail"));
       
   291         QCOMPARE(descrs.at(i).vendorName(), QString("Nonexistent"));
       
   292         if (descrs.at(i).actionName() == QString("SendEmail")
       
   293                 && descrs.at(i).vendorName() == QString("Test")
       
   294                 && descrs.at(i).implementationVersion() == 1) {
       
   295             foundSendEmail = true;
       
   296             break;
       
   297         }
       
   298     }
       
   299     QVERIFY(!foundSendEmail);
       
   300 
       
   301     descrs = QContactAction::actionDescriptors();
       
   302     QContactAction* sendEmail = 0;
       
   303     for (int i = 0; i < descrs.size(); i++) {
       
   304         if (descrs.at(i).actionName() == QString("SendEmail")
       
   305                 && descrs.at(i).vendorName() == QString("Test")
       
   306                 && descrs.at(i).implementationVersion() == 1) {
       
   307             sendEmail = QContactAction::action(descrs.at(i));
       
   308             break;
       
   309         }
       
   310     }
       
   311     QVERIFY(sendEmail);
       
   312 
       
   313     QVERIFY(!sendEmail->actionDescriptor().actionName().isEmpty());
       
   314     //QVERIFY(!sendEmail->metadata().isNull());
       
   315     QVERIFY(!sendEmail->actionDescriptor().vendorName().isEmpty());
       
   316     QVERIFY(sendEmail->actionDescriptor().implementationVersion() != -1);
       
   317     QVERIFY(sendEmail->actionDescriptor().implementationVersion() != 0);
       
   318     //QVERIFY(!sendEmail->contactFilter().isEmpty());
       
   319     QVERIFY(sendEmail->isDetailSupported(e));
       
   320     QVERIFY(sendEmail->supportedDetails(c).contains(e));
       
   321     //QVERIFY(sendEmail->performAction(c, e));
       
   322     //QVERIFY(sendEmail->performAction(c));
       
   323 
       
   324     delete sendEmail;
       
   325 }
       
   326 
       
   327 void tst_QContactActions::testDescriptor()
       
   328 {
       
   329     // first, test retrieving an action when no factories are loaded
       
   330     QContactAction* invalidAction = QContactAction::action(QContactActionDescriptor());
       
   331     QVERIFY(invalidAction == 0); // should be null.
       
   332 
       
   333     QContact c;
       
   334     QContactEmailAddress e;
       
   335     e.setEmailAddress("test@nokia.com");
       
   336     c.saveDetail(&e);
       
   337 
       
   338     QVERIFY(QContactAction::availableActions().contains("SendEmail"));
       
   339     QVERIFY(QContactAction::availableActions("Test").contains("SendEmail"));
       
   340     QVERIFY(QContactAction::availableActions("Test", 1).contains("SendEmail"));
       
   341     QVERIFY(QContactAction::availableActions(QString(), -200).contains("SendEmail"));
       
   342 
       
   343     QList<QContactActionDescriptor> descrs = QContactAction::actionDescriptors();
       
   344     QContactAction* sendEmailAction = 0;
       
   345     bool foundSendEmail = false;
       
   346     for (int i = 0; i < descrs.size(); i++) {
       
   347         if (descrs.at(i).actionName() == QString("SendEmail")) {
       
   348             sendEmailAction = QContactAction::action(descrs.at(i));
       
   349             foundSendEmail = true;
       
   350             break;
       
   351         }
       
   352     }
       
   353     QVERIFY(foundSendEmail);
       
   354 
       
   355     // first, ensure that the descriptor identifies the correct action
       
   356     QContactActionDescriptor sendEmailDescriptor;
       
   357     sendEmailDescriptor.setActionName(sendEmailAction->actionDescriptor().actionName());
       
   358     sendEmailDescriptor.setVendorName(sendEmailAction->actionDescriptor().vendorName());
       
   359     sendEmailDescriptor.setImplementationVersion(sendEmailAction->actionDescriptor().implementationVersion());
       
   360 
       
   361     // secondly, test operator= and operator==, and copy constructor
       
   362     QContactActionDescriptor sendEmailDescriptor2 = sendEmailDescriptor;
       
   363     QContactActionDescriptor sendEmailDescriptor3(sendEmailDescriptor2);
       
   364     QContactActionDescriptor sendEmailDescriptor4 = sendEmailAction->actionDescriptor();
       
   365     QContactActionDescriptor sendEmailDescriptor5 = QContactAction::actionDescriptors(sendEmailDescriptor.actionName(), sendEmailDescriptor.vendorName(), sendEmailDescriptor.implementationVersion()).at(0);
       
   366     QContactActionDescriptor sendEmailDescriptor6(sendEmailDescriptor);
       
   367     sendEmailDescriptor6 = sendEmailDescriptor5;
       
   368     QVERIFY(sendEmailDescriptor2.actionName() == sendEmailDescriptor.actionName());
       
   369     QVERIFY(sendEmailDescriptor2.vendorName() == sendEmailDescriptor.vendorName());
       
   370     QVERIFY(sendEmailDescriptor2.implementationVersion() == sendEmailDescriptor.implementationVersion());
       
   371     QVERIFY(sendEmailDescriptor == sendEmailDescriptor2);
       
   372     QVERIFY(sendEmailDescriptor == sendEmailDescriptor3);
       
   373     QVERIFY(sendEmailDescriptor == sendEmailDescriptor4);
       
   374     QVERIFY(sendEmailDescriptor == sendEmailDescriptor5);
       
   375     QVERIFY(sendEmailDescriptor == sendEmailDescriptor6);
       
   376 
       
   377     QVERIFY(!sendEmailDescriptor2.isEmpty());
       
   378     sendEmailDescriptor2.setActionName("");
       
   379     QVERIFY(sendEmailDescriptor2 != sendEmailDescriptor);
       
   380     QVERIFY(sendEmailDescriptor2.isEmpty()); // without an action name, cannot uniquely identify an action impl
       
   381     sendEmailDescriptor2.setActionName(sendEmailDescriptor.actionName());
       
   382 
       
   383     QVERIFY(!sendEmailDescriptor2.isEmpty());
       
   384     sendEmailDescriptor2.setVendorName("");
       
   385     QVERIFY(sendEmailDescriptor2 != sendEmailDescriptor);
       
   386     QVERIFY(sendEmailDescriptor2.isEmpty()); // without a vendor name, cannot uniquely identify an action impl
       
   387     sendEmailDescriptor2.setVendorName(sendEmailDescriptor.vendorName());
       
   388 
       
   389     QVERIFY(!sendEmailDescriptor2.isEmpty());
       
   390     sendEmailDescriptor2.setImplementationVersion(0);
       
   391     QVERIFY(sendEmailDescriptor2 != sendEmailDescriptor);
       
   392     QVERIFY(sendEmailDescriptor2.isEmpty()); // without a version, cannot uniquely identify an action impl
       
   393     sendEmailDescriptor2.setImplementationVersion(sendEmailDescriptor.implementationVersion());
       
   394 
       
   395     QVERIFY(sendEmailDescriptor2 == sendEmailDescriptor);
       
   396 
       
   397     // ensure that the caller takes ownership of the action; ie, not singleton etc.
       
   398     QContactAction *sendEmailAction2 = QContactAction::action(sendEmailAction->actionDescriptor());
       
   399     QContactAction *sendEmailAction3 = QContactAction::action(sendEmailAction->actionDescriptor());
       
   400     QVERIFY(sendEmailAction != sendEmailAction2);
       
   401     QVERIFY(sendEmailAction != sendEmailAction3);
       
   402     QVERIFY(sendEmailAction2 != sendEmailAction3);
       
   403 
       
   404     delete sendEmailAction2;
       
   405     delete sendEmailAction;
       
   406 
       
   407     QVERIFY(sendEmailAction3->actionDescriptor() == sendEmailDescriptor);
       
   408     delete sendEmailAction3;
       
   409 }
       
   410 
       
   411 void tst_QContactActions::testDescriptorLessThan()
       
   412 {
       
   413     QContactActionDescriptor qcad1;
       
   414     qcad1.setVendorName("a");
       
   415     qcad1.setActionName("a");
       
   416     qcad1.setImplementationVersion(1);
       
   417 
       
   418     QContactActionDescriptor qcad2;
       
   419     qcad2.setVendorName("a");
       
   420     qcad2.setActionName("a");
       
   421     qcad2.setImplementationVersion(2);
       
   422 
       
   423     QContactActionDescriptor qcad3;
       
   424     qcad3.setVendorName("a");
       
   425     qcad3.setActionName("b");
       
   426     qcad3.setImplementationVersion(1);
       
   427 
       
   428     QContactActionDescriptor qcad4;
       
   429     qcad4.setVendorName("b");
       
   430     qcad4.setActionName("a");
       
   431     qcad4.setImplementationVersion(1);
       
   432 
       
   433     QVERIFY(qcad1 < qcad2);
       
   434     QVERIFY(qcad2 < qcad3);
       
   435     QVERIFY(qcad3 < qcad4);
       
   436 }
       
   437 
       
   438 void tst_QContactActions::testDescriptorHash()
       
   439 {
       
   440     QContactActionDescriptor qcad1;
       
   441     qcad1.setVendorName("a");
       
   442     qcad1.setActionName("a");
       
   443     qcad1.setImplementationVersion(1);
       
   444 
       
   445     QContactActionDescriptor qcad2;
       
   446     qcad2.setVendorName("a");
       
   447     qcad2.setActionName("a");
       
   448     qcad2.setImplementationVersion(1);
       
   449 
       
   450     QContactActionDescriptor qcad3;
       
   451     qcad3.setVendorName("a");
       
   452     qcad3.setActionName("a");
       
   453     qcad3.setImplementationVersion(2);
       
   454 
       
   455     QVERIFY(qHash(qcad1) == qHash(qcad2));
       
   456     QVERIFY(qHash(qcad1) != qHash(qcad3));
       
   457 }
       
   458 
       
   459 void tst_QContactActions::traits()
       
   460 {
       
   461     QCOMPARE(sizeof(QContactActionDescriptor), sizeof(void *));
       
   462     QTypeInfo<QTM_PREPEND_NAMESPACE(QContactActionDescriptor)> ti;
       
   463     QVERIFY(ti.isComplex);
       
   464     QVERIFY(!ti.isStatic);
       
   465     QVERIFY(!ti.isLarge);
       
   466     QVERIFY(!ti.isPointer);
       
   467     QVERIFY(!ti.isDummy);
       
   468 }
       
   469 
       
   470 QTEST_MAIN(tst_QContactActions)
       
   471 #include "tst_qcontactactions.moc"