mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/src/ut_lcuiengine.cpp
branchRCL_3
changeset 22 73a1feb507fb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/src/ut_lcuiengine.cpp	Tue Aug 31 15:12:07 2010 +0300
@@ -0,0 +1,1276 @@
+/*
+* Copyright (c) 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 "ut_lcuiengine.h"
+#include "lcuiengine.h"
+#include "lcuiengine_p.h"
+#include "lcactivitymanager.h"
+
+#include "lcenginestub.h"
+#include "lcsessionstub.h"
+#include "lcvideoplayerstub.h"
+#include "lcuidefs.h"
+#include "qthighway_stub_helper.h"
+
+#include <QtTest/QtTest>
+#include <QMap>
+
+#include <hbmainwindow.h>
+#include <hbdialog.h>
+#include <hbprogressdialog.h>
+#include <hbmessagebox.h>
+#include <hbaction.h>
+#include <hblabel.h>
+#include <QSignalSpy>
+#include <hbview.h>
+
+#include <xqsettingsmanager.h>
+#include <xqsettingskey.h>
+#include <settingsinternalcrkeys.h>
+#include <telincallvolcntrlcrkeys.h>
+
+const char lcutMultimediaSharingEng[] = "MultimediaSharing";
+const char lcutVideotelephonyEng[] = "Videotelephony";
+
+const char lcutMultimediaSharingApp[] = "Multimedia Sharing";
+const char lcutVideotelephonyApp[] = "Videotelephony";
+
+#define LC_ENGINE( uiengine )\
+    (static_cast<CLcEngineStub*>( uiengine->d->mLiveCommsEngine ) )
+
+#define LC_SESSION( uiengine )\
+    (LC_ENGINE(uiengine)->iSession)
+
+void UT_LcUiEngine::initTestCase()
+{
+    lcutStub_LcEngine_reset();
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+
+}
+
+void UT_LcUiEngine::cleanupTestCase()
+{
+    lcutStub_LcEngine_reset();
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+}
+
+
+void UT_LcUiEngine::init()
+{
+    lcutStub_LcEngine_reset();
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    mEngine = new LcUiEngine( lcutMultimediaSharingEng,
+                              lcutMultimediaSharingApp );
+    mInvitingNote = new HbProgressDialog();
+    mWaitingNote = new HbProgressDialog();
+    mAcceptQuery = new HbDialog();
+    mRecipientQuery = new HbDialog();
+    mShareOwnVideoQuery = new HbDialog();
+    
+}
+
+void UT_LcUiEngine::cleanup()
+{
+    lcutStub_LcEngine_reset();
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    delete mEngine;
+    delete mInvitingNote;
+    delete mWaitingNote;
+    delete mAcceptQuery;
+    delete mRecipientQuery;
+    delete mShareOwnVideoQuery;
+}
+
+void UT_LcUiEngine::testConstructor()
+{
+    // "MuS plug-in" loaded
+    QVERIFY( mEngine );
+    QCOMPARE( mEngine->d->mViewLayout, Lc_IdleViewLayout );
+    QVERIFY( !mEngine->d->mInvitingNote );
+    QVERIFY( !mEngine->d->mWaitingNote );
+    QVERIFY( !mEngine->d->mAcceptQuery );
+    QVERIFY( !mEngine->d->mRecipientQuery );
+    QVERIFY( !mEngine->d->mCloseTimer );
+    QVERIFY( mEngine->d->mLiveCommsEngine );
+    QCOMPARE( mEngine->d->mEngineName, QByteArray( lcutMultimediaSharingEng ) );
+    QVERIFY( mEngine->d->recipient() != hbTrId("txt_vt_custom_unknown_number") );
+    QCOMPARE( mEngine->d->sessionTitle(), QString( lcutMultimediaSharingApp ) );
+    int engineWindowParam = 0;
+    QVERIFY( LC_SESSION( mEngine )->mParams.contains( engineWindowParam ) );
+    QVERIFY( mEngine->d->mActivityManager );
+    QVERIFY( !mEngine->d->mActivityManager->isActivitySimulationEnabled() );
+    QVERIFY( !mEngine->d->mShareOwnVideoQuery );
+    
+    // "VT plug-in" loaded
+    lcutStub_LcEngine_reset();
+    lcutStub_LcSession_reset();    
+    delete mEngine;
+    mEngine = 0;
+    mEngine = new LcUiEngine( lcutVideotelephonyEng,
+                              lcutVideotelephonyApp );
+    QVERIFY( mEngine );
+    QCOMPARE( mEngine->d->mViewLayout, Lc_AllInOneViewLayout );
+    QVERIFY( !mEngine->d->mInvitingNote );
+    QVERIFY( !mEngine->d->mWaitingNote );
+    QVERIFY( !mEngine->d->mAcceptQuery );
+    QVERIFY( !mEngine->d->mRecipientQuery );
+    QVERIFY( !mEngine->d->mCloseTimer );
+    QVERIFY( mEngine->d->mLiveCommsEngine );
+    QCOMPARE( mEngine->d->mEngineName, QByteArray( lcutVideotelephonyEng ) );
+    QVERIFY( mEngine->d->recipient() != hbTrId("txt_vt_custom_unknown_number") );
+    QCOMPARE( mEngine->d->sessionTitle(), QString( lcutVideotelephonyApp ) );
+    QVERIFY( LC_SESSION( mEngine )->mParams.contains( engineWindowParam ) );
+    QVERIFY( !mEngine->d->mFullScreen );
+    QVERIFY( mEngine->d->mActivityManager );
+    QVERIFY( !mEngine->d->mActivityManager->isActivitySimulationEnabled() );
+    QVERIFY( !mEngine->d->mShareOwnVideoQuery );
+}
+
+void UT_LcUiEngine::testFeatureSupported()
+{
+    // Engine not loaded
+    CLcEngine* enginePtr = mEngine->d->mLiveCommsEngine;
+    mEngine->d->mLiveCommsEngine = 0;
+    QVERIFY( !mEngine->d->featureSupported( CLcEngine::ELcShowAcceptQuery ) );
+    
+    // Engine loaded, feature not supported
+    mEngine->d->mLiveCommsEngine = enginePtr;
+    QVERIFY( !mEngine->d->featureSupported( CLcEngine::ELcShowAcceptQuery ) );
+    
+    // Feature supported
+    lcutStub_LcEngine_setLcFeatureSupported( true );
+    QVERIFY( mEngine->d->featureSupported( CLcEngine::ELcShowAcceptQuery ) );
+}
+
+void UT_LcUiEngine::testEstablishSession()
+{
+    // Leave 
+    lcutStub_LcEngine_setFailure( -1 );
+    QCOMPARE( mEngine->d->establishSession(), -1 );
+    QVERIFY( !mEngine->d->mCloseTimer );
+    
+    // No leave
+    lcutStub_LcEngine_reset();
+    QCOMPARE( mEngine->d->establishSession(), 0 );
+    QVERIFY( mEngine->d->mCloseTimer );
+}
+
+void UT_LcUiEngine::testTerminateSession()
+{
+    // Leave 
+    lcutStub_LcEngine_setFailure( -1 );
+    QCOMPARE( mEngine->d->terminateSession(), -1 );
+    
+    // No leave
+    lcutStub_LcEngine_reset();
+    QCOMPARE( mEngine->d->establishSession(), 0 );
+}
+
+void UT_LcUiEngine::testSetWindowRect()
+{
+    TRect rect;
+    MLcVideoPlayer* player = 
+        mEngine->d->mLiveCommsEngine->Session().LocalVideoPlayer();
+    
+    // No player
+    QCOMPARE( mEngine->d->setWindowRect( 0, rect ), -1 );
+    
+    // Leave
+    lcutStub_LcEngine_setFailure( -2 );
+    QCOMPARE( mEngine->d->setWindowRect( player, rect ), -2 );    
+    
+    // No leave
+    lcutStub_LcEngine_reset();
+    QCOMPARE( mEngine->d->setWindowRect( player, rect ), 0 );
+}
+
+void UT_LcUiEngine::testEnableWindow()
+{
+    MLcVideoPlayer* player = 
+        mEngine->d->mLiveCommsEngine->Session().LocalVideoPlayer();
+    
+    // No player
+    QCOMPARE( mEngine->d->enableWindow( 0, true ), -1 );
+    
+    // Leave
+    lcutStub_LcEngine_setFailure( -2 );
+    QCOMPARE( mEngine->d->enableWindow( player, true ), -2 );    
+    
+    // No leave
+    lcutStub_LcEngine_reset();
+    QCOMPARE( mEngine->d->enableWindow( player, true ), 0 );
+}
+
+void UT_LcUiEngine::testPlay()
+{
+    MLcVideoPlayer* player = 
+        mEngine->d->mLiveCommsEngine->Session().LocalVideoPlayer();
+    
+    // No player
+    QCOMPARE( mEngine->d->play( 0 ), -1 );
+    
+    // Leave
+    lcutStub_LcEngine_setFailure( -2 );
+    QCOMPARE( mEngine->d->play( player ), -2 );    
+    
+    // No leave
+    lcutStub_LcEngine_reset();
+    QVERIFY( !player->LcIsPlayingL() );
+    QCOMPARE( mEngine->d->play( player ), 0 );
+    QVERIFY( player->LcIsPlayingL() );
+}
+
+void UT_LcUiEngine::testPause()
+{
+    MLcVideoPlayer* player = 
+        mEngine->d->mLiveCommsEngine->Session().LocalVideoPlayer();
+    
+    // No player
+    QCOMPARE( mEngine->d->pause( 0 ), -1 );
+    
+    // Leave
+    lcutStub_LcEngine_setFailure( -2 );
+    QCOMPARE( mEngine->d->pause( player ), -2 );    
+    
+    // No leave
+    lcutStub_LcEngine_reset();
+    QCOMPARE( mEngine->d->play( player ), 0 );
+    QVERIFY( player->LcIsPlayingL() );
+    QCOMPARE( mEngine->d->pause( player ), 0 );
+    QVERIFY( !player->LcIsPlayingL() );    
+}
+
+void UT_LcUiEngine::testEnableSpeaker()
+{
+    // Leave 
+    lcutStub_LcEngine_setFailure( -1 );
+    QCOMPARE( mEngine->d->enableSpeaker( true ), -1 );
+    QVERIFY( !mEngine->d->isSpeakerOn() );
+    
+    // No leave
+    lcutStub_LcEngine_reset();
+    QCOMPARE( mEngine->d->enableSpeaker( true ), 0 );
+    QVERIFY( mEngine->d->isSpeakerOn() );
+}
+
+void UT_LcUiEngine::testMuteMic()
+{
+    // Leave 
+    lcutStub_LcEngine_setFailure( -1 );
+    QCOMPARE( mEngine->d->muteMic( true ), -1 );
+    lcutStub_LcEngine_reset();
+    QVERIFY( !mEngine->d->isMuted() );
+    
+    // No leave
+    QCOMPARE( mEngine->d->muteMic( true ), 0 );
+    QVERIFY( mEngine->d->isMuted() );
+}
+
+void UT_LcUiEngine::testStartLiveContent()
+{
+    // mInvitingNote not set
+    mInvitingNote->hide();
+    mEngine->d->startLiveContent();
+    QVERIFY( !mInvitingNote->isVisible() );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) );
+    
+    // mInvitingNote set, but the engine does not support the feature
+    lcutStub_LcSession_reset();
+    mEngine->d->mInvitingNote = mInvitingNote;
+    mEngine->d->startLiveContent();
+    QVERIFY( !mInvitingNote->isVisible() );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) );    
+    
+    // mInvitingNote set and the engine supports the feature
+    lcutStub_LcSession_reset();
+    lcutStub_LcEngine_setLcFeatureSupported( true );
+    mEngine->d->startLiveContent();
+    QVERIFY( mInvitingNote->isVisible() );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) ); 
+}
+
+void UT_LcUiEngine::testStart()
+{    
+    LC_SESSION( mEngine )->iState = MLcSession::EReceived;
+    mEngine->d->start();
+    QVERIFY( mEngine->d->mActivityManager->isActivitySimulationEnabled() );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) );
+    
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    
+    LC_SESSION( mEngine )->iState = MLcSession::EInitialized;
+    mEngine->d->start();
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) );
+
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    
+    mEngine->d->setUiComponents( mInvitingNote, mWaitingNote,
+                              mAcceptQuery, mRecipientQuery,mShareOwnVideoQuery );
+    LC_SESSION( mEngine )->iState = MLcSession::EInitialized;
+    mEngine->d->start();
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) );
+}
+    
+void UT_LcUiEngine::testSetUiComponents()
+{
+    QVERIFY( !mEngine->d->mInvitingNote );
+    QVERIFY( !mEngine->d->mWaitingNote );
+    QVERIFY( !mEngine->d->mAcceptQuery );
+    QVERIFY( !mEngine->d->mRecipientQuery );
+    
+    mEngine->d->setUiComponents(0,0,0,0,0);
+    
+    QVERIFY( !mEngine->d->mInvitingNote );
+    QVERIFY( !mEngine->d->mWaitingNote );
+    QVERIFY( !mEngine->d->mAcceptQuery );
+    QVERIFY( !mEngine->d->mRecipientQuery );
+    
+    mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery);
+    QVERIFY( mEngine->d->mInvitingNote );
+    QVERIFY( mEngine->d->mWaitingNote );
+    QVERIFY( mEngine->d->mAcceptQuery );
+    QVERIFY( mEngine->d->mRecipientQuery );
+}
+
+void UT_LcUiEngine::testSessionStateChanged()
+{        
+    LC_SESSION( mEngine )->iState = MLcSession::EUninitialized;
+    mEngine->d->StateChanged( *LC_SESSION( mEngine ) );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) );
+        
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    
+    QVERIFY( mEngine->d->mSessionDurationTimerId == 0 );
+    LC_SESSION( mEngine )->iState = MLcSession::EOpen;
+    mEngine->d->StateChanged( *LC_SESSION( mEngine ) );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcWindowL ) );
+    // Session duration is started when session opened
+    QVERIFY( mEngine->d->mSessionDurationTimerId != 0 );
+
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    
+    LC_SESSION( mEngine )->iState = MLcSession::EClosed;
+    QSignalSpy spy(mEngine, SIGNAL(stopped()));
+    mEngine->d->StateChanged( *LC_SESSION( mEngine ) );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    QCOMPARE( spy.count(), 1 );
+    
+    // mAcceptQuery not set
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();    
+    mAcceptQuery->hide();
+    LC_SESSION( mEngine )->iState = MLcSession::EReceived;
+    mEngine->d->StateChanged( *LC_SESSION( mEngine ) );
+    QVERIFY( !mAcceptQuery->isVisible() );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    
+    // mAcceptQuery set, but the engine does not support the feature
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    LC_SESSION( mEngine )->iState = MLcSession::EReceived;
+    mEngine->d->mAcceptQuery = mAcceptQuery;
+    mEngine->d->StateChanged( *LC_SESSION( mEngine ) );
+    QVERIFY( !mAcceptQuery->isVisible() );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    
+    // mAcceptQuery set and the engine supports the feature
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    LC_SESSION( mEngine )->iState = MLcSession::EReceived;
+    lcutStub_LcEngine_setLcFeatureSupported( true );
+    mEngine->d->StateChanged( *LC_SESSION( mEngine ) );
+    QVERIFY( mAcceptQuery->isVisible() );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );    
+    
+    // MT call and sharing own video not allowed by default , popup query shown    
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    mShareOwnVideoQuery->hide();
+    mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery);
+    LC_SESSION( mEngine )->iState = MLcSession::EOpen;
+    lcutStub_LcEngine_setLcFeatureSupported( true );
+    mEngine->d->StateChanged( *LC_SESSION( mEngine ) );
+    QVERIFY( mEngine->d->mShareOwnVideoQuery );
+    QVERIFY( mEngine->d->mShareOwnVideoQuery->isVisible() );
+    CLcVideoPlayer* localPlayer = LC_SESSION( mEngine )->iLocalPlayer;
+    localPlayer = 0;
+    
+    // MO call and sharing own video allowed by default , popup query not shown
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    mShareOwnVideoQuery->hide();
+    mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery);
+    LC_SESSION( mEngine )->iState = MLcSession::EOpen;
+    lcutStub_LcEngine_setLcFeatureSupported( false );
+    mEngine->d->StateChanged( *LC_SESSION( mEngine ) );    
+    QVERIFY( mEngine->d->mShareOwnVideoQuery );
+    QVERIFY( !mEngine->d->mShareOwnVideoQuery->isVisible() );
+        
+}
+
+void UT_LcUiEngine::testPlayerStateChanged()
+{
+    CLcVideoPlayer* localPlayer = LC_SESSION( mEngine )->iLocalPlayer;
+    QVERIFY( localPlayer != NULL );
+    QSignalSpy localPlayerSignalSpy( mEngine, SIGNAL( localPlayerPlaying() ) );
+    QSignalSpy localPlayerSignalSpy2( mEngine, SIGNAL( localPlayerPreparing() ) );
+    QSignalSpy localPlayerSignalSpy3( mEngine, SIGNAL( localPlayerBuffering() ) );
+    QSignalSpy localPlayerSignalSpy4( mEngine, SIGNAL( localPlayerPaused() ) );
+    QSignalSpy localPlayerSignalSpy5( mEngine, SIGNAL( localPlayerUnavailable() ) );
+    
+    CLcVideoPlayer* remotePlayer = LC_SESSION( mEngine )->iRemotePlayer;
+    QVERIFY( remotePlayer != NULL );
+    QSignalSpy remotePlayerSignalSpy( mEngine, SIGNAL( remotePlayerPlaying() ) );
+    QSignalSpy remotePlayerSignalSpy2( mEngine, SIGNAL( remotePlayerPreparing() ) );
+    QSignalSpy remotePlayerSignalSpy3( mEngine, SIGNAL( remotePlayerBuffering() ) );
+    QSignalSpy remotePlayerSignalSpy4( mEngine, SIGNAL( remotePlayerPaused() ) );
+    QSignalSpy remotePlayerSignalSpy5( mEngine, SIGNAL( remotePlayerUnavailable() ) );
+
+    // Use local player, player not playing
+    mEngine->d->StateChanged( *localPlayer );
+    QCOMPARE( localPlayerSignalSpy.count(), 0 );
+    QCOMPARE( localPlayerSignalSpy2.count(), 0 );
+    QCOMPARE( localPlayerSignalSpy3.count(), 0 );
+    QCOMPARE( localPlayerSignalSpy4.count(), 0 );
+    QCOMPARE( localPlayerSignalSpy5.count(), 0 );
+    
+    // Use local player, player preparing
+    localPlayer->iState = MLcVideoPlayer::EPreparing;
+    mEngine->d->StateChanged( *localPlayer );
+    QCOMPARE( localPlayerSignalSpy2.count(), 1 );
+
+    // Use local player, player buffering
+    localPlayer->iState = MLcVideoPlayer::EBuffering;
+    mEngine->d->StateChanged( *localPlayer );
+    QCOMPARE( localPlayerSignalSpy3.count(), 1 );
+
+    // Use local player, player playing
+    localPlayer->iState = MLcVideoPlayer::EPlaying;
+    mEngine->d->StateChanged( *localPlayer );
+    QCOMPARE( localPlayerSignalSpy.count(), 1 );
+    
+    // Use local player, player paused
+    localPlayer->iState = MLcVideoPlayer::EPaused;
+    mEngine->d->StateChanged( *localPlayer );
+    QCOMPARE( localPlayerSignalSpy4.count(), 1 );
+    
+    // Use local player, player unavailable
+    localPlayer->iState = MLcVideoPlayer::EUnavailable;
+    mEngine->d->StateChanged( *localPlayer );
+    QCOMPARE( localPlayerSignalSpy5.count(), 1 );
+    
+    // Use remote player, no waiting note
+    mEngine->d->StateChanged( *remotePlayer );
+    QVERIFY( mWaitingNote->isVisible() );
+    QCOMPARE( remotePlayerSignalSpy.count(), 0 );
+    QCOMPARE( remotePlayerSignalSpy2.count(), 0 );  
+    QCOMPARE( remotePlayerSignalSpy3.count(), 0 );  
+    QCOMPARE( remotePlayerSignalSpy4.count(), 0 );  
+    QCOMPARE( remotePlayerSignalSpy5.count(), 0 );  
+
+    // Use remote player, waiting note present, player not playing
+    mEngine->d->mWaitingNote = mWaitingNote;
+    mEngine->d->StateChanged( *remotePlayer );
+    QVERIFY( mWaitingNote->isVisible() );
+    QCOMPARE( remotePlayerSignalSpy.count(), 0 );
+    QCOMPARE( remotePlayerSignalSpy2.count(), 0 );  
+    QCOMPARE( remotePlayerSignalSpy3.count(), 0 );  
+    QCOMPARE( remotePlayerSignalSpy4.count(), 0 );  
+    QCOMPARE( remotePlayerSignalSpy5.count(), 0 );  
+
+    // Use remote player, player preparing
+    remotePlayer->iState = MLcVideoPlayer::EPreparing;
+    mEngine->d->StateChanged( *remotePlayer );
+    QVERIFY( mWaitingNote->isVisible() );
+    QCOMPARE( remotePlayerSignalSpy2.count(), 1 );  
+    
+    // Use remote player, player buffering
+    remotePlayer->iState = MLcVideoPlayer::EBuffering;
+    mEngine->d->StateChanged( *remotePlayer );
+    QVERIFY( mWaitingNote->isVisible() );
+    QCOMPARE( remotePlayerSignalSpy3.count(), 1 );  
+
+    // Use remote player, waiting note present, player playing
+    remotePlayer->iState = MLcVideoPlayer::EPlaying;
+    mEngine->d->StateChanged( *remotePlayer );
+    QVERIFY( !mWaitingNote->isVisible() );
+    QCOMPARE( remotePlayerSignalSpy.count(), 1 );  
+
+    // Use remote player, waiting note present, player playing
+    remotePlayer->iState = MLcVideoPlayer::EUnavailable;
+    mEngine->d->StateChanged( *remotePlayer );
+    QVERIFY( !mWaitingNote->isVisible() );
+    QCOMPARE( remotePlayerSignalSpy5.count(), 1 );  
+
+    // Use remote player, player paused
+    remotePlayer->iState = MLcVideoPlayer::EPaused;
+    mEngine->d->StateChanged( *remotePlayer );
+    QVERIFY( !mWaitingNote->isVisible() );
+    QCOMPARE( remotePlayerSignalSpy4.count(), 1 );  
+
+    QCOMPARE( localPlayerSignalSpy.count(), 1 );
+    QCOMPARE( localPlayerSignalSpy2.count(), 1 );
+    QCOMPARE( localPlayerSignalSpy3.count(), 1 );
+    QCOMPARE( localPlayerSignalSpy4.count(), 1 );
+    QCOMPARE( localPlayerSignalSpy5.count(), 1 );
+
+    QCOMPARE( remotePlayerSignalSpy.count(), 1 );
+    QCOMPARE( remotePlayerSignalSpy2.count(), 1 );  
+    QCOMPARE( remotePlayerSignalSpy3.count(), 1 );  
+    QCOMPARE( remotePlayerSignalSpy4.count(), 1 );  
+    QCOMPARE( remotePlayerSignalSpy5.count(), 1 );  
+    
+}
+
+void UT_LcUiEngine::testSetContentAreas()
+{
+    QRectF shared;
+    QRectF received;
+    
+    QVERIFY( LC_SESSION( mEngine )->iLocalPlayer );
+    QVERIFY( LC_SESSION( mEngine )->iRemotePlayer );
+    QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iRect.iTl.iX != 0);
+    QVERIFY( LC_SESSION( mEngine )->iRemotePlayer->iRect.iTl.iX != 0);
+    
+    mEngine->d->setContentAreas( shared, received );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_SetLcWindowRectL ) );
+    QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iRect.iTl.iX == 0);
+    QVERIFY( LC_SESSION( mEngine )->iRemotePlayer->iRect.iTl.iX == 0);
+    
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    
+    mEngine->d->setContentAreas( shared, received );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    
+    shared.setHeight(100);
+    received.setHeight(100);
+    
+    mEngine->d->setContentAreas( shared, received );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_SetLcWindowRectL ) );
+    
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    
+    delete LC_SESSION( mEngine )->iLocalPlayer;
+    LC_SESSION( mEngine )->iLocalPlayer = 0;
+    delete LC_SESSION( mEngine )->iRemotePlayer;
+    LC_SESSION( mEngine )->iRemotePlayer = 0;
+    
+    mEngine->d->setContentAreas( shared, received );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+}
+
+void UT_LcUiEngine::testSetOrientation()
+{
+    bool ok( false );
+
+    //1. setting landscape
+    QVERIFY( LC_SESSION( mEngine )->iLocalPlayer );
+    QVERIFY( LC_SESSION( mEngine )->iRemotePlayer );
+
+    ok = mEngine->d->setOrientation( Qt::Horizontal );
+    QVERIFY( ok );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_SetLcWindowOrientationL ) );
+    QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iOrientation == MLcWindow::ELandscape );
+    QVERIFY( LC_SESSION( mEngine )->iRemotePlayer->iOrientation == MLcWindow::ELandscape );
+
+    //2. setting layout failed
+    // Leave
+    lcutStub_LcEngine_setFailure( -1 );
+    lcutStub_LcPlayer_reset();
+    ok = mEngine->d->setOrientation( Qt::Horizontal );
+    QVERIFY( !ok );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    
+    //3. setting layout with no players
+    lcutStub_LcEngine_reset();
+    lcutStub_LcPlayer_reset();
+    delete LC_SESSION( mEngine )->iLocalPlayer;
+    LC_SESSION( mEngine )->iLocalPlayer = 0;
+    delete LC_SESSION( mEngine )->iRemotePlayer;
+    LC_SESSION( mEngine )->iRemotePlayer = 0;
+    
+    ok = mEngine->d->setOrientation( Qt::Horizontal );
+    QVERIFY( ok );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );    
+}
+
+
+void UT_LcUiEngine::testToggleMute()
+{
+    QSignalSpy mutedSpy(mEngine, SIGNAL(muted()));
+    QSignalSpy unmutedSpy(mEngine, SIGNAL(unmuted()));
+    
+    
+    // Leave from isMuted
+    mEngine->d->toggleMute();
+    QVERIFY( mEngine->d->isMuted() );
+    lcutStub_LcEngine_setFailure( -2 );
+    QVERIFY( !mEngine->d->isMuted() );
+    
+    // No leave
+    lcutStub_LcEngine_reset();
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    mutedSpy.clear();
+    unmutedSpy.clear();
+    
+    mEngine->d->toggleMute();
+    QVERIFY( !mEngine->d->isMuted() );
+    mutedSpy.clear();
+    unmutedSpy.clear();
+    
+    mEngine->d->toggleMute();
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_MuteLcMicL ) );
+    QVERIFY( mEngine->d->isMuted() );
+    QCOMPARE(mutedSpy.count(), 1); // make sure the signal was emitted exactly one time
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    mutedSpy.clear();
+    unmutedSpy.clear();
+    
+    mEngine->d->toggleMute();
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_MuteLcMicL ) );
+    QVERIFY( !mEngine->d->isMuted() );
+    QCOMPARE(unmutedSpy.count(), 1); // make sure the signal was emitted exactly one time
+    
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    mutedSpy.clear();
+    unmutedSpy.clear();
+    
+    // test async mute
+    lcutStub_LcPlayer_asyncCompletion( true );
+    mEngine->d->toggleMute();
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_MuteLcMicL ) );
+    QVERIFY( mEngine->d->isMuted() );
+    QVERIFY( mEngine->d->mBlocked );
+    QVERIFY( mEngine->d->mPendingAction == "muted" );
+    
+    // nothing yet signaled as completion is pending
+    QCOMPARE(mutedSpy.count(), 0);
+    QCOMPARE(unmutedSpy.count(), 0);
+    
+    
+    lcutStub_LcPlayer_asyncCompletion( false );
+}
+
+void UT_LcUiEngine::testToggleSpeaker()
+{
+    QSignalSpy speakerEnabledSpy(mEngine, SIGNAL(speakerEnabled()));
+    QSignalSpy speakerDisabledSpy(mEngine, SIGNAL(speakerDisabled()));
+
+    QVERIFY( !mEngine->d->isSpeakerOn() );
+
+    mEngine->d->toggleSpeaker();
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcLoudspeakerL ) );
+    QVERIFY( mEngine->d->isSpeakerOn() );
+    QCOMPARE(speakerEnabledSpy.count(), 1);
+
+    
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    speakerEnabledSpy.clear();
+    speakerDisabledSpy.clear();
+    
+    mEngine->d->toggleSpeaker();
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcLoudspeakerL ) );
+    QVERIFY( !mEngine->d->isSpeakerOn() );
+    QCOMPARE(speakerDisabledSpy.count(), 1);
+    
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    speakerEnabledSpy.clear();
+    speakerDisabledSpy.clear();
+    
+    // test asynch speaker functionality.
+    
+    lcutStub_LcPlayer_asyncCompletion( true );
+    mEngine->d->toggleSpeaker();
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcLoudspeakerL ) );
+    QVERIFY( mEngine->d->isSpeakerOn() );
+    QVERIFY( mEngine->d->mBlocked );
+    QVERIFY( mEngine->d->mPendingAction == "speakerEnabled" );
+    
+    // nothing yet signaled as completion is pending
+    QCOMPARE(speakerEnabledSpy.count(), 0);
+    QCOMPARE(speakerDisabledSpy.count(), 0);
+    
+    lcutStub_LcPlayer_asyncCompletion( false );
+}
+
+void UT_LcUiEngine::testToggleDisableCamera()
+{   
+    QSignalSpy enabledSpy(mEngine, SIGNAL(cameraEnabled()));
+    QSignalSpy disabledSpy(mEngine, SIGNAL(cameraDisabled()));
+
+    QVERIFY( LC_SESSION( mEngine )->iLocalPlayer );
+    LC_SESSION( mEngine )->iLocalPlayer->iPlaying = ETrue;    
+    LC_SESSION( mEngine )->iRemotePlayer->iState = MLcVideoPlayer::EPlaying;
+    QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iPlaying );
+        
+    mEngine->d->toggleDisableCamera();
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_LcPauseL ) );
+    QVERIFY( !LC_SESSION( mEngine )->iLocalPlayer->iPlaying );
+    QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iState == MLcVideoPlayer::EPaused );
+    QCOMPARE(enabledSpy.count(), 0);
+    QCOMPARE(disabledSpy.count(), 1);
+
+    mEngine->d->toggleDisableCamera();
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_LcPlayL ) );   
+    QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iPlaying );
+    QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iState == MLcVideoPlayer::EPlaying );
+    QCOMPARE(enabledSpy.count(), 1);
+    QCOMPARE(disabledSpy.count(), 1);
+}
+
+void UT_LcUiEngine::testToggleCamera()
+{
+    // Leave
+    lcutStub_LcEngine_setFailure( -1 );
+    mEngine->d->toggleCamera();
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    
+    // No leave
+    lcutStub_LcEngine_reset();
+    mEngine->d->toggleCamera();
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_ToggleLcCameraL ) );
+}
+
+void UT_LcUiEngine::testStartReceiving()
+{
+    // mAcceptQuery not set, mWaitingNote not set
+    mAcceptQuery->show();
+    mWaitingNote->hide();
+    mEngine->d->startReceiving();
+    QVERIFY( mAcceptQuery->isVisible() );
+    QVERIFY( !mWaitingNote->isVisible() );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) );    
+    
+    // mAcceptQuery set, mWaitingNote not set
+    lcutStub_LcSession_reset();
+    mEngine->d->mAcceptQuery = mAcceptQuery;
+    mEngine->d->startReceiving();
+    QVERIFY( !mAcceptQuery->isVisible() );
+    QVERIFY( !mWaitingNote->isVisible() );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) );
+    
+    // mWaitingNote set, but the engine does not support the feature
+    lcutStub_LcSession_reset();
+    mEngine->d->mWaitingNote = mWaitingNote;
+    mEngine->d->startReceiving();
+    QVERIFY( !mAcceptQuery->isVisible() );
+    QVERIFY( !mWaitingNote->isVisible() );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) );    
+    
+    // mWaitingNote set and the engine supports the feature
+    lcutStub_LcSession_reset();
+    lcutStub_LcEngine_setLcFeatureSupported( true );
+    mEngine->d->startReceiving();
+    QVERIFY( !mAcceptQuery->isVisible() );
+    QVERIFY( mWaitingNote->isVisible() );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) );
+}
+
+void UT_LcUiEngine::testStartPlayback()
+{   
+    mEngine->d->startPlayback();
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcWindowL,0 ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcWindowL,1 ) );
+    
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    
+    delete LC_SESSION( mEngine )->iLocalPlayer;
+    LC_SESSION( mEngine )->iLocalPlayer = 0;
+    mEngine->d->startPlayback();
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcWindowL,0 ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall,1 ) );
+    
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    
+    delete LC_SESSION( mEngine )->iRemotePlayer;
+    LC_SESSION( mEngine )->iRemotePlayer = 0;
+    
+    mEngine->d->startPlayback();
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall,0 ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall,1 ) );
+}
+
+void UT_LcUiEngine::testStop()
+{
+    // Ensure that in MLcSession::EOpen state, "stopped" signal won't be emited
+    // Check also that session duration timer is stopped
+    LC_SESSION( mEngine )->iState = MLcSession::EOpen;
+    mEngine->d->startSessionDurationTimer();
+    QVERIFY( mEngine->d->mSessionDurationTimerId != 0 );
+    QSignalSpy spy(mEngine, SIGNAL(stopped()));
+    mEngine->d->mActivityManager->enableActivitySimulation(true);
+    mEngine->d->stop();
+    QVERIFY( !mEngine->d->mActivityManager->isActivitySimulationEnabled() );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_terminateSession ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    QCOMPARE( spy.count(), 0 );
+    QVERIFY( mEngine->d->mSessionDurationTimerId == 0 );
+
+    // Ensure that MLcSession::EClosed, will cause emition of "stopped" signal
+    lcutStub_LcSession_reset();
+    lcutStub_LcPlayer_reset();
+    LC_SESSION( mEngine )->iState = MLcSession::EClosed;
+    mEngine->d->stop();
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_terminateSession ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    QCOMPARE( spy.count(), 1 );
+}
+
+void UT_LcUiEngine::testSetViewLayout()
+{
+    QVERIFY( LC_SESSION( mEngine )->iLocalPlayer );
+    QVERIFY( LC_SESSION( mEngine )->iRemotePlayer );
+    QVERIFY( !LC_SESSION( mEngine )->iLocalPlayer->iPlaying );
+    QVERIFY( !LC_SESSION( mEngine )->iRemotePlayer->iPlaying );
+    LC_SESSION( mEngine )->iRemotePlayer->iState = MLcVideoPlayer::EPaused;
+    QVERIFY( !mEngine->d->usingVideoTelephoneEngine() );
+    
+    mEngine->d->setViewLayout();
+    QVERIFY( mEngine->d->viewLayout() == Lc_IdleViewLayout );
+    
+    LC_SESSION( mEngine )->iLocalPlayer->iPlaying = ETrue;
+    
+    mEngine->d->setViewLayout();
+    QVERIFY( mEngine->d->viewLayout() == Lc_SharedViewLayout );
+    
+    LC_SESSION( mEngine )->iLocalPlayer->iPlaying = EFalse;
+    LC_SESSION( mEngine )->iRemotePlayer->iState = MLcVideoPlayer::EPlaying;
+    
+    mEngine->d->setViewLayout();
+    QVERIFY( mEngine->d->viewLayout() == Lc_ReceivedViewLayout );
+    
+    LC_SESSION( mEngine )->iLocalPlayer->iPlaying = ETrue;
+    LC_SESSION( mEngine )->iRemotePlayer->iState = MLcVideoPlayer::EPlaying;
+    
+    mEngine->d->setViewLayout();
+    QVERIFY( mEngine->d->viewLayout() == Lc_TwowayViewLayout );
+    
+    delete LC_SESSION( mEngine )->iLocalPlayer;
+    LC_SESSION( mEngine )->iLocalPlayer = 0;
+    
+    mEngine->d->setViewLayout();
+    QVERIFY( mEngine->d->viewLayout() == Lc_ReceivedOnlyViewLayout );
+    
+    delete LC_SESSION( mEngine )->iRemotePlayer;
+    LC_SESSION( mEngine )->iRemotePlayer = 0;
+    
+    mEngine->d->setViewLayout();
+    QVERIFY( mEngine->d->viewLayout() == Lc_IdleViewLayout );
+    
+    mEngine->d->mEngineName = lcutVideotelephonyApp;
+    QVERIFY( mEngine->d->usingVideoTelephoneEngine() );
+    
+    mEngine->d->setViewLayout();
+    QVERIFY( mEngine->d->viewLayout() == Lc_AllInOneViewLayout );   
+}
+
+void UT_LcUiEngine::testHideNotes()
+{
+    // Notes not set
+    mEngine->d->hideNotes( true );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    QVERIFY( mInvitingNote->isVisible() );
+    QVERIFY( mWaitingNote->isVisible() );
+    QVERIFY( mAcceptQuery->isVisible() );
+    QVERIFY( mRecipientQuery->isVisible() );    
+    
+    // Notes set, hide all
+    mEngine->d->setUiComponents( mInvitingNote, mWaitingNote,
+                              mAcceptQuery, mRecipientQuery,mShareOwnVideoQuery );
+    mEngine->d->hideNotes( true );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    QVERIFY( !mInvitingNote->isVisible() );
+    QVERIFY( !mWaitingNote->isVisible() );
+    QVERIFY( !mAcceptQuery->isVisible() );
+    QVERIFY( !mRecipientQuery->isVisible() );
+
+    // Notes not set, do not hide waiting note
+    mInvitingNote->show();
+    mWaitingNote->show();
+    mAcceptQuery->show();
+    mRecipientQuery->show();       
+    mEngine->d->hideNotes( false );
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    QVERIFY( !mInvitingNote->isVisible() );
+    QVERIFY( mWaitingNote->isVisible() );
+    QVERIFY( !mAcceptQuery->isVisible() );
+    QVERIFY( !mRecipientQuery->isVisible() ); 
+}
+
+void UT_LcUiEngine::testZoom()
+{
+    LcControlValues zoomData;
+    
+    // Leave
+    lcutStub_LcEngine_setFailure( -1 );
+    mEngine->d->zoom( 1 );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    QCOMPARE( mEngine->d->zoomValues( zoomData ), -1 );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
+    
+    // No leave
+    lcutStub_LcEngine_reset();
+    lcutStub_LcPlayer_reset();
+    QCOMPARE( mEngine->d->zoomValues( zoomData ), 0 );
+    mEngine->d->zoom( 2 );
+    mEngine->d->zoom( 1 );
+    mEngine->d->zoom( 3 );
+    
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_SetLcZoomValueL, 0 ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_SetLcZoomValueL, 1 ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_SetLcZoomValueL, 2 ) );
+    QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcSession_NoCall, 3 ) );
+}
+
+void UT_LcUiEngine::testBlockUi()
+{
+    QSignalSpy blockedSpy(mEngine, SIGNAL(blocked()));
+    QSignalSpy unblockedSpy(mEngine, SIGNAL(unblocked()));
+    QSignalSpy mutedSpy(mEngine, SIGNAL(muted()));
+    
+    mEngine->d->BlockUi( ETrue );
+
+    QCOMPARE(blockedSpy.count(), 1);
+    QCOMPARE(unblockedSpy.count(), 0);
+    QCOMPARE(mutedSpy.count(), 0);
+    
+    // no pending action once unblocked
+    blockedSpy.clear();
+    
+    mEngine->d->BlockUi( EFalse );
+    QCOMPARE(blockedSpy.count(), 0);
+    QCOMPARE(unblockedSpy.count(), 1);
+    QCOMPARE(mutedSpy.count(), 0);
+    
+    
+    // pending action once unblocked
+    unblockedSpy.clear();
+    mEngine->d->setPendingAction( "muted" );
+    mEngine->d->BlockUi( EFalse );
+    QCOMPARE(blockedSpy.count(), 0);
+    QCOMPARE(unblockedSpy.count(), 1);
+    QCOMPARE(mutedSpy.count(), 1);
+    QVERIFY( mEngine->d->mPendingAction.isEmpty() );  
+}
+
+void UT_LcUiEngine::testCloseTimer()
+{
+    // Try to cancel without timer
+    mEngine->d->cancelCloseTimer();
+    QVERIFY( !mEngine->d->mCloseTimer );
+    
+    // Try to cancel without timer being active
+    mEngine->d->startCloseTimer();
+    QVERIFY( mEngine->d->mCloseTimer );
+    QVERIFY( mEngine->d->mCloseTimer->isActive() );
+    mEngine->d->mCloseTimer->stop();
+    QVERIFY( !mEngine->d->mCloseTimer->isActive() );
+    mEngine->d->cancelCloseTimer();
+    QVERIFY( mEngine->d->mCloseTimer );
+    QVERIFY( !mEngine->d->mCloseTimer->isActive() );
+    
+    // Cancel an active timer
+    mEngine->d->startCloseTimer();
+    QVERIFY( mEngine->d->mCloseTimer );
+    QVERIFY( mEngine->d->mCloseTimer->isActive() );
+    mEngine->d->cancelCloseTimer();
+    QVERIFY( mEngine->d->mCloseTimer );
+    QVERIFY( !mEngine->d->mCloseTimer->isActive() );    
+}
+
+
+void UT_LcUiEngine::testfullScreenMode()
+{
+    QVERIFY( !mEngine->d->fullScreenMode() );
+}
+
+
+void UT_LcUiEngine::testsetFullScreenMode()
+{
+    mEngine->d->setFullScreenMode(true);
+    QVERIFY( mEngine->d->fullScreenMode() );
+}
+
+void UT_LcUiEngine::testTimerEvent()
+{
+    mEngine->d->startSessionDurationTimer();
+    QSignalSpy spy(mEngine, SIGNAL(sessionDurationChanged(const QString &)));
+    
+    QTimerEvent wrongTimerEvent(9999);
+    mEngine->d->timerEvent(&wrongTimerEvent);
+    QVERIFY( spy.count() == 0 );
+    
+    QTimerEvent correctTimerEvent(mEngine->d->mSessionDurationTimerId);
+    mEngine->d->timerEvent(&correctTimerEvent);
+    QVERIFY( spy.count() == 1 );
+    QVERIFY( spy.at(0).count() == 1 ); // one arg which is duration as string
+    QTime currDuration = QTime::fromString(spy.at(0).at(0).toString());
+    QVERIFY( currDuration.isValid() );
+}
+
+void UT_LcUiEngine::testFillRemoteInfo()
+{
+    QSignalSpy recipientSpy(mEngine, SIGNAL(recipientChanged(const QString &)));
+    QSignalSpy numberSpy(mEngine, SIGNAL(phoneNumberChanged(const QString &)));
+    
+    // test filling without signal emitting
+    
+    // number and name changed 
+    mEngine->d->mRecipient = "";
+    mEngine->d->mPhoneNumber = "";
+    mEngine->d->fillRemoteInfo( false );
+    QVERIFY( mEngine->d->mRecipient.length() > 0 );
+    QVERIFY( mEngine->d->mPhoneNumber.length() > 0 );
+    QVERIFY( recipientSpy.count() == 0 );
+    QVERIFY( numberSpy.count() == 0 );
+    
+    // nothing changed
+    QString prevRecipient = mEngine->d->mRecipient;
+    QString prevNumber = mEngine->d->mPhoneNumber;
+    mEngine->d->fillRemoteInfo( false );
+    QVERIFY( mEngine->d->mRecipient == prevRecipient );
+    QVERIFY( mEngine->d->mPhoneNumber == prevNumber );
+    QVERIFY( recipientSpy.count() == 0 );
+    QVERIFY( numberSpy.count() == 0 );
+    
+    // test filling with signal emitting
+    
+    // number and name changed
+    mEngine->d->mRecipient = "";
+    mEngine->d->mPhoneNumber = "";
+    mEngine->d->fillRemoteInfo( true );
+    QVERIFY( mEngine->d->mRecipient == prevRecipient );
+    QVERIFY( mEngine->d->mPhoneNumber == prevNumber );
+    QVERIFY( recipientSpy.count() == 1 );
+    QVERIFY( numberSpy.count() == 1 );
+    
+    // state is opened and name not found and no number, unknown name is used
+    LC_SESSION( mEngine )->iState = MLcSession::EOpen;
+    delete LC_SESSION( mEngine )->iRemoteDisplayName;
+    LC_SESSION( mEngine )->iRemoteDisplayName = NULL;
+    LC_SESSION( mEngine )->iRemoteDisplayName = KNullDesC().AllocL();
+    delete LC_SESSION( mEngine )->iRemoteDetails;
+    LC_SESSION( mEngine )->iRemoteDetails = NULL;
+    LC_SESSION( mEngine )->iRemoteDetails = KNullDesC().AllocL();
+    mEngine->d->mPhoneNumber = "";
+    mEngine->d->fillRemoteInfo( true );
+    QVERIFY( mEngine->d->mRecipient == hbTrId("txt_vt_custom_unknown_number") );
+    QVERIFY( mEngine->d->mPhoneNumber.isEmpty() );
+    QVERIFY( recipientSpy.count() == 2 );
+    QVERIFY( numberSpy.count() == 1 );
+    
+    // name not found but number exists, number is used at opened state as recipient
+    mEngine->d->mRecipient = "";
+    mEngine->d->mPhoneNumber = "";
+    delete LC_SESSION( mEngine )->iRemoteDetails;
+    LC_SESSION( mEngine )->iRemoteDetails = NULL;
+    LC_SESSION( mEngine )->iRemoteDetails = _L("123445").AllocL();
+    mEngine->d->fillRemoteInfo( true );
+    QVERIFY( mEngine->d->mRecipient == "123445" );
+    QVERIFY( mEngine->d->mPhoneNumber == "123445" );
+    QVERIFY( recipientSpy.count() == 3 );
+    QVERIFY( numberSpy.count() == 2 );
+    
+}
+
+void UT_LcUiEngine::testUpdateSession()
+{
+    mEngine->d->updateSession();
+    QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_updateSession ) );
+}
+
+void UT_LcUiEngine::testIsLocalPlayerPlaying()
+{
+    // Not playing
+    QVERIFY( !mEngine->d->isLocalPlayerPlaying() );
+
+    // Playing
+    LC_SESSION( mEngine )->iLocalPlayer->LcPlayL();
+    QVERIFY( mEngine->d->isLocalPlayerPlaying() );
+}
+
+void UT_LcUiEngine::testIsRemotePlayerPlaying()
+{
+    // Not playing
+    QVERIFY( !mEngine->d->isRemotePlayerPlaying() );
+    
+    // Playing
+    LC_SESSION( mEngine )->iRemotePlayer->LcPlayL();
+    QVERIFY( mEngine->d->isRemotePlayerPlaying() );
+}
+
+void UT_LcUiEngine::testMinimized()
+{  
+    mEngine->minimize();    
+    QVERIFY( mEngine->isMinimized() );
+    mEngine->minimize(); // Doing nothing
+    QVERIFY( mEngine->isMinimized() );
+}
+
+void UT_LcUiEngine::testMaximized()
+{    
+    mEngine->maximize();    
+    QVERIFY(mEngine->isMaximized() ); 
+    mEngine->maximize(); // Doing nothing
+    QVERIFY(mEngine->isMaximized() );
+}
+
+void UT_LcUiEngine::testIsMinimized()
+{
+    mEngine->minimize();
+    QVERIFY( mEngine->isMinimized() );    
+}
+
+void UT_LcUiEngine::testHandleForegroundStatus()
+{
+    QtHighwayStubHelper::reset();
+    
+    // First time to foreground, engine is not set to foreground until viewReady signal
+    HbView currView;
+    mEngine->d->setCurrentView(&currView);
+    QVERIFY( mEngine->d->mFirstForegroundSwitch );
+    QVERIFY( !mEngine->d->mActivityManager->isActivitySimulationEnabled() );
+    
+    mEngine->d->HandleForegroundStatus(ETrue);
+    QVERIFY( mEngine->d->mActivityManager->isActivitySimulationEnabled() );
+    QVERIFY( !mEngine->d->session().IsBackgroundStartup() ); // Stub returns fg status in this
+    QVERIFY( !QtHighwayStubHelper::isAtBg() );
+    QVERIFY( !mEngine->d->mFirstForegroundSwitch );
+    
+    //Simulate viewReady signal happens, funciton will be called again.
+    mEngine->d->HandleForegroundStatus(ETrue);
+    QVERIFY( mEngine->d->session().IsBackgroundStartup() ); // Stub returns fg status in this
+    QVERIFY( !mEngine->d->mFirstForegroundSwitch );
+       
+    // Bg switch
+    QtHighwayStubHelper::reset();
+    QVERIFY( mEngine->d->mActivityManager->isActivitySimulationEnabled() );
+    mEngine->d->HandleForegroundStatus(EFalse);
+    QVERIFY( !mEngine->d->mActivityManager->isActivitySimulationEnabled() );
+    QVERIFY( QtHighwayStubHelper::isAtBg() );
+    QVERIFY( !mEngine->d->session().IsBackgroundStartup() ); // Stub returns fg status in this
+
+}
+
+
+void UT_LcUiEngine::testSendDialTone()
+{
+    //Dumy test: Ensure Conversion does not cause any problem.
+    QVERIFY( mEngine->d->SendDialTone('3') );
+}
+
+
+void UT_LcUiEngine::testShareVideoIsAllowedShownAutomatically() 
+{
+    lcutStub_LcEngine_setLcFeatureSupported( false );
+    mShareOwnVideoQuery->hide();
+    mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery);
+    mEngine->d->showSendVideoQueryWhenNecessary();
+    QVERIFY(mEngine->d->mShareOwnVideoQuery && !mEngine->d->mShareOwnVideoQuery->isVisible());
+}
+
+
+void UT_LcUiEngine::testShareVideoIsNotAllowedShown() 
+{
+    lcutStub_LcEngine_setLcFeatureSupported( false );
+    mShareOwnVideoQuery->hide();
+    mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery);
+    mEngine->d->showSendVideoQueryWhenNecessary();
+    QVERIFY(mEngine->d->mShareOwnVideoQuery && !mEngine->d->mShareOwnVideoQuery->isVisible());    
+}
+
+
+void UT_LcUiEngine::testShareVideoPermissionAskedAlways() 
+{
+    lcutStub_LcEngine_setLcFeatureSupported( true );
+    mShareOwnVideoQuery->hide();
+    mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery);
+    mEngine->d->showSendVideoQueryWhenNecessary();
+    QVERIFY(mEngine->d->mShareOwnVideoQuery && mEngine->d->mShareOwnVideoQuery->isVisible());
+}
+
+
+void UT_LcUiEngine::testVolumeLevelChanged()
+{
+    // Subscribe to the events.
+    mEngine->d->subscribeVolumeEvents();
+
+    QSignalSpy spy(mEngine, SIGNAL(volumeChanged(int)));
+    QCOMPARE( spy.count(), 0 );
+
+    
+    //Test1: Known Key Event handled
+    QVariant value;
+    value.setValue(5);
+    
+    XQSettingsKey validKey1(XQSettingsKey::TargetCentralRepository, 
+                            KCRUidInCallVolume.iUid, KTelIncallEarVolume);
+    mEngine->d->volumeLevelChanged(validKey1, value);
+    QCOMPARE( spy.count(), 1 );
+    spy.clear();
+
+    
+    //Test2: Known Key Event-2 handled
+    XQSettingsKey validKey2(XQSettingsKey::TargetCentralRepository, 
+                            KCRUidInCallVolume.iUid,KTelIncallLoudspeakerVolume);
+    mEngine->d->volumeLevelChanged(validKey2, value);
+    QCOMPARE( spy.count(), 1 );
+    spy.clear();
+    
+    //Test3: Unknow Key Event Ignored.
+    XQSettingsKey unKnownKey(XQSettingsKey::TargetCentralRepository, 
+                            787,899);
+    mEngine->d->volumeLevelChanged(unKnownKey, value);
+    QCOMPARE( spy.count(), 0 );
+    
+    // Un-Subscribe Events.
+    mEngine->d->unSubscribeVolumeEvents();
+}
+
+
+
+// End of file