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