phoneengine/phoneservices/tsrc/ut_urischemehandlerservice/unit_tests.cpp
author William Roberts <williamr@symbian.org>
Thu, 22 Jul 2010 16:33:21 +0100
branchGCC_SURGE
changeset 51 f39ed5e045e0
parent 46 bc5a64e5bc3c
child 60 1eef62f5c541
permissions -rw-r--r--
Catchup to latest Symbian^4

/*!
* Copyright (c) 2010 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:  Unit tests for URI Scheme Handler Service.
*
*/

#include <QtTest/QtTest>
#include <mockservice.h>
#include <xqrequestinfo.h>
#include <HbDeviceMessageBox>
#include "urischemehandlerservice.h"
#include "telurischemeparser.h"
#include "ctiurischemeparser.h"
#include "mock_mpecallcontrolif.h"
#include "mock_mpecallsettersif.h"

const QString KGlobalPhoneNumber = "+358401234567890";
const QString KTelUriWithGlobalNumber("tel:" + KGlobalPhoneNumber);

void setPhoneNumber(
    const QString &uri,
    QString &phoneNumber,
    QString &dtmfString())
{
    Q_UNUSED(uri)
    Q_UNUSED(dtmfString)
    phoneNumber = KGlobalPhoneNumber;
}

class UT_UriSchemeHandlerService : public QObject, public MockService
{
    Q_OBJECT
    
public:
    UT_UriSchemeHandlerService();
    virtual ~UT_UriSchemeHandlerService();

private slots:
    void init();
    void cleanup();
    
    void t_viewUnsupportedScheme();
    void t_viewSupportedSchemeCapabilityCheckFails();
    void t_viewSupportedSchemeParsingFails();
    void t_viewSupportedUriUserCancelsCall();
    void t_viewSupportedUriUserAcceptsCall();
    void t_viewSupportedUriCallRequestFails();
    
private:
    UriSchemeHandlerService *m_uriHandlerService;
    CPECallControlIFMock *m_callControlIfMock;
    CPECallSettersIFMock *m_callSettersIfMock;
};


UT_UriSchemeHandlerService::UT_UriSchemeHandlerService()
    :
    m_uriHandlerService(NULL), 
    m_callControlIfMock(NULL), 
    m_callSettersIfMock(NULL)
{
}


UT_UriSchemeHandlerService::~UT_UriSchemeHandlerService()
{
    delete m_uriHandlerService;
    delete m_callControlIfMock;
    delete m_callSettersIfMock;
}


void UT_UriSchemeHandlerService::init()
{
    initialize();
    
    QT_TRAP_THROWING(SmcDefaultValue<XQRequestInfo>::SetL(XQRequestInfo()))
    
    m_callControlIfMock = new CPECallControlIFMock();
    m_callSettersIfMock = new CPECallSettersIFMock();
    m_uriHandlerService = new UriSchemeHandlerService(
        *m_callControlIfMock, *m_callSettersIfMock);
}


void UT_UriSchemeHandlerService::cleanup()
{
    reset();
    
    delete m_uriHandlerService;
    m_uriHandlerService = NULL;
    delete m_callControlIfMock;
    m_callControlIfMock = NULL;
    delete m_callSettersIfMock;
    m_callSettersIfMock = NULL;
    
    SmcDefaultValue<XQRequestInfo>::Reset();
}


void UT_UriSchemeHandlerService::t_viewUnsupportedScheme()
{
    QString unknownUri("mailto:alice@wonderland");
    
    EXPECT(TelUriSchemeParser::isSupportedUriScheme).returns(false);
    EXPECT(CPECallControlIFMock::HandleDialServiceCall).times(0);
    
    bool handled = m_uriHandlerService->view(unknownUri);
    
    QCOMPARE(handled, false);
    QVERIFY(verify());
}


void UT_UriSchemeHandlerService::t_viewSupportedSchemeCapabilityCheckFails()
{
    EXPECT(TelUriSchemeParser::isSupportedUriScheme).returns(true);
    QSet<int> invalidCapabilities;
    invalidCapabilities.insert(ECapabilityNetworkServices);
    EXPECT(XQRequestInfo::clientCapabilities).returns(invalidCapabilities);
    EXPECT(CPECallControlIFMock::HandleDialServiceCall).times(0);
    
    bool handled = m_uriHandlerService->view(KTelUriWithGlobalNumber);
    
    QCOMPARE(handled, false);
    QVERIFY(verify());
}


