--- /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);