diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lceffecthandler.cpp --- /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 +#include +#include + +#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; +} + + +