mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lceffecthandler.cpp
branchRCL_3
changeset 22 73a1feb507fb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lceffecthandler.cpp	Tue Aug 31 15:12:07 2010 +0300
@@ -0,0 +1,469 @@
+/*
+* 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_lceffecthandler.h"
+#include "ut_lcuidefs.h"
+#include "lceffecthandler.h"
+#include "lcuiengine.h"
+#include "lcuidefs.h"
+#include "lcvideowidget.h"
+#include <QtTest/QtTest>
+#include <hbmainwindow.h>
+#include <hbinstance.h>
+
+#define UT_SET_ORIENTATION(orient) \
+HbInstance::instance()->allMainWindows().at(0)->setOrientation(orient);
+
+void UT_LcEffectHandler::initTestCase()
+{
+    lcutStub_LcUiEngine_reset();
+    //must have main window, even if it not used
+    mMainWindow = new HbMainWindow();
+}
+
+void UT_LcEffectHandler::cleanupTestCase()
+{
+    lcutStub_LcUiEngine_reset();
+    delete mMainWindow;
+}
+
+
+void UT_LcEffectHandler::init()
+{
+    mEngine = new LcUiEngine( lcEngineName, lcDisplayName );
+
+    mSharedVideo = new LcVideoWidget();
+    mSharedVideoOverlay = new LcVideoWidget(0,false);
+    mReceivedVideo = new LcVideoWidget();
+    mReceivedVideoOverlay = new LcVideoWidget(0,false);
+    mEffectHandler = new LcEffectHandler(
+            *mEngine,mSharedVideo,mSharedVideoOverlay,
+            mReceivedVideo,mReceivedVideoOverlay);
+    
+}
+
+void UT_LcEffectHandler::cleanup()
+{
+    lcutStub_LcUiEngine_reset();
+    delete mEffectHandler;
+    delete mEngine;
+    delete mSharedVideo;
+    delete mSharedVideoOverlay;
+    delete mReceivedVideoOverlay;
+    delete mReceivedVideo;
+}
+
+void UT_LcEffectHandler::testConstructor()
+{
+    QVERIFY( mEffectHandler );
+}
+
+void UT_LcEffectHandler::testSwap()
+{
+    clearWidgets();
+    QSignalSpy spy( mEffectHandler, SIGNAL(loadSwapLayout()) );
+    QVERIFY( !mEffectHandler->mSharedVideo );
+    QVERIFY( !mEffectHandler->mReceivedVideo );
+    QVERIFY( !mEffectHandler->mSwapInProgress );
+    QCOMPARE( spy.count(), 0 );
+
+    mEffectHandler->swap();
+    setWidgets();
+
+    QVERIFY( mEffectHandler->mSwapInProgress );
+    QCOMPARE( spy.count(), 1 );
+
+    HbWidget* sharedVideoWidget = mEffectHandler->mSharedVideo;
+    HbWidget* receivedVideoWidget = mEffectHandler->mReceivedVideo;
+    HbWidget* sharedVideoWidget2 = mEffectHandler->mSharedVideoOverlay;
+    HbWidget* receivedVideoWidget2 = mEffectHandler->mReceivedVideoOverlay;
+    QRectF sharedOrig = mEffectHandler->mSharedVideo->geometry();
+    QRectF recvOrig = mEffectHandler->mReceivedVideo->geometry();
+    
+    // Swapping not started because other widget missing
+    mEffectHandler->mSwapSharedCompleted = true;
+    mEffectHandler->mSwapReceivedCompleted = true;
+    mEffectHandler->mSharedVideo = 0;
+    mEffectHandler->swap();
+    QCOMPARE( sharedVideoWidget->geometry(), sharedOrig );
+    QCOMPARE( receivedVideoWidget->geometry(), recvOrig );
+    QCOMPARE( mEffectHandler->mSwapSharedCompleted, true );
+    QCOMPARE( mEffectHandler->mSwapReceivedCompleted, true );
+    
+    // Swapping not started because other widget missing
+    mEffectHandler->mSharedVideo = sharedVideoWidget;
+    mEffectHandler->mReceivedVideo = 0;
+    mEffectHandler->swap();
+    QCOMPARE( sharedVideoWidget->geometry(), sharedOrig );
+    QCOMPARE( receivedVideoWidget->geometry(), recvOrig );
+    QCOMPARE( mEffectHandler->mSwapSharedCompleted, true );
+    QCOMPARE( mEffectHandler->mSwapReceivedCompleted, true );
+    
+    // Swapping started, however geometry is change only once swapping completes
+    mEffectHandler->mSharedVideo = sharedVideoWidget;
+    mEffectHandler->mReceivedVideo = receivedVideoWidget;
+    mEffectHandler->swap();
+    
+    QCOMPARE( sharedVideoWidget->geometry(), sharedOrig );
+    QCOMPARE( receivedVideoWidget->geometry(), recvOrig );
+    QCOMPARE( mEffectHandler->mSwapSharedCompleted, false );
+    QCOMPARE( mEffectHandler->mSwapReceivedCompleted, false );
+    
+    // Swapping started, however geometry is change only once swapping completes
+    mEffectHandler->mSwapSharedCompleted = true;
+    mEffectHandler->mSwapReceivedCompleted = true;
+    mEffectHandler->swap();
+    QCOMPARE( sharedVideoWidget->geometry(), sharedOrig );
+    QCOMPARE( receivedVideoWidget->geometry(), recvOrig );
+    QCOMPARE( mEffectHandler->mSwapSharedCompleted, false );
+    QCOMPARE( mEffectHandler->mSwapReceivedCompleted, false );
+}
+
+void UT_LcEffectHandler::testShowSendWindow()
+{
+    // Shared video widget does not exist
+    setWidgets();
+    HbWidget* sharedVideoWidget = mEffectHandler->mSharedVideo;
+    QVERIFY( sharedVideoWidget != 0 );
+    sharedVideoWidget->hide();
+    QVERIFY( !sharedVideoWidget->isVisible() );
+    mEffectHandler->mSharedVideo = 0;
+    mEffectHandler->showSendWindow();
+    QVERIFY( !sharedVideoWidget->isVisible() );
+
+    // Shared video widget exists, effects running, dont show
+    HbEffect::mRunning = true;
+    mEffectHandler->mSharedVideo = sharedVideoWidget;
+    mEffectHandler->showSendWindow();
+    QVERIFY( !mEffectHandler->mSharedVideo->isVisible() );
+
+    // Shared video widget exists, show
+    HbEffect::mRunning = false;
+    mEffectHandler->mSharedVideo = sharedVideoWidget;
+    mEffectHandler->showSendWindow();
+    QVERIFY( mEffectHandler->mSharedVideo->isVisible() );
+}
+
+void UT_LcEffectHandler::testHideSendWindow()
+{
+ // Shared video widget does not exist
+    setWidgets();
+    HbWidget* sharedVideoWidget = mEffectHandler->mSharedVideo;
+    QVERIFY( sharedVideoWidget != 0 );
+    mEffectHandler->mSharedVideo = 0;
+    mEffectHandler->hideSendWindow();
+
+    // Shared video widget exists, show
+    mEffectHandler->mSharedVideo = sharedVideoWidget;
+    mEffectHandler->showSendWindow();
+    QVERIFY( mEffectHandler->mSharedVideo->isVisible() );
+    
+    // Shared video widget exists, hide
+    mEffectHandler->hideSendWindow();
+    QVERIFY( !mEffectHandler->mSharedVideo->isVisible() );     
+}
+
+void UT_LcEffectHandler::testShowReceiveWindow()
+{
+    // Shared video widget does not exist
+    setWidgets();
+    HbWidget* receivedVideoWidget = mEffectHandler->mReceivedVideo;
+    QVERIFY( receivedVideoWidget != 0 );
+    receivedVideoWidget->hide();
+    QVERIFY( !receivedVideoWidget->isVisible() );
+    mEffectHandler->mReceivedVideo = 0;
+    mEffectHandler->showReceiveWindow();
+    QVERIFY( !receivedVideoWidget->isVisible() );
+    
+    // Received video widget exists, show
+    mEffectHandler->mReceivedVideo = receivedVideoWidget;
+    mEffectHandler->showReceiveWindow();
+    QVERIFY( mEffectHandler->mReceivedVideo->isVisible() );
+}
+
+void UT_LcEffectHandler::testHideReceiveWindow()
+{
+    // Shared video widget does not exist
+    setWidgets();
+    HbWidget* receivedVideoWidget = mEffectHandler->mReceivedVideo;
+    QVERIFY( receivedVideoWidget != 0 );
+    mEffectHandler->mReceivedVideo = 0;
+    mEffectHandler->hideReceiveWindow();
+
+    
+    // Received video widget exists, show
+    mEffectHandler->mReceivedVideo = receivedVideoWidget;
+    mEffectHandler->showReceiveWindow();
+    QVERIFY( mEffectHandler->mReceivedVideo->isVisible() );
+    
+    // Receive video widget exists, hide
+    mEffectHandler->hideReceiveWindow();
+    QVERIFY( !mEffectHandler->mReceivedVideo->isVisible() );    
+}
+
+
+// windowFlipComplete
+// windowDisappearToFlipComplete
+// windowDisappearComplete
+// windowAppearComplete
+// WindowSwapSharedComplete
+// WindowSwapReceivedComplete
+
+void UT_LcEffectHandler::testEffectComplete()
+{
+    clearWidgets();
+    
+    // Video widgets does not exist
+    HbEffect::EffectStatus status;
+    mEffectHandler->windowAppearComplete( status );
+    mEffectHandler->windowDisappearComplete( status );
+    mEffectHandler->windowDisappearToFlipComplete( status );
+    mEffectHandler->windowFlipComplete( status );
+
+    setWidgets();
+
+    HbWidget* sharedVideoWidget = mEffectHandler->mSharedVideo;
+    HbWidget* receivedVideoWidget = mEffectHandler->mReceivedVideo;
+    sharedVideoWidget->hide();
+    receivedVideoWidget->hide();
+
+    mEffectHandler->showSendWindow();
+    mEffectHandler->windowAppearComplete( status );
+    QVERIFY( sharedVideoWidget->isVisible() );
+
+    mEffectHandler->windowDisappearComplete( status );
+    QVERIFY( sharedVideoWidget->isVisible() );
+
+    mEffectHandler->windowDisappearToFlipComplete( status );
+    QVERIFY( !sharedVideoWidget->isVisible() );
+
+        lcutStub_LcUiEngine_setLocalPlaying( false );
+    mEffectHandler->windowFlipComplete( status );
+    QVERIFY( !sharedVideoWidget->isVisible() );
+
+        lcutStub_LcUiEngine_setLocalPlaying( true );
+    mEffectHandler->windowFlipComplete( status );
+    QVERIFY( sharedVideoWidget->isVisible() );
+
+    sharedVideoWidget->hide();
+    receivedVideoWidget->hide();
+        lcutStub_LcUiEngine_setLocalPlaying( true );
+    mEffectHandler->windowFlipComplete( status );
+    QVERIFY( sharedVideoWidget->isVisible() );
+
+    // Swapping, real video widgets are set visible only after
+    // both swap effects have completeded swapping completes and completion
+    // is also signal
+
+    // Geomerty changes are handled by the view using DoCML's
+    // when swapping completes and completion is also signal
+
+    QRectF pos1 = QRectF(5,100, 200, 200);
+    QRectF pos2 = QRectF(5,300, 400, 400);
+    mEffectHandler->mSharedVideo->setGeometry(pos1);
+    mEffectHandler->mReceivedVideo->setGeometry(pos2);
+    QSignalSpy spy( mEffectHandler, SIGNAL(swapCompleted()) );
+    sharedVideoWidget->hide();
+    receivedVideoWidget->hide();
+        lcutStub_LcUiEngine_setLocalPlaying( true );
+    mEffectHandler->windowSwapSharedComplete( status );
+    QVERIFY( !sharedVideoWidget->isVisible() );
+    QCOMPARE( spy.count(), 0 );
+
+    sharedVideoWidget->hide();
+    receivedVideoWidget->hide();
+        lcutStub_LcUiEngine_setRemotePlaying( true );
+    mEffectHandler->windowSwapReceivedComplete( status );
+    QVERIFY( receivedVideoWidget->isVisible() );
+    QVERIFY( sharedVideoWidget->isVisible() );
+    QCOMPARE( spy.count(), 1 );
+
+    // Players are disabled so even when swap completes, widgets are not set
+    // visible
+    sharedVideoWidget->hide();
+    receivedVideoWidget->hide();
+        lcutStub_LcUiEngine_setLocalPlaying( false );
+    mEffectHandler->windowSwapSharedComplete( status );
+    QVERIFY( !sharedVideoWidget->isVisible() );
+    
+    sharedVideoWidget->hide();
+    receivedVideoWidget->hide();
+        lcutStub_LcUiEngine_setRemotePlaying( false );
+    mEffectHandler->windowSwapReceivedComplete( status );
+    QVERIFY( !receivedVideoWidget->isVisible() );
+    QVERIFY( !sharedVideoWidget->isVisible() );
+}
+
+void UT_LcEffectHandler::testStartEffect()
+{
+    clearWidgets();
+    
+    const char *effectId = "myeffect";
+    const char *callBack = "mycallback";
+    
+    QVERIFY( !mEffectHandler->mSharedVideo );
+    QVERIFY( !mEffectHandler->mSharedVideoOverlay );
+    mEffectHandler->startEffect( mEffectHandler->mSharedVideoOverlay,effectId, callBack);
+    
+    setWidgets();
+    
+    QVERIFY( mEffectHandler->mSharedVideo );
+    QVERIFY( mEffectHandler->mSharedVideoOverlay );
+    
+    HbWidget* sharedVideoWidget = mEffectHandler->mSharedVideo;
+    HbWidget* sharedVideoWidget2 = mEffectHandler->mSharedVideoOverlay;
+    QRectF sharedOrig = mEffectHandler->mSharedVideo->geometry();
+    
+    mEffectHandler->mSharedVideo = 0;
+    mEffectHandler->startEffect( mEffectHandler->mSharedVideoOverlay,effectId, callBack);
+    
+    mEffectHandler->mSharedVideo = sharedVideoWidget;
+    mEffectHandler->mSharedVideoOverlay = 0;
+    mEffectHandler->startEffect( mEffectHandler->mSharedVideoOverlay,effectId, callBack);
+    
+    mEffectHandler->mSharedVideo = sharedVideoWidget;
+    mEffectHandler->mSharedVideoOverlay = sharedVideoWidget2;
+    mEffectHandler->startEffect( mEffectHandler->mSharedVideoOverlay,effectId, callBack);
+    
+    QCOMPARE( sharedVideoWidget->geometry(), sharedVideoWidget2->geometry() );
+}
+
+void UT_LcEffectHandler::testSetVisibility()
+{
+    setWidgets();
+
+    QVERIFY( mEffectHandler->mSharedVideo );
+    HbWidget* sharedVideoWidget = mEffectHandler->mSharedVideo;
+    sharedVideoWidget->setVisible(false);
+
+    //If Effects are not running than we can set the visibility of widget
+    mEffectHandler->setVisibility(sharedVideoWidget,true);
+    // TODO: setvisibility temporarily NOP
+    /*QVERIFY( mEffectHandler->mSharedVideo->isVisible() );
+
+    //If Effects are running we can not set the visibility of widget.
+    HbEffect::mRunning = true;
+    mEffectHandler->setVisibility(sharedVideoWidget,false);
+    QVERIFY( mEffectHandler->mSharedVideo->isVisible() );*/
+}
+
+void UT_LcEffectHandler::testSetDissappearEffect()
+{
+    QCOMPARE( mEffectHandler->mEffectCallBack,
+        QString::fromAscii(lcEffectWinDefaultCallback ));
+    mEffectHandler->setDissappearEffect(LcEffectHandler::DissappearToFlip );
+    QCOMPARE( mEffectHandler->mEffectCallBack,
+        QString::fromAscii("windowDisappearToFlipComplete" ));
+    mEffectHandler->setDissappearEffect(LcEffectHandler::NormalDissappear );
+    QCOMPARE( mEffectHandler->mEffectCallBack,
+        QString::fromAscii("windowDisappearComplete" ));
+}
+
+void UT_LcEffectHandler::testIsSharedVideoAtTop()
+{
+    setWidgets();
+
+    QRectF pos1 = QRectF(5,100, 200, 200);
+    QRectF pos2 = QRectF(5,300, 400, 400);
+    mEffectHandler->mSharedVideo->setGeometry(pos1);
+    mEffectHandler->mReceivedVideo->setGeometry(pos2);
+
+    QVERIFY( mEffectHandler->isSharedVideoAtTop() );
+
+    mEffectHandler->mSharedVideo->setGeometry(pos2);
+    mEffectHandler->mReceivedVideo->setGeometry(pos1);
+    QVERIFY( !mEffectHandler->isSharedVideoAtTop() );
+
+}
+
+void UT_LcEffectHandler::testVideosSideBySide()
+{
+    setWidgets();
+    QRectF pos1 = QRectF(5,100, 200, 200);
+    QRectF pos2 = QRectF(5,300, 400, 400);
+    QRectF pos3 = QRectF(5,100, 400, 400);
+
+    mEffectHandler->mSharedVideo->setGeometry(pos1);
+    mEffectHandler->mReceivedVideo->setGeometry(pos2);
+
+    QVERIFY( !mEffectHandler->videosSideBySide() );
+    mEffectHandler->mReceivedVideo->setGeometry(pos3);
+    QVERIFY( mEffectHandler->videosSideBySide() );
+}
+
+void UT_LcEffectHandler::testHandleSwapCompletion()
+{
+    QSignalSpy spy( mEffectHandler, SIGNAL(swapCompleted()) );
+    mEffectHandler->mSwapInProgress = true;
+    mEffectHandler->mSwapSharedCompleted = false;
+    mEffectHandler->mSwapReceivedCompleted = false;
+
+    // Test1: Swap is not completed.
+    mEffectHandler->handleSwapCompletion();
+    QVERIFY( mEffectHandler->mSwapInProgress );
+    QCOMPARE( spy.count(), 0 );
+
+    // Test2: Swap is partially completed.
+    mEffectHandler->mSwapSharedCompleted = true;
+    mEffectHandler->handleSwapCompletion();
+    QVERIFY( mEffectHandler->mSwapInProgress );
+    QCOMPARE( spy.count(), 0 );
+
+    // Test 3. Swap Completed completely.
+    mEffectHandler->mSwapSharedCompleted = true;
+    mEffectHandler->mSwapReceivedCompleted = true;
+    mEffectHandler->handleSwapCompletion();
+    QVERIFY( !mEffectHandler->mSwapInProgress );
+    QCOMPARE( spy.count(), 1 );
+
+    //Test 4. Local & Remote are player are availble.
+    lcutStub_LcUiEngine_setLocalPlaying( true );
+    lcutStub_LcUiEngine_setRemotePlaying( true );
+
+    mEffectHandler->handleSwapCompletion();
+    QVERIFY( mEffectHandler->mSharedVideo->isVisible() );
+    QVERIFY( mEffectHandler->mReceivedVideo->isVisible() );
+}
+
+void UT_LcEffectHandler::testIsSwapInProgress()
+{
+    QVERIFY( !mEffectHandler->isSwapInProgress() );
+    mEffectHandler->swap();
+    QVERIFY( mEffectHandler->isSwapInProgress() );
+}
+
+
+// Helper Utility Function for the Unit Test.
+void UT_LcEffectHandler::clearWidgets()
+{
+    mEffectHandler->mReceivedVideo = 0;
+    mEffectHandler->mReceivedVideoOverlay = 0;
+    mEffectHandler->mSharedVideo = 0;
+    mEffectHandler->mSharedVideoOverlay = 0;
+}
+
+void UT_LcEffectHandler::setWidgets()
+{
+    mEffectHandler->mReceivedVideo = mReceivedVideo;
+    mEffectHandler->mReceivedVideoOverlay = mReceivedVideoOverlay;
+    mEffectHandler->mSharedVideo = mSharedVideo;
+    mEffectHandler->mSharedVideoOverlay = mSharedVideoOverlay;
+}
+
+
+