qtmobility/tests/benchmarks/contacts/tst_contacts.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 5 453da2cfceef
--- a/qtmobility/tests/benchmarks/contacts/tst_contacts.cpp	Fri Apr 16 15:51:22 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,933 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QApplication>
-#include <QtTest/QtTest>
-//#include "contact.h"
-//#include <QContactManager>
-#include <QDebug>
-#include <QEventLoop>
-#include <QTimer>
-
-#include <qcontactabstractrequest.h>
-#include <requests/qcontactfetchrequest.h>
-#include <filters/qcontactlocalidfilter.h>
-#include <details/qcontactdetails.h>
-
-#ifdef Q_OS_SYMBIAN
-#include <cntfilt.h>
-#include <cntitem.h>
-#include <cntdb.h>
-#include <cntitem.h>
-#include <cntfield.h>
-#include <cntfldst.h>
-#include <cntdef.h>
-#include <cntdef.hrh> 
-#endif
-
-QTM_USE_NAMESPACE
-
-//Q_DECLARE_METATYPE(QSystemInfo::Version);
-//Q_DECLARE_METATYPE(QSystemInfo::Feature);
-
-class tst_Contact : public QObject
-{
-    Q_OBJECT
-
-private slots:
-    void initTestCase();
-    void cleanupTestCase();
-
-    void tst_createTime();
-
-    void tst_fetchAllContactIds();
-    void tst_fetchOneContact();
-    void tst_fetchTenContact();
-    //void tst_fetchAllContact();
-
-    void tst_createContact();    
-    void tst_saveContact();
-
-    void tst_nameFilter();
-
-    void tst_removeOneContact();
-    void tst_removeAllContacts();
-
-
-//    void tst_currentLanguage();
-//    void tst_availableLanguages();
-//
-//    void tst_versions_data();
-//    void tst_versions();
-//
-//    void tst_hasFeatures_data();
-//    void tst_hasFeatures();
-
-public slots:
-
-    void gotContact(QContactFetchRequest*,bool);
-    void stateChanged(QContactAbstractRequest::State newState);
-    void timeout();
-    void resultsAvailable();
-    void resultsAvailableFilter();
-    void setBackend(QString);
-
-private:
-    void createContact();
-    void clearContacts();
-    int countContacts();
-
-    enum {
-      BackendQContacts,
-      BackendContactsModel
-    } m_backend;
-    QString manager;
-    QEventLoop *loop;
-    QContactManager *m_qm;
-    int m_num_contacts;
-    QList<QContactLocalId> id_list;
-
-    int m_run;
-    
-    int m_num_start;
-
-    QTimer *m_timer;
-    QStringList firstNames;
-    QStringList lastNames;    
-
-};
-
-void tst_Contact::setBackend(QString backend)
-{
-    manager = backend;
-    if(manager == "SymbianContactsModel") // Only one at the moment
-      m_backend = BackendContactsModel;
-    else
-      m_backend = BackendQContacts;
-    qWarning() << "Backend set to: " << manager;
-}
-
-void tst_Contact::initTestCase()
-{
-    qDebug() << "Managers: " << QContactManager::availableManagers();    
-    m_run = 0;
-
-#if defined(Q_WS_MAEMO_6)
-    QStringList list = QContactManager::availableManagers();
-    int found = 0;
-    while(!list.empty()){
-        if(list.takeFirst() == "tracker"){
-            found = 1;
-            break;
-        }
-    }
-    if(!found)
-        QFAIL("Unable to find Maemo 6 tracker plugin. Please check install");
-
-    if(manager.isEmpty())
-        manager = "memory";
-    m_qm = new QContactManager(manager);
-#elif defined(Q_WS_MAEMO_5)
-    QFAIL("Maemo 5 does not support QContacts");
-#elif defined(Q_OS_SYMBIAN)
-    if(m_backend != BackendContactsModel) {
-      QStringList list = QContactManager::availableManagers();
-      int found = 0;
-      while(!list.empty()){
-        if(list.takeFirst() == "symbian"){
-          found = 1;
-          break;
-        }
-      }
-      if(!found) {
-        QFAIL("Unable to find Symbian plugin. Please check install");
-      }
-
-      if(manager.isEmpty()) {
-        manager = "symbian";
-      }    
-      m_qm = new QContactManager(manager);
-    }
-    else {
-      m_qm = 0x0;
-    }
-#else
-    QFAIL("Platform not supported");
-#endif
-
-
-    // setup an event loop for waiting
-    loop = new QEventLoop;
-
-    firstNames << "Anahera" << "Anaru" << "Hemi" << "Hine" << "Kiri" << "Maata" << "Mere" << "Moana" << "Paora" << "Petera" << "Piripi" << "Ruiha" << "Tane" << "Whetu";
-    lastNames << "Ati Awa" << "Kai Taho" << "Moriori" << "Muaupoko" << "Nga Rauru" << "Taranaki" << "Opotoki" << "Aotea" << "Taninui" << "Tuhourangi" << "Tainui" << "Waitaha";
-    
-    m_num_start = countContacts();
-    qDebug() << "Number of Contact: " << m_num_start;
-
-
-    for(int i = 0; i < 20; i++){
-        createContact();
-    }
-    
-    int after = countContacts();
-    if(after - m_num_start != 20){
-        qWarning() << "Failed to create 20 contacts";
-    }
-
-    m_timer = new QTimer(this);
-    connect(m_timer, SIGNAL(timeout()), this, SLOT(timeout()));
-
-}
-
-int tst_Contact::countContacts()
-{  
-    if(m_backend == BackendQContacts) {
-        QList<QContactLocalId> qcl = m_qm->contactIds();
-        return qcl.count();
-    } else if(m_backend == BackendContactsModel){
-#ifdef Q_OS_SYMBIAN
-    CContactDatabase* contactsDb = CContactDatabase::OpenL();
-    CleanupStack::PushL(contactsDb);
-    
-    int num = contactsDb->CountL();
-    
-    CleanupStack::PopAndDestroy(contactsDb);
-    
-    return num;    
-#endif
-    }
-
-    qWarning("No backend support in countContacts()");
-    return 0;
-
-}
-
-void tst_Contact::cleanupTestCase()
-{
-    clearContacts();
-    int num_end = countContacts();          
-    if(m_num_start != num_end){
-      QFAIL(QString("Number of contacts ending: %2 is different that starting number %1.  Poor cleanup").arg(m_num_start).arg(num_end).toAscii());
-    }
-}
-
-void tst_Contact::clearContacts()
-{
-  if(m_backend == BackendQContacts) {
-    QMap<int, QContactManager::Error> errorMap;
-    m_qm->removeContacts(&id_list, &errorMap);
-    id_list.clear();
-  }
-  else if(m_backend == BackendContactsModel){
-#ifdef Q_OS_SYMBIAN
-    CContactDatabase* db = CContactDatabase::OpenL();
-    CleanupStack::PushL(db);
-
-    CContactIdArray* idArray = CContactIdArray::NewLC();
-    while(!id_list.isEmpty())
-      idArray->AddL(id_list.takeFirst());
-    db->DeleteContactsL(*idArray);    
-    
-    CleanupStack::PopAndDestroy(2); //idArray, contactsDb
-#endif
-  }
-
-}
-
-void tst_Contact::tst_createTime()
-{
-  
-  if(m_backend == BackendQContacts){
-    QContactManager *qm = 0x0;
-
-    QBENCHMARK {
-        qm = new QContactManager(manager);
-    }
-
-    delete qm;
-  }
-  else if(m_backend == BackendContactsModel){
-#ifdef Q_OS_SYMBIAN
-    CContactDatabase* db = 0x0;
-    QBENCHMARK {
-      db = CContactDatabase::OpenL();     
-    }
-    CleanupStack::PushL(db);
-    CleanupStack::PopAndDestroy(1); //db
-#endif
-  }
-}
-
-void tst_Contact::tst_fetchAllContactIds()
-{    
-  if(m_backend == BackendQContacts) {
-    QList<QContactLocalId> ql;
-    QBENCHMARK {
-        ql = m_qm->contactIds();
-    }        
-  }
-  else if(m_backend == BackendContactsModel){
-#ifdef Q_OS_SYMBIAN
-    //open database
-    // Open the default contact database
-    CContactDatabase* contactsDb = CContactDatabase::OpenL();
-    CleanupStack::PushL(contactsDb);
-
-    CCntFilter *filter = CCntFilter::NewLC();
-
-    //get all contact items (no groups, templates...)
-    filter->SetContactFilterTypeALL(EFalse);
-    filter->SetContactFilterTypeCard(ETrue);
-    
-    CContactIdArray *iContacts = 0x0;
-    
-    QBENCHMARK {
-      contactsDb->FilterDatabaseL(*filter);
-      iContacts = CContactIdArray::NewLC(filter->iIds);
-    }
-    
-    CleanupStack::PopAndDestroy(3); //iContacts, filter, contactsDb    
-#endif 
-  }
-}
-
-void tst_Contact::tst_fetchOneContact()
-{
-  if(m_backend == BackendQContacts){
-    QContact c;    
-
-    m_run++;
-
-#if defined(Q_WS_MAEMO_6)
-    int ret;   
-    QContactFetchRequest* req = new QContactFetchRequest;
-
-    QList<QContactLocalId> qcl = m_qm->contactIds();
-    if(qcl.count() < 1)
-        QFAIL("No contacts to pull from tracker");
-    QList<QContactLocalId> one;
-    one += qcl.takeFirst();
-    QContactLocalIdFilter idFil;
-    idFil.setIds(one);
-    req->setFilter(idFil);
-
-    req->setManager(m_qm);    
-    //connect(req, SIGNAL(progress(QContactFetchRequest*, bool)), this, SLOT(gotContact(QContactFetchRequest*,bool)));
-    //connect(req, SIGNAL(stateChanged(QContactAbstractRequest::State)), this, SLOT(stateChanged(QContactAbstractRequest::State)));
-    connect(req, SIGNAL(resultsAvailable()), this, SLOT(resultsAvailable()));
-
-    m_num_contacts = 1;
-    m_timer->start(1000);
-
-    QBENCHMARK {
-        req->start();
-        ret = loop->exec();
-    }
-    m_timer->stop();
-
-    //qDebug() << "Got Contact: " << qm->synthesizeDisplayLabel(c);
-    if(ret){
-        QFAIL("Failed to load one contact");
-    }
-    delete req;
-
-#elif defined(Q_OS_SYMBIAN)    
-    QList<QContactLocalId> qcl = m_qm->contactIds();    
-    if(qcl.count() < 1)
-        QFAIL("No contacts to pull from tracker");
-    
-    QBENCHMARK {
-       c = m_qm->contact(qcl.first());
-    }
-#endif
-  }
-  else if(m_backend == BackendContactsModel){
-#ifdef Q_OS_SYMBIAN
-    //open database
-    // Open the default contact database
-    CContactDatabase* contactDb = CContactDatabase::OpenL();
-    CleanupStack::PushL(contactDb);
-    
-    int id = id_list.takeFirst();
-    id_list.append(id);
-    
-    CContactItem *item;
-    TInt r;
-        
-    QBENCHMARK {
-      TRAP(r, item = contactDb->ReadContactL(id));
-    }
-    CleanupStack::PushL(item);
-    
-    if(r != KErrNone){ qWarning() << "Error by OpenContactL: " << r; }
-        
-//    TRAP(r, contactDb->CloseContactL(id));
-//    if(r != KErrNone){qWarning() << "Error by CloseContactL: " << r; }
-    
-    //qDebug() << "Call FetchContactDone: " << id;        
-    
-    CleanupStack::PopAndDestroy(2); //contact, lock, contactsDb    
-
-#endif
-  }                
-}
-
-
-
-void tst_Contact::tst_fetchTenContact()
-{
-  if(m_backend == BackendQContacts){
-    QContact c;
-    m_run++;
-
-#if defined(Q_WS_MAEMO_6)
-    int ret;
-
-    QContactFetchRequest* req = new QContactFetchRequest;
-
-    QList<QContactLocalId> qcl = m_qm->contactIds();
-    if(qcl.count() < 10){
-        QFAIL("No enough contacts to get 10");
-    }
-    QList<QContactLocalId> one;
-    for(int i = 0; i<10; i++)
-        one += qcl.takeFirst();
-    m_num_contacts = 10;
-
-    QContactLocalIdFilter idFil;
-    idFil.setIds(one);
-    req->setFilter(idFil);
-
-    req->setManager(m_qm);
-
-    //    connect(req, SIGNAL(progress(QContactFetchRequest*, bool)), this, SLOT(gotContact(QContactFetchRequest*,bool)));
-    connect(req, SIGNAL(resultsAvailable()), this, SLOT(resultsAvailable()));
-
-    m_timer->start(1000);
-
-    QBENCHMARK {
-        req->start();
-        ret = loop->exec();
-    }
-    m_timer->stop();
-
-    //qDebug() << "Got Contact: " << qm->synthesizeDisplayLabel(c);
-    if(ret){
-        QFAIL("Failed to load one contact");
-    }
-
-    delete req;
-
-#elif defined(Q_OS_SYMBIAN)
-    QList<QContactLocalId> qcl = m_qm->contactIds();
-    if(qcl.count() < 10){
-        QFAIL("No enough contacts to get 10");
-    }
-    QList<QContactLocalId> one;
-    for(int i = 0; i<10; i++)
-        one += qcl.takeFirst();
-
-    QContactLocalIdFilter idFil;
-    idFil.setIds(one);
-    
-    QList<QContact> qlc;
-    
-    QBENCHMARK {
-      qlc = m_qm->contacts(idFil, QList<QContactSortOrder>(), QStringList());
-    }
-    
-    if(qlc.count() != 10){
-      QFAIL("Did not get 10 contacts back");    
-    }
-    
-#endif    
-  }
-  else if(m_backend == BackendContactsModel){
-#ifdef Q_OS_SYMBIAN
-    //open database
-    // Open the default contact database
-    CContactDatabase* contactDb = CContactDatabase::OpenL();
-    CleanupStack::PushL(contactDb);
-    
-    int id = id_list.takeFirst();
-    id_list.append(id);
-    
-    TInt r;
-    
-    CContactItem *item1;
-    CContactItem *item2;
-    CContactItem *item3;
-    CContactItem *item4;
-    CContactItem *item5;
-    CContactItem *item6;
-    CContactItem *item7;
-    CContactItem *item8;
-    CContactItem *item9;
-    CContactItem *item10;        
-        
-    QBENCHMARK {
-      TRAP(r, item1 = contactDb->ReadContactL(id));
-      id = id_list.takeFirst();
-      id_list.append(id);
-      TRAP(r, item2 = contactDb->ReadContactL(id));
-      id = id_list.takeFirst();
-      id_list.append(id);
-      TRAP(r, item3 = contactDb->ReadContactL(id));
-      id = id_list.takeFirst();
-      id_list.append(id);
-      TRAP(r, item4 = contactDb->ReadContactL(id));
-      id = id_list.takeFirst();
-      id_list.append(id);
-      TRAP(r, item5 = contactDb->ReadContactL(id));
-      id = id_list.takeFirst();
-      id_list.append(id);
-      TRAP(r, item6 = contactDb->ReadContactL(id));
-      id = id_list.takeFirst();
-      id_list.append(id);
-      TRAP(r, item7 = contactDb->ReadContactL(id));
-      id = id_list.takeFirst();
-      id_list.append(id);
-      TRAP(r, item8 = contactDb->ReadContactL(id));
-      id = id_list.takeFirst();
-      id_list.append(id);
-      TRAP(r, item9 = contactDb->ReadContactL(id));
-      id = id_list.takeFirst();
-      id_list.append(id);
-      TRAP(r, item10 = contactDb->ReadContactL(id));
-    }
-    CleanupStack::PushL(item1);
-    CleanupStack::PushL(item2);
-    CleanupStack::PushL(item3);
-    CleanupStack::PushL(item4);
-    CleanupStack::PushL(item5);
-    CleanupStack::PushL(item6);
-    CleanupStack::PushL(item7);
-    CleanupStack::PushL(item8);
-    CleanupStack::PushL(item9);
-    CleanupStack::PushL(item10);
-     
-    if(r != KErrNone){ qWarning() << "Error by OpenContactL: " << r; }
-            
-    CleanupStack::PopAndDestroy(11); //10*item + contactsDb    
-#endif
-  }
-}
-
-void tst_Contact::timeout()
-{    
-    qDebug() << "***** Timeout, haven't received the signal/contact within 1sec";
-    loop->exit(1); // timeout, fail test
-
-}
-
-void tst_Contact::gotContact(QContactFetchRequest *request, bool appendOnly)
-{
-    Q_UNUSED(appendOnly);
-
-    // first, check to make sure that the request is still valid.
-    if (request->state() == QContactAbstractRequest::CanceledState) {
-        delete request;
-        QWARN("Contact request canceled");
-        loop->exit(1);
-        return; // ignore these results.
-    }
-
-    if(request->contacts().count() > 0) {        
-        m_num_contacts -= request->contacts().count();
-        if(m_num_contacts <= 0)
-            loop->exit(0);
-        return; // got one or more
-    }
-
-    // check to see if the request status is "finished" - clean up.
-    if (request->state() == QContactAbstractRequest::FinishedState) {
-        delete request;        
-    }
-
-}
-
-void tst_Contact::resultsAvailable()
-{
-
-    QContactFetchRequest *req = qobject_cast<QContactFetchRequest *>(sender());
-    if(req){
-        //qDebug() << m_run << " Got resultsAvailable: " << req->contacts().count() << " need: " << m_num_contacts;
-        if(!req->contacts().empty()) {
-            m_num_contacts -= req->contacts().count();
-            if(m_num_contacts <= 0)
-                loop->exit(0);
-            return; // got one or more
-        }
-    }
-
-}
-
-void tst_Contact::resultsAvailableFilter()
-{
-
-    QContactFetchRequest *req = qobject_cast<QContactFetchRequest *>(sender());
-    if(req){
-        if(!req->contacts().empty()) { // we got enough certainly...don't know how many are coming back with the filter
-            loop->exit(0);
-            return; // got one or more
-        }
-    }
-}
-
-void tst_Contact::stateChanged(QContactAbstractRequest::State /*newState*/)
-{
-    qDebug() << "Got state change";
-}
-
-void tst_Contact::tst_createContact()
-{
-    QBENCHMARK {
-        createContact();
-    }
-}
-
-void tst_Contact::tst_saveContact()
-{
-  if(m_backend == BackendQContacts) {    
-    QContact *c = new QContact;
-    c->setType("Contact");
-    QContactName cname;
-    QString name;
-    name = firstNames.takeFirst();
-    firstNames.push_back(name);
-    cname.setFirstName(name);
-    name = lastNames.takeFirst();
-    lastNames.push_back(name);
-    cname.setLastName(name);
-    cname.setPrefix("Mr");
-    c->saveDetail(&cname);
-
-    int ret = 0; 
-    
-    QBENCHMARK {
-      ret = m_qm->saveContact(c);
-    }
-    if(!ret){
-      qDebug() << "Failed to create contact durring setup";
-      return;
-    }
-    id_list.append(c->localId());
-    delete c;
-  }
-  else if(m_backend == BackendContactsModel){
-#ifdef Q_OS_SYMBIAN
-    // Create a contact card and add a work phone number. Numeric values are 
-    // stored in a text field (storage type = KStorageTypeText).
-    
-    CContactDatabase* db = CContactDatabase::OpenL();
-    CleanupStack::PushL(db);
-
-    CContactCard* newCard = CContactCard::NewLC();    
-    
-    QString name;
-    
-    // Create the firstName field and add the data to it
-    name = firstNames.takeFirst();
-    firstNames.push_back(name);        
-    CContactItemField* firstName = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldGivenName);
-    TPtrC Firstname(reinterpret_cast<const TUint16*>(name.utf16()));
-    firstName->TextStorage()->SetTextL(Firstname);      
-    newCard->AddFieldL(*firstName);
-    CleanupStack::Pop(firstName);
-
-    // Create the lastName field and add the data to it
-    name = lastNames.takeFirst();
-    lastNames.push_back(name);        
-    CContactItemField* lastName= CContactItemField::NewLC(KStorageTypeText, KUidContactFieldFamilyName);
-    TPtrC Lastname(reinterpret_cast<const TUint16*>(name.utf16()));
-    lastName->TextStorage()->SetTextL(Lastname);
-    newCard->AddFieldL(*lastName);
-    CleanupStack::Pop(lastName);
-    
-    CContactItemField* prefix = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldPrefixName);
-    _LIT(KPrefix, "Mr");
-    prefix->TextStorage()->SetTextL(KPrefix);
-    newCard->AddFieldL(*prefix);
-    CleanupStack::Pop(prefix);
-    
-    QBENCHMARK {
-      // Add newCard to the database
-      const TContactItemId contactId = db->AddNewContactL(*newCard);
-      db->CloseContactL(contactId);
-      id_list.append(contactId);      
-    }
-        
-    CleanupStack::PopAndDestroy(2); //newCard, contactsDb
-#else
-    qWarning("ContactModel set but Q_OS_SYMBIAN not set, this doesn't make sense");
-#endif 
-  }
-}
-
-
-void tst_Contact::createContact()
-{
-  if(m_backend == BackendQContacts) {    
-    QContact *c = new QContact;
-    c->setType("Contact");
-    QContactName cname;
-    QString name;
-    name = firstNames.takeFirst();
-    firstNames.push_back(name);
-    cname.setFirstName(name);
-    name = lastNames.takeFirst();
-    lastNames.push_back(name);
-    cname.setLastName(name);
-    cname.setPrefix("Mr");
-    c->saveDetail(&cname);
-
-    if(!m_qm->saveContact(c)){
-      qDebug() << "Failed to create contact durring setup";
-      return;
-    }
-    id_list.append(c->localId());
-    delete c;
-  }
-  else if(m_backend == BackendContactsModel){
-#ifdef Q_OS_SYMBIAN
-    // Create a contact card and add a work phone number. Numeric values are 
-    // stored in a text field (storage type = KStorageTypeText).
-    
-    CContactDatabase* db = CContactDatabase::OpenL();
-    CleanupStack::PushL(db);
-
-    CContactCard* newCard = CContactCard::NewLC();    
-    
-    QString name;
-    
-    // Create the firstName field and add the data to it
-    name = firstNames.takeFirst();
-    firstNames.push_back(name);        
-    CContactItemField* firstName = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldGivenName);
-    TPtrC Firstname(reinterpret_cast<const TUint16*>(name.utf16()));
-    firstName->TextStorage()->SetTextL(Firstname);      
-    newCard->AddFieldL(*firstName);
-    CleanupStack::Pop(firstName);
-
-    // Create the lastName field and add the data to it
-    name = lastNames.takeFirst();
-    lastNames.push_back(name);        
-    CContactItemField* lastName= CContactItemField::NewLC(KStorageTypeText, KUidContactFieldFamilyName);
-    TPtrC Lastname(reinterpret_cast<const TUint16*>(name.utf16()));
-    lastName->TextStorage()->SetTextL(Lastname);
-    newCard->AddFieldL(*lastName);
-    CleanupStack::Pop(lastName);
-    
-    CContactItemField* prefix = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldPrefixName);
-    _LIT(KPrefix, "Mr");
-    prefix->TextStorage()->SetTextL(KPrefix);
-    newCard->AddFieldL(*prefix);
-    CleanupStack::Pop(prefix);
-    
-    // Add newCard to the database
-    const TContactItemId contactId = db->AddNewContactL(*newCard);
-    db->CloseContactL(contactId);    
-    
-    id_list.append(contactId);
-    CleanupStack::PopAndDestroy(2); //newCard, contactsDb
-#else
-    qWarning("ContactModel set but Q_OS_SYMBIAN not set, this doesn't make sense");
-#endif 
-  }
-}
-
-void tst_Contact::tst_nameFilter()
-{    
-  if(m_backend == BackendQContacts){
-    QContactFilter fil = QContactName::match(firstNames.first(),""); // pick one first name to find
-    //QContactFilter fil = QContactName::match("sdfsdfsdfjhsjkdfshdkf", ""); // pick one first name to find
-    QContact c;    
-
-    m_run++;
-
-#if defined(Q_WS_MAEMO_6)
-    int ret;
-    QContactFetchRequest* req = new QContactFetchRequest;
-    req->setFilter(fil);
-    req->setManager(m_qm);
-
-    connect(req, SIGNAL(resultsAvailable()), this, SLOT(resultsAvailableFilter()));
-
-    m_timer->start(1000);
-
-    QBENCHMARK {
-        req->start();
-        ret = loop->exec();
-    }
-    m_timer->stop();
-
-    //qDebug() << "Got Contact: " << qm->synthesizeDisplayLabel(c);
-    if(ret){
-        QFAIL("Failed to load one contact");
-    }
-
-//    QList<QContact> qcl = req->contacts();
-//    while(!qcl.isEmpty()){
-//        QContact c = qcl.takeFirst();
-//        qDebug() << "Contact: " << c.displayLabel();
-//    }
-    delete req;
-    
-#elif defined(Q_OS_SYMBIAN)
-    QList<QContact> qlc;
-    
-    QBENCHMARK {
-      qlc = m_qm->contacts(fil, QList<QContactSortOrder>(), QStringList());
-    }
-    
-//    while(!qlc.isEmpty()){
-//        QContact c = qlc.takeFirst();
-//        qDebug() << "Contact: " << c.displayLabel();
-//    }
-#endif
-  }
-  else if(m_backend == BackendContactsModel){
-#ifdef Q_OS_SYMBIAN
-    //open database
-    // Open the default contact database
-    CContactDatabase* contactDb = CContactDatabase::OpenL();
-    CleanupStack::PushL(contactDb);
-       
-    CContactItem *item = 0x0;
-            
-    const TPtrC Firstname(reinterpret_cast<const TUint16*>(firstNames.first().utf16()));
-    CContactIdArray* idArray;
-    
-    CContactItemFieldDef* fieldDef = new (ELeave) CContactItemFieldDef();
-    CleanupStack::PushL(fieldDef);
-    
-    fieldDef->AppendL( KUidContactFieldGivenName);
-       
-    QBENCHMARK {      
-      idArray = contactDb->FindLC(Firstname, fieldDef);      
-      if(idArray->Count() > 0)
-        item = contactDb->ReadContactL((*idArray)[0]);
-      else
-        QFAIL("No contacts returned from CContactDatabase::FindLC");
-    }
-    CleanupStack::PushL(item);    
-    
-    CleanupStack::PopAndDestroy(4); //item, idArray, fielddef, lock, contactsDb
-#endif
-  }
-}
-
-void tst_Contact::tst_removeOneContact()
-{
-  if(m_backend == BackendQContacts){
-    QList<QContactLocalId> one;
-    QMap<int, QContactManager::Error> errorMap;
-
-    if(id_list.count() < 1){ // incase we run out of contacts
-      createContact();
-    }
-    
-    one += id_list.takeFirst();
-    QBENCHMARK {
-        m_qm->removeContacts(&one, &errorMap);
-    }
-
-  }
-  else if(m_backend == BackendContactsModel){    
-#ifdef Q_OS_SYMBIAN
-    CContactDatabase* db = CContactDatabase::OpenL();
-    CleanupStack::PushL(db);    
-        
-    if(id_list.isEmpty())
-      QFAIL("no contacts available to be removed for tst_removeOnContact()");
-    
-    
-    TInt32 id = id_list.takeFirst();
-    
-    QBENCHMARK {
-      db->DeleteContactL(id);
-    }
-    
-    CleanupStack::PopAndDestroy(1); //idArray, contactsDb
-#endif
-  }
-}
-
-void tst_Contact::tst_removeAllContacts()
-{    
-    int before = countContacts();
-
-    if(before < 20) {
-        for(int i = before; i < 20; i++){
-            createContact();
-        }
-    }
-    
-    QBENCHMARK {
-        clearContacts();
-    }
-    
-}
-
-int main(int argc, char **argv){
-
-    QApplication app(argc, argv);
-
-    tst_Contact test1;
-    test1.setBackend("memory");
-    QTest::qExec(&test1, argc, argv);
-
-//    tst_Contact test2;
-//    test2.setBackend("tracker");
-//    QTest::qExec(&test2, argc, argv);
-#if defined(Q_OS_SYMBIAN)   
-    tst_Contact test2;
-    test2.setBackend("symbian");
-    QTest::qExec(&test2, argc, argv);
-    
-    tst_Contact test3;
-    test3.setBackend("SymbianContactsModel");
-    QTest::qExec(&test3, argc, argv);
-#endif
-}
-
-#include "tst_contacts.moc"
-