phoneengine/phoneservices/tsrc/ut_urischemehandlerservice/unit_tests.cpp
branchGCC_SURGE
changeset 51 f39ed5e045e0
parent 46 bc5a64e5bc3c
child 60 1eef62f5c541
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/phoneservices/tsrc/ut_urischemehandlerservice/unit_tests.cpp	Thu Jul 22 16:33:21 2010 +0100
@@ -0,0 +1,234 @@
+/*!
+* 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"