phonebookengines/cntactions/tsrc/mt_cntactions/mt_cntactions.cpp
branchRCL_3
changeset 62 5b6f26637ad3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/cntactions/tsrc/mt_cntactions/mt_cntactions.cpp	Tue Aug 31 15:05:21 2010 +0300
@@ -0,0 +1,367 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "mt_cntactions.h"
+
+#include <QtTest/QtTest>
+
+#define QTRY_COMPARE(__expr, __expected) \
+    do { \
+        const int __step = 50; \
+        const int __timeout = 1000; \
+        QTest::qWait(10); \
+        for (int __i = 0; __i < __timeout && ((__expr) != (__expected)); __i+=__step) { \
+            QTest::qWait(__step); \
+        } \
+        QCOMPARE(__expr, __expected); \
+    } while(0)
+
+
+void TestCntActions::initTestCase()
+{
+    int error = qRegisterMetaType<QContactAction::State>();
+	//create manager
+	m_manager = new QContactManager("symbian");
+	    
+}
+
+void TestCntActions::cleanupTestCase()
+{
+    delete m_manager;
+}
+
+void TestCntActions::init()
+{
+    //delete all contacts from the database
+    QList<QContactLocalId> contacts = m_manager->contactIds();
+    QMap<int, QContactManager::Error> errorMap;
+    m_manager->removeContacts(contacts, &errorMap);
+}
+
+void TestCntActions::cleanup()
+{}
+
+void TestCntActions::emptyContactNoActionSupport()
+{
+    QContact contact;
+    m_manager->saveContact(&contact);
+    
+    //expected no actions found
+    QList<QContactActionDescriptor> actions = contact.availableActions();
+    QVERIFY(actions.count() == 0);
+}
+
+void TestCntActions::phonenumberCallSupport()
+{
+    QContact contact;
+    
+    //Add phonenumber to contact
+    QContactPhoneNumber number;
+    number.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+    number.setNumber("555111222");
+    contact.saveDetail(&number);
+    m_manager->saveContact(&contact);
+    
+    //verify that the contact has a phonenumber
+    QList<QContactPhoneNumber> numberList = contact.details<QContactPhoneNumber>();
+    QVERIFY(numberList.count() >  0);
+    
+    //get the actions
+    QList<QContactActionDescriptor> actionDescriptors = contact.availableActions();
+    QStringList actions;
+    for (int i = 0;i < actionDescriptors.count();i++)
+    {
+        QString action = actionDescriptors.at(i).actionName();
+        actions << action;
+    }
+    
+    //verify that it includes the actiosn
+    QVERIFY(actions.contains("call", Qt::CaseInsensitive));
+    
+    //verify that the action works
+    QList<QContactActionDescriptor> callActionDescriptors = QContactAction::actionDescriptors("call", "symbian");
+    QVERIFY(callActionDescriptors.count() == 1);
+    QContactAction *callAction = QContactAction::action(callActionDescriptors.at(0));
+    QVERIFY(callAction != 0);
+    QVERIFY(callAction->isDetailSupported(numberList.at(0)) == true);
+    QVariantMap variantMap = callAction->metaData();
+    QVERIFY(variantMap.count() == 0);
+    variantMap = callAction->results();
+    QVERIFY(variantMap.count() == 0);
+    QSignalSpy spyCallAction(callAction, SIGNAL(stateChanged(QContactAction::State)));
+    callAction->invokeAction(contact, numberList.at(0));
+    callAction->invokeAction(contact);
+    QTRY_COMPARE(spyCallAction.count(), 2); // make sure the signal was emitted exactly one time
+    delete callAction;
+}
+
+void TestCntActions::phonenumberNoCallSupport()
+{
+    QContact contact;
+    m_manager->saveContact(&contact);
+        
+    //no actions expected
+    QList<QContactActionDescriptor> actionDescriptors = contact.availableActions();
+    QStringList actions;
+    for (int i = 0;i < actionDescriptors.count();i++)
+    {
+        QString action = actionDescriptors.at(i).actionName();
+        actions << action;
+    }
+    
+    QVERIFY(actions.contains("call", Qt::CaseInsensitive) == false);
+}
+
+void TestCntActions::phonenumberMessageSupport()
+{
+    QContact contact;
+    
+    //Add phonenumber to contact
+    QContactPhoneNumber number;
+    number.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+    number.setNumber("555111222");
+    contact.saveDetail(&number);
+    m_manager->saveContact(&contact);
+    
+    //verify that the contact has a phonenumber
+    QList<QContactPhoneNumber> numberList = contact.details<QContactPhoneNumber>();
+    QVERIFY(numberList.count() >  0);
+    
+    //get the actions
+    QList<QContactActionDescriptor> actionDescriptors = contact.availableActions();
+    QStringList actions;
+    for (int i = 0;i < actionDescriptors.count();i++)
+    {
+        QString action = actionDescriptors.at(i).actionName();
+        actions << action;
+    }
+    
+    //verify that it includes the actiosn
+    QVERIFY(actions.contains("message", Qt::CaseInsensitive));
+    
+    QList<QContactActionDescriptor> messageActionDescriptors = QContactAction::actionDescriptors("message", "symbian");
+    QVERIFY(messageActionDescriptors.count() == 1);
+    QContactAction *messageAction = QContactAction::action(messageActionDescriptors.at(0));
+    QVERIFY(messageAction != 0);
+    QVERIFY(messageAction->isDetailSupported(numberList.at(0)) == true);
+    QVariantMap variantMap = messageAction->metaData();
+    QVERIFY(variantMap.count() == 0);
+    variantMap = messageAction->results();
+    QVERIFY(variantMap.count() == 0);
+    QSignalSpy spyMessageAction(messageAction, SIGNAL(stateChanged(QContactAction::State)));
+    messageAction->invokeAction(contact, numberList.at(0));
+    messageAction->invokeAction(contact);
+    QTRY_COMPARE(spyMessageAction.count(), 2); // make sure the signal was emitted exactly one time
+    delete messageAction;
+}
+
+void TestCntActions::phonenumberNoMessageSupport()
+{
+    QContactPhoneNumber faxNumber;
+    faxNumber.setNumber("555111222");
+    faxNumber.setSubTypes(QContactPhoneNumber::SubTypeFacsimile);
+
+    QList<QContactActionDescriptor> actionDescriptors = QContactAction::actionDescriptors("message", "symbian");
+
+    QContactAction* contactAction = QContactAction::action(actionDescriptors.first());
+    bool isSupportDetail = contactAction->isDetailSupported(faxNumber);
+    
+    delete contactAction;
+
+    QVERIFY(isSupportDetail == false);
+}
+
+void TestCntActions::phonenumberVideoCallSupport()
+{
+    QContact contact;
+    
+    //Add phonenumber to contact
+    QContactPhoneNumber number;
+    number.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+    number.setNumber("555111222");
+    contact.saveDetail(&number);
+    m_manager->saveContact(&contact);
+    
+    //verify that the contact has a phonenumber
+    QList<QContactPhoneNumber> numberList = contact.details<QContactPhoneNumber>();
+    QVERIFY(numberList.count() >  0);
+    
+    //get the actions
+    QList<QContactActionDescriptor> actionDescriptors = contact.availableActions();
+    QStringList actions;
+    for (int i = 0;i < actionDescriptors.count();i++)
+    {
+        QString action = actionDescriptors.at(i).actionName();
+        actions << action;
+    }
+    
+    //verify that it includes the actiosn
+    QVERIFY(actions.contains("videocall", Qt::CaseInsensitive));
+    
+    //Test Video Call action
+    QList<QContactActionDescriptor> videoCallActionDescriptors = QContactAction::actionDescriptors("videocall", "symbian");
+    QVERIFY(videoCallActionDescriptors.count() == 1);
+    QContactAction *videoCallAction = QContactAction::action(videoCallActionDescriptors.at(0));
+    QVERIFY(videoCallAction != 0);
+    QVERIFY(videoCallAction->isDetailSupported(numberList.at(0)) == true);
+    QVariantMap variantMap = videoCallAction->metaData();
+    QVERIFY(variantMap.count() == 0);
+    variantMap = videoCallAction->results();
+    QVERIFY(variantMap.count() == 0);
+    QSignalSpy spyVideoCallAction(videoCallAction, SIGNAL(stateChanged(QContactAction::State)));
+    videoCallAction->invokeAction(contact, numberList.at(0));
+    videoCallAction->invokeAction(contact);
+    QTRY_COMPARE(spyVideoCallAction.count(), 2); // make sure the signal was emitted exactly one time
+    delete videoCallAction;
+}
+
+void TestCntActions::phonenumberNoVideoCallSupport()
+{
+    QContact contact;
+    m_manager->saveContact(&contact);
+    
+    //expected no actions found
+    QList<QContactActionDescriptor> actionDescriptors = contact.availableActions();
+    QStringList actions;
+    for (int i = 0;i < actionDescriptors.count();i++)
+    {
+        QString action = actionDescriptors.at(i).actionName();
+        actions << action;
+    }
+    QVERIFY(actions.contains("videocall", Qt::CaseInsensitive) == false);
+}
+
+void TestCntActions::emailSupport()
+{
+    QContact contact;
+    QContactEmailAddress email;
+    email.setEmailAddress("test@test.com");
+    contact.saveDetail(&email);
+    m_manager->saveContact(&contact);
+    
+    //one number exist in contact
+    QList<QContactEmailAddress> emailList = contact.details<QContactEmailAddress>();
+    QVERIFY(emailList.count() == 1);
+    
+    //one action expected
+    QList<QContactActionDescriptor> actionDescriptors = contact.availableActions();
+    QStringList actions;
+    for (int i = 0;i < actionDescriptors.count();i++)
+    {
+        QString action = actionDescriptors.at(i).actionName();
+        actions << action;
+    }
+    QVERIFY(actions.count() == 1);   
+    QVERIFY(actions.contains("email", Qt::CaseInsensitive));
+    
+    //pick first number for the actions
+    QContactEmailAddress emailAddress = contact.detail<QContactEmailAddress>();
+        
+    //Test Email action
+    QList<QContactActionDescriptor> emailActionDescriptors = QContactAction::actionDescriptors("email", "symbian");
+    QVERIFY(emailActionDescriptors.count() == 1);
+    QContactAction *emailAction = QContactAction::action(emailActionDescriptors.at(0));
+    QVERIFY(emailAction != 0);
+    QVERIFY(emailAction->isDetailSupported(emailList.at(0)) == true);
+    QVariantMap variantMap = emailAction->metaData();
+    QVERIFY(variantMap.count() == 0);
+    variantMap = emailAction->results();
+    QVERIFY(variantMap.count() == 0);
+    QSignalSpy spyEmailAction(emailAction, SIGNAL(stateChanged(QContactAction::State)));
+    emailAction->invokeAction(contact, emailAddress);
+    emailAction->invokeAction(contact);
+    QTRY_COMPARE(spyEmailAction.count(), 2); // make sure the signal was emitted exactly one time
+    delete emailAction;
+}
+
+void TestCntActions::noEmailSupport()
+{
+    QContact contact;
+    m_manager->saveContact(&contact);
+    
+    //expected no actions found
+    QList<QContactActionDescriptor> actionDescriptors = contact.availableActions();
+    QStringList actions;
+    for (int i = 0;i < actionDescriptors.count();i++)
+    {
+        QString action = actionDescriptors.at(i).actionName();
+        actions << action;
+    }
+    QVERIFY(actions.contains("email", Qt::CaseInsensitive) == false);
+}
+
+void TestCntActions::urlSupport()
+{
+    QContact contact;
+    QContactUrl url;
+    url.setUrl("www.test.com");
+    contact.saveDetail(&url);
+    m_manager->saveContact(&contact);
+    
+    //one number exist in contact
+    QList<QContactUrl> urlList = contact.details<QContactUrl>();
+    QVERIFY(urlList.count() == 1);
+    
+    //no actions expected
+    QList<QContactActionDescriptor> actionDescriptors = contact.availableActions();
+    QStringList actions;
+    for (int i = 0;i < actionDescriptors.count();i++)
+    {
+        QString action = actionDescriptors.at(i).actionName();
+        actions << action;
+    }
+    QVERIFY(actions.count() == 1);   
+    QVERIFY(actions.contains("url", Qt::CaseInsensitive));
+    
+    //pick first number for the actions
+    QContactUrl urlAddress = contact.detail<QContactUrl>();
+        
+    //Test Email action
+    QList<QContactActionDescriptor> urlActionDescriptors = QContactAction::actionDescriptors("url", "symbian");
+    QVERIFY(urlActionDescriptors.count() == 1);
+    QContactAction *urlAction = QContactAction::action(urlActionDescriptors.at(0));
+    QVERIFY(urlAction != 0);
+    QVERIFY(urlAction->isDetailSupported(urlList.at(0)) == true);
+    QVariantMap variantMap = urlAction->metaData();
+    QVERIFY(variantMap.count() == 0);
+    variantMap = urlAction->results();
+    QVERIFY(variantMap.count() == 0);
+    QSignalSpy spyUrlAction(urlAction, SIGNAL(stateChanged(QContactAction::State)));
+    urlAction->invokeAction(contact, urlAddress);
+    urlAction->invokeAction(contact);
+    QTRY_COMPARE(spyUrlAction.count(), 2); // make sure the signal was emitted exactly once each time
+    delete urlAction;
+}
+
+void TestCntActions::noUrlSupport()
+{
+    QContact contact;
+    m_manager->saveContact(&contact);
+    
+    //expected no actions found
+    QList<QContactActionDescriptor> actionDescriptors = contact.availableActions();
+    QStringList actions;
+    for (int i = 0;i < actionDescriptors.count();i++)
+    {
+        QString action = actionDescriptors.at(i).actionName();
+        actions << action;
+    }
+    QVERIFY(actions.contains("url", Qt::CaseInsensitive) == false);
+}
+
+//QTEST_MAIN(TestCntActions);