void UT_UriSchemeHandlerService::t_viewSupportedSchemeParsingFails()
{
    EXPECT(TelUriSchemeParser::isSupportedUriScheme).returns(true);
    QSet<int> validCapabilities;
    validCapabilities.insert(ECapabilityNetworkServices);
    validCapabilities.insert(ECapabilityNetworkControl);
    EXPECT(XQRequestInfo::clientCapabilities).returns(validCapabilities);
    EXPECT(TelUriSchemeParser::parseUri).returns(false);
    EXPECT(CPECallControlIFMock::HandleDialServiceCall).times(0);
    
    bool handled = m_uriHandlerService->view(KTelUriWithGlobalNumber);
    
    QCOMPARE(handled, false);
    QVERIFY(verify());    
}


void UT_UriSchemeHandlerService::t_viewSupportedUriUserCancelsCall()
{
    EXPECT(TelUriSchemeParser::isSupportedUriScheme).returns(true);
    QSet<int> validCapabilities;
    validCapabilities.insert(ECapabilityNetworkServices);
    validCapabilities.insert(ECapabilityNetworkControl);
    EXPECT(XQRequestInfo::clientCapabilities).returns(validCapabilities);
    EXPECT(TelUriSchemeParser::parseUri).returns(true);
    EXPECT(HbDeviceMessageBox::setTimeout).with(0);
    EXPECT(HbDeviceMessageBox::isAcceptAction).returns(false);
    EXPECT(CPECallControlIFMock::HandleDialServiceCall).times(0);
    
    bool handled = m_uriHandlerService->view(KTelUriWithGlobalNumber);
    
    QCOMPARE(handled, false);
    QVERIFY(verify());
}


void UT_UriSchemeHandlerService::t_viewSupportedUriUserAcceptsCall()
{
    EXPECT(TelUriSchemeParser::isSupportedUriScheme).returns(true);
    QSet<int> validCapabilities;
    validCapabilities.insert(ECapabilityNetworkServices);
    validCapabilities.insert(ECapabilityNetworkControl);
    EXPECT(XQRequestInfo::clientCapabilities).returns(validCapabilities);
    EXPECT(TelUriSchemeParser::parseUri)
        .willOnce(invoke(setPhoneNumber))
        .returns(true);
    EXPECT(HbDeviceMessageBox::setTimeout).with(0);
    EXPECT(HbDeviceMessageBox::isAcceptAction).returns(true);
    
    _LIT(KExpectedDialString, "+358401234567890");
    EXPECT(CPECallSettersIFMock::SetPhoneNumber).with(KExpectedDialString());
    EXPECT(CPECallSettersIFMock::SetCallTypeCommand).with(EPECallTypeCSVoice);
    EXPECT(CPECallControlIFMock::HandleDialServiceCall).returns(KErrNone);
    
    bool handled = m_uriHandlerService->view(KTelUriWithGlobalNumber);
    
    QCOMPARE(handled, true);
    QVERIFY(verify());
}


void UT_UriSchemeHandlerService::t_viewSupportedUriCallRequestFails()
{
    EXPECT(TelUriSchemeParser::isSupportedUriScheme).returns(true);
    QSet<int> validCapabilities;
    validCapabilities.insert(ECapabilityNetworkServices);
    validCapabilities.insert(ECapabilityNetworkControl);
    EXPECT(XQRequestInfo::clientCapabilities).returns(validCapabilities);
    EXPECT(TelUriSchemeParser::parseUri)
        .willOnce(invoke(setPhoneNumber))
        .returns(true);
    EXPECT(HbDeviceMessageBox::setTimeout).with(0);
    EXPECT(HbDeviceMessageBox::isAcceptAction).returns(true);
    
    _LIT(KExpectedDialString, "+358401234567890");
    EXPECT(CPECallSettersIFMock::SetPhoneNumber).with(KExpectedDialString());
    EXPECT(CPECallSettersIFMock::SetCallTypeCommand).with(EPECallTypeCSVoice);
    EXPECT(CPECallControlIFMock::HandleDialServiceCall).returns(KErrNoMemory);
    
    bool handled = m_uriHandlerService->view(KTelUriWithGlobalNumber);
    
    QCOMPARE(handled, false);
    QVERIFY(verify());
}


int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    UT_UriSchemeHandlerService tc;
    return QTest::qExec(&tc, argc, argv);
}

#include "unit_tests.moc"