qtmobility/tests/auto/ut_qtcontacts_add_async/ut_qtcontacts_add_async.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 5 453da2cfceef
--- a/qtmobility/tests/auto/ut_qtcontacts_add_async/ut_qtcontacts_add_async.cpp	Fri Apr 16 15:51:22 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,241 +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 "ut_qtcontacts_add_async.h"
-
-#include <QContactManager>
-#include <QContactName>
-#include <QContactDetailFilter>
-#include <QtTest/QtTest>
-#include <QDebug>
-
-// Note that we try to avoid using any names that might already be in the database:
-const char* TESTNAME_FIRST = "ut_qtcontacts_add_firstname";
-const char* TESTNAME_LAST = "ut_qtcontacts_add_firstlast";
-
-ut_qtcontacts_add::ut_qtcontacts_add()
-: getExistingContactFinishedCallback(0),
-  waiting(false)
-{
-}
-
-ut_qtcontacts_add::~ut_qtcontacts_add()
-{
-
-}
-
-void ut_qtcontacts_add::initTestCase()
-{
-}
-
-void ut_qtcontacts_add::cleanupTestCase()
-{
-}
-
-void ut_qtcontacts_add::init()
-{
-}
-
-void ut_qtcontacts_add::cleanup()
-{
-  waiting = false;
-}
-
-bool ut_qtcontacts_add::waitForStop()
-{
-    waiting = true;
-
-    const int max_secs = 100000;
-
-    // wait for signal
-    int i = 0;
-    while(waiting && i++ < max_secs) {
-        // Allow the mainloop to run:
-        QTest::qWait(10);
-    }
-
-    return !waiting;
-}
-
-QContactManager* ut_qtcontacts_add::getContactManager()
-{
-    static QContactManager manager("tracker");
-    return &manager;
-}
-
-void ut_qtcontacts_add::onContactFetchRequestProgress()
-{
-    //qDebug() << "onContactFetchRequestProgress";
-    if (!contactFetchRequest.isFinished())
-        return;
-
-    //Store the contact so the callback can use it.
-    if(!(contactFetchRequest.contacts().isEmpty())) {
-        contact = contactFetchRequest.contacts()[0];
-        QVERIFY(contact.localId() != 0);
-        contactFetchRequest.cancel(); //Stop any more slot calls.
-    }
-
-    //qDebug() << "debug: fetched localId=" << contact.localId();
-
-    //Avoid more slot calls, though this is unlikely because it has finished.
-    contactFetchRequest.cancel();
-
-    //Call the callback method that was specified to getExistingContact():
-    if(getExistingContactFinishedCallback) {
-        FinishedCallbackFunc func = getExistingContactFinishedCallback;
-        getExistingContactFinishedCallback = 0;
-        (this->*func)();
-    }
-}
-
-
-void ut_qtcontacts_add::getExistingContact(FinishedCallbackFunc finishedCallback)
-{
-    QContactManager* manager = getContactManager();
-    Q_ASSERT(manager);
-
-    // Stop pending fetch requests
-    if (contactFetchRequest.isActive())
-        contactFetchRequest.cancel();
-
-    // Initialize the result.
-    contact = QContact();
-
-    //TODO: How can we AND on both the first and last name?
-    getExistingContactFinishedCallback = finishedCallback; //Call this when the contact has been retrieved.
-    connect(&contactFetchRequest, SIGNAL(resultsAvailable()),
-        SLOT(onContactFetchRequestProgress()));
-
-    QContactDetailFilter nameFilter;
-    nameFilter.setDetailDefinitionName(QContactName::DefinitionName, QContactName::FieldFirst);
-    nameFilter.setValue(QLatin1String(TESTNAME_FIRST));
-    nameFilter.setMatchFlags(QContactFilter::MatchExactly);
-    contactFetchRequest.setManager(manager);
-    contactFetchRequest.setFilter(nameFilter);
-
-    //qDebug() << "debug: start request";
-    contactFetchRequest.start();
-}
-
-//This is our actual test function:
-void ut_qtcontacts_add::ut_testAddContact()
-{
-    //qDebug() << "debug: ut_testAddContact";
-    //Make sure that the contact is not already in the database.
-    getExistingContact(&ut_qtcontacts_add::onContactFoundThenRemoveAndTest);
-
-    //Block (allowing the mainloop to run) until we have finished.
-    waitForStop();
-}
-
-void ut_qtcontacts_add::onContactFoundThenRemoveAndTest()
-{
-    //qDebug() << "debug: Removing the existing contact, if it exists.";
-    QContactManager* manager = getContactManager();
-    Q_ASSERT(manager);
-
-    //TODO: Find and use an async API that tells us when it has finished.
-    manager->removeContact(contact.localId());
-
-    // Run the Qt UI's main loop, showing the editor while it is running:
-    QTimer::singleShot(2000, this, SLOT(onTimeoutAddContact()));
-}
-
-void ut_qtcontacts_add::onTimeoutAddContact()
-{
-    //qDebug() << "debug: Trying to add contact.";
-
-    // Offer a UI to edit a prefilled contact.
-    QContactName name;
-    name.setFirstName(QLatin1String(TESTNAME_FIRST));
-    name.setLastName(QLatin1String(TESTNAME_LAST));
-    //TODO: Find and use an async API that tells us when it has finished.
-    contact.saveDetail(&name);
-    //const bool saved = contact.saveDetail(&name);
-    //Q_ASSERT(saved); //This won't necessarily be useful because our implementation doesn't support sync methods.
-
-    //Save the contact.
-    //But note that our QContactManager backend does not set localId when returning.
-    QContactManager* manager = getContactManager();
-    Q_ASSERT(manager);
-
-
-    manager->saveContact(&contact);
-    //This works too:
-    //QContact copy(contact);
-    //manager->saveContact(&copy);
-
-    //Check that it was really saved:
-    //qDebug() << "debug: checking that the contact was saved.";
-    getExistingContact(&ut_qtcontacts_add::onContactFoundThenCheck);
-}
-
-void ut_qtcontacts_add::onContactFoundThenCheck()
-{
-    //Check that it was really saved:
-    // The ContactManager::saveContact() documentation suggests that localeId=0 is for non-saved contacts.
-    //QEXPECT_FAIL("", "QContactManager::saveContact() saves the contact (see it by running the contacts UI), but returns false and doesn't set error(). Find out why.", Continue);
-    QVERIFY(contact.localId() != 0);
-
-    //Check that the correct details were saved:
-    const QContactName name = contact.detail<QContactName>();
-    QVERIFY(name.firstName() == QLatin1String(TESTNAME_FIRST));
-    QVERIFY(name.lastName() == QLatin1String(TESTNAME_LAST));
-
-    //Try to restore original conditions:
-    getExistingContact(&ut_qtcontacts_add::onContactFoundThenRemoveAndStop);
-}
-
-void ut_qtcontacts_add::onContactFoundThenRemoveAndStop()
-{
-    //qDebug() << "debug: ut_qtcontacts_add::onContactFoundThenRemoveAndStop";
-    QContactManager* manager = getContactManager();
-    Q_ASSERT(manager);
-    manager->removeContact(contact.localId());
-
-    // Allow the actual test function to return:
-    waiting = false;
-}
-
-
-
-QTEST_MAIN(ut_qtcontacts_add)