diff -r b023a8d2866a -r ea65f74e6de4 photosgallery/slideshow/engine/tsrc/t_cshwzoomandpaneffect/t_cshwzoomandpaneffect.cpp --- a/photosgallery/slideshow/engine/tsrc/t_cshwzoomandpaneffect/t_cshwzoomandpaneffect.cpp Thu Jul 15 18:39:01 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1069 +0,0 @@ -/* -* Copyright (c) 2007-2007 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: Test for zoom and pan effect in slideshow - * -*/ - - - -// CLASS HEADER -#include "t_cshwzoomandpaneffect.h" - -// EXTERNAL INCLUDES -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -// INTERNAL INCLUDES -#include "shwzoomandpaneffect.h" -#include "shwzoomandpanlayout.h" -#include "shwcrossfadelayout.h" -#include "shwcurvefactory.h" -#include "shwconstants.h" -#include "shwautoptr.h" -#include "shwcallback.h" -#include "shwslideshowenginepanic.h" -#include "shwgeometryutilities.h" - -using namespace NShwSlideshow; - -// ----------------------------------------------------------------------------- -// Stub for NShwEngine::Panic --> -// ----------------------------------------------------------------------------- -TBool gNShwEnginePanicCalled = EFalse; -namespace NShwEngine - { - extern void Panic( TShwEnginePanic aPanic ) - { - gNShwEnginePanicCalled = ETrue; - // in test situation just do a leave - User::Leave( aPanic ); - } - } -// ----------------------------------------------------------------------------- -// <-- Stub for NShwEngine::Panic -// ----------------------------------------------------------------------------- - -// LOCAL HELPERs -namespace - { - /** - * @param aSource the TReal32 to round - * @return a rounded TInt - */ - inline TInt TReal2TInt( TReal32 aSource ) - { - if( aSource < 0 ) - { - // just subst 0.5 and cast, -0.4 becomes -0.9 and typecast - // truncates it to 0, -0.6 becomes -1.1 and its truncated to -1 - return TInt( aSource - TReal32( 0.5 ) ); - } - else - { - // just add 0.5 and cast, 0.4 becomes 0.9 and typecast - // truncates it to 0, 0.6 becomes 1.1 and its truncated to 1 - return TInt( aSource + TReal32( 0.5 ) ); - } - } - } - -class CTestControl : public CHuiControl - { - public: - static CTestControl* NewL( CHuiEnv& aEnv ) - { - return new (ELeave) CTestControl( aEnv ); - } - CTestControl( CHuiEnv& aEnv ) - : CHuiControl( aEnv ) - { - } - }; - -// CONSTRUCTION -T_CShwZoomAndPanEffect* T_CShwZoomAndPanEffect::NewL() - { - T_CShwZoomAndPanEffect* self = T_CShwZoomAndPanEffect::NewLC(); - CleanupStack::Pop( self ); - return self; - } - -T_CShwZoomAndPanEffect* T_CShwZoomAndPanEffect::NewLC() - { - T_CShwZoomAndPanEffect* self = new( ELeave ) T_CShwZoomAndPanEffect(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// Destructor (virtual by CBase) -T_CShwZoomAndPanEffect::~T_CShwZoomAndPanEffect() - { - } - -// Default constructor -T_CShwZoomAndPanEffect::T_CShwZoomAndPanEffect() - { - } - -// Second phase construct -void T_CShwZoomAndPanEffect::ConstructL() - { - // The ConstructL from the base class CEUnitTestSuiteClass must be called. - // It generates the test case table. - CEUnitTestSuiteClass::ConstructL(); - } - -// METHODS -// global constant for screensize -const TInt gScreenWidth = 100; -const TInt gScreenHeight = 100; -const TRect gScreenRect( 0, 0, gScreenWidth, gScreenHeight ); -void T_CShwZoomAndPanEffect::Empty() - { - } - -void T_CShwZoomAndPanEffect::SetupL() - { - // create env - iEnv = CHuiEnv::NewL(); - - // create Display - iCoeDisplay = CHuiDisplayCoeControl::NewL( *iEnv, gScreenRect ); - - // create control - iControl = CTestControl::NewL( *iEnv ); - - // create the visual, ownership goes to iControl - iVisual = CHuiImageVisual::AddNewL( *iControl ); - - // create class under test - CShwZoomAndPanEffect* tmp = CShwZoomAndPanEffect::NewLC(); - // take ownership - iCShwZoomAndPanEffect = tmp; - // remove the pointer from cleanup stack - CleanupStack::Pop( tmp ); - } - -void T_CShwZoomAndPanEffect::Teardown() - { - // delete class under test - delete iCShwZoomAndPanEffect; - iCShwZoomAndPanEffect = NULL; - - // delete control, it also deletes the visual - delete iControl; - iControl = NULL; - - // delete display - delete iCoeDisplay; - iCoeDisplay = NULL; - - // delete environment - delete iEnv; - iEnv = NULL; - } - -void T_CShwZoomAndPanEffect::T_TestGeometryAlgorithmsL() - { - // use the namespace for coord utilities - using namespace NShwGeometryUtilities; - - // test FitDimension - // fit width with same values - { - TInt width = 10; - TInt height = 10; - FitDimension( width, height, 10 ); - EUNIT_ASSERT_EQUALS_DESC( 10, width, "width is same" ); - EUNIT_ASSERT_EQUALS_DESC( 10, height, "height is same" ); - } - // fit width with width greater - { - TInt width = 20; - TInt height = 10; - FitDimension( width, height, 10 ); - EUNIT_ASSERT_EQUALS_DESC( 20, width, "width is same" ); - EUNIT_ASSERT_EQUALS_DESC( 10, height, "height is same" ); - } - // fit width with new height greater - { - TInt width = 20; - TInt height = 10; - FitDimension( width, height, 20 ); - EUNIT_ASSERT_EQUALS_DESC( 40, width, "width increased" ); - EUNIT_ASSERT_EQUALS_DESC( 20, height, "height increased" ); - } - // fit width with new height smaller - { - TInt width = 22; - TInt height = 11; - FitDimension( width, height, 5 ); - EUNIT_ASSERT_EQUALS_DESC( 10, width, "width decreased" ); - EUNIT_ASSERT_EQUALS_DESC( 5, height, "height decreased" ); - } - - // fit height with same values - { - TInt width = 99; - TInt height = 88; - FitDimension( height, width, 99 ); - EUNIT_ASSERT_EQUALS_DESC( 99, width, "width is same" ); - EUNIT_ASSERT_EQUALS_DESC( 88, height, "height is same" ); - } - // fit height with width greater - { - TInt width = 22; - TInt height = 11; - FitDimension( height, width, 22 ); - EUNIT_ASSERT_EQUALS_DESC( 22, width, "width is same" ); - EUNIT_ASSERT_EQUALS_DESC( 11, height, "height is same" ); - } - // fit height with new width greater - { - TInt width = 22; - TInt height = 11; - FitDimension( height, width, 33 ); - EUNIT_ASSERT_EQUALS_DESC( 33, width, "width increased" ); - EUNIT_ASSERT_EQUALS_DESC( 16, height, "height increased" ); - } - // fit height with new width smaller - { - TInt width = 99; - TInt height = 88; - FitDimension( height, width, 88 ); - EUNIT_ASSERT_EQUALS_DESC( 88, width, "width increased" ); - EUNIT_ASSERT_EQUALS_DESC( 78, height, "height increased" ); - } - - // test FitInsideBox - // fit with same width and height - { - TInt width = 99; - TInt height = 99; - FitInsideBox( width, height, 99, 99 ); - EUNIT_ASSERT_EQUALS_DESC( 99, width, "width is same as box" ); - EUNIT_ASSERT_EQUALS_DESC( 99, height, "height is same as box" ); - } - // fit with smaller width and height - { - TInt width = 99; - TInt height = 99; - FitInsideBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 99, width, "width did not change" ); - EUNIT_ASSERT_EQUALS_DESC( 99, height, "height did not change" ); - } - // fit with greater width and height - { - TInt width = 111; - TInt height = 111; - FitInsideBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" ); - EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" ); - } - // fit with greater and width closer to box - { - TInt width = 150; - TInt height = 200; - FitInsideBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 75, width, "width is smaller" ); - EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" ); - } - // fit with greater and height closer to box - { - TInt width = 150; - TInt height = 100; - FitInsideBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" ); - EUNIT_ASSERT_EQUALS_DESC( 66, height, "height is smaller" ); - } - // fit with smaller and width closer to box - { - TInt width = 75; - TInt height = 40; - FitInsideBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 75, width, "width did not change" ); - EUNIT_ASSERT_EQUALS_DESC( 40, height, "height did not change" ); - } - // fit with smaller and height closer to box - { - TInt width = 60; - TInt height = 90; - FitInsideBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 60, width, "width did not change" ); - EUNIT_ASSERT_EQUALS_DESC( 90, height, "height did not change" ); - } - // fit with width greater and height smaller to box - { - TInt width = 110; - TInt height = 90; - FitInsideBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" ); - EUNIT_ASSERT_EQUALS_DESC( 81, height, "height is smaller" ); - } - // fit with height greater and width smaller to box - { - TInt width = 90; - TInt height = 120; - FitInsideBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 90*100/120, width, "width is smaller" ); - EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" ); - } - - // test FitToCoverBox - // fit with same width and height - { - TInt width = 99; - TInt height = 99; - FitToCoverBox( width, height, 99, 99 ); - EUNIT_ASSERT_EQUALS_DESC( 99, width, "width is same as box" ); - EUNIT_ASSERT_EQUALS_DESC( 99, height, "height is same as box" ); - } - // fit with smaller width and height - { - TInt width = 99; - TInt height = 99; - FitToCoverBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" ); - EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" ); - } - // fit with greater width and height - { - TInt width = 111; - TInt height = 111; - FitToCoverBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" ); - EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" ); - } - // fit with greater and width closer to box - { - TInt width = 150; - TInt height = 200; - FitToCoverBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" ); - EUNIT_ASSERT_EQUALS_DESC( 133, height, "height is greater" ); - } - // fit with greater and height closer to box - { - TInt width = 150; - TInt height = 100; - FitToCoverBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 150, width, "width is greater than box" ); - EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" ); - } - // fit with greater and height closer to box - { - TInt width = 300; - TInt height = 200; - FitToCoverBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 150, width, "width is greater than box" ); - EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" ); - } - // fit with smaller and width closer to box - { - TInt width = 75; - TInt height = 40; - FitToCoverBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 187, width, "width is greater" ); - EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" ); - } - // fit with smaller and height closer to box - { - TInt width = 60; - TInt height = 90; - FitToCoverBox( width, height, 100, 100 ); - EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" ); - EUNIT_ASSERT_EQUALS_DESC( 150, height, "height is greater" ); - } - } - -void T_CShwZoomAndPanEffect::T_LayoutTestL() - { -// test zoom and pan - // create the layout - TEUnitFillMem< TShwZoomAndPanLayout > layout; - - // check that layout has correct init values - // need to upcast to get access to public functions - MGlxLayout& base = static_cast< MGlxLayout& >( layout ); - TGlxLayoutInfoResetter info; - info.iPosition.iX = -1; - info.iPosition.iY = -1; - info.iSize.iX = -1; - info.iSize.iY = -1; - - base.SetLayoutValues( info ); - // verify that the position was not set - EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iX,"x position not changed" ); - EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iY,"y position not changed" ); - // check size - EUNIT_ASSERT_NOT_EQUALS_DESC( - -1, (TInt)info.iSize.iX,"x size changed" ); - EUNIT_ASSERT_NOT_EQUALS_DESC( - -1, (TInt)info.iSize.iY,"y size changed" ); - - // set custom screen size and image size; image smaller than screen - layout.SetSizes( TSize( 99, 88 ), TSize( 44, 55 ), TSize( 500, 500 ) ); - // redo layout - base.SetLayoutValues( info ); - // verify that the position was not set - EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iX,"x position not changed" ); - EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iY,"y position not changed" ); - // check size - EUNIT_ASSERT_EQUALS_DESC( 99, TReal2TInt( info.iSize.iX ),"x size changed" ); - EUNIT_ASSERT_EQUALS_DESC( 124, TReal2TInt( info.iSize.iY ),"y size changed" ); - - // set custom screen size and image size; image larger than screen - layout.SetSizes( TSize( 99, 88 ), TSize( 144, 155 ), TSize( 500, 500 ) ); - // redo layout - base.SetLayoutValues( info ); - // verify that the position was not set - EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iX,"x position not changed" ); - EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iY,"y position not changed" ); - // check size - EUNIT_ASSERT_EQUALS_DESC( 99, TReal2TInt( info.iSize.iX ),"x size changed" ); - EUNIT_ASSERT_EQUALS_DESC( 107, TReal2TInt( info.iSize.iY ),"y size changed" ); - - // set custom screen size and image size; image partially larger than screen - layout.SetSizes( TSize( 99, 88 ), TSize( 100, 15 ), TSize( 500, 500 ) ); - // redo layout - base.SetLayoutValues( info ); - // verify that the position was not set - EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iX,"x position not changed" ); - EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iY,"y position not changed" ); - // check size - EUNIT_ASSERT_EQUALS_DESC( 587, TReal2TInt( info.iSize.iX ),"x size changed" ); - EUNIT_ASSERT_EQUALS_DESC( 88, TReal2TInt( info.iSize.iY ),"y size changed" ); - - // set big enough image so that it zooms - layout.SetSizes( TSize( 100, 100 ), TSize( 200, 150 ), TSize( 500, 500 ) ); - layout.StartZoom( TShwZoomAndPanLayout::EZoomIn, 0 ); - // redo layout - base.SetLayoutValues( info ); - // check that layout is changed - EUNIT_ASSERT_DESC( layout.Changed(), "layout is changed" ); - // clear changeflag - layout.ClearChanged(); - EUNIT_ASSERT_DESC( !layout.Changed(), "layout is not changed" ); - -// test crossfade - // create the crossfade layout - TEUnitFillMem< TShwCrossFadeLayout > cflayout; - // get base class pointer - MGlxLayout& base2 = static_cast< MGlxLayout& >( cflayout ); - // reset info opacity - info.iOpacity = -1; - // run the layout - base2.SetLayoutValues( info ); - // verify that opacity was set to minimum - EUNIT_ASSERT_EQUALS_DESC( - TInt( KMinOpacity ), TReal2TInt( info.iOpacity ),"opacity is minimum" ); - // check that layout is not changed - EUNIT_ASSERT_DESC( !cflayout.Changed(), "layout is not changed" ); - // set new value - cflayout.Set( 2.0, 0 ); - // reset info opacity - info.iOpacity = -1; - // run the layout - base2.SetLayoutValues( info ); - // check that layout is changed - EUNIT_ASSERT_DESC( cflayout.Changed(), "layout is changed" ); - // verify that opacity was set to maximum - EUNIT_ASSERT_EQUALS_DESC( - TInt( KMaxOpacity ), TReal2TInt( info.iOpacity ),"opacity is maximum" ); - // clear change flag - cflayout.ClearChanged(); - EUNIT_ASSERT_DESC( !cflayout.Changed(), "layout is not changed" ); - } - -void T_CShwZoomAndPanEffect::T_CurveTestL() - { - // create env, no need to delete or cleanupstack - TShwAutoPtr< CHuiEnv > env = CHuiEnv::NewL(); - - // create curve path with 200 length - TShwAutoPtr< CHuiCurvePath > ellipsis = - NShwCurveFactory::CreateEllipsisL( TSize( 100, 200 ), 200 ); - - // the ellipsis is clockwise around the box - // check ellipsis values, point 0 - TReal32 x_value = ellipsis->MapValue( 0, 0 ); - TReal32 y_value = ellipsis->MapValue( 0, 1 ); - EUNIT_ASSERT_EQUALS_DESC( 50, TReal2TInt( x_value ), "x coordinate"); - EUNIT_ASSERT_EQUALS_DESC( 0, TReal2TInt( y_value ), "y coordinate"); - - // point 50 - x_value = ellipsis->MapValue( 50, 0 ); - y_value = ellipsis->MapValue( 50, 1 ); - EUNIT_ASSERT_EQUALS_DESC( 0, TReal2TInt( x_value ), "x coordinate"); - EUNIT_ASSERT_EQUALS_DESC( 100, TReal2TInt( y_value ), "y coordinate"); - - // point 100 - x_value = ellipsis->MapValue( 100, 0 ); - y_value = ellipsis->MapValue( 100, 1 ); - EUNIT_ASSERT_EQUALS_DESC( -50, TReal2TInt( x_value ), "x coordinate"); - EUNIT_ASSERT_EQUALS_DESC( 0, TReal2TInt( y_value ), "y coordinate"); - - // point 150 - x_value = ellipsis->MapValue( 150, 0 ); - y_value = ellipsis->MapValue( 150, 1 ); - EUNIT_ASSERT_EQUALS_DESC( 0, TReal2TInt( x_value ), "x coordinate"); - EUNIT_ASSERT_EQUALS_DESC( -100, TReal2TInt( y_value ), "y coordinate"); - - // point 200 - x_value = ellipsis->MapValue( 200, 0 ); - y_value = ellipsis->MapValue( 200, 1 ); - EUNIT_ASSERT_EQUALS_DESC( 50, TReal2TInt( x_value ), "x coordinate"); - EUNIT_ASSERT_EQUALS_DESC( 0, TReal2TInt( y_value ), "y coordinate"); - } - -void T_CShwZoomAndPanEffect::T_ZoomAndPanTestL() - { - // create env, no need to delete or cleanupstack - TShwAutoPtr< CHuiEnv > env = CHuiEnv::NewL(); - - // size of screen - const TInt screenX = 320; - const TInt screenY = 200; - TSize screen( screenX, screenY ); - // size of image, smaller than screen x KMaxZoomAndPanFactor - // but larger than screen - const TInt originalImageX = ( screenX + screenX * KMaxZoomAndPanFactor ) / 2; - const TInt originalImageY = ( screenY + screenY * KMaxZoomAndPanFactor ) / 2; - TSize image( originalImageX, originalImageY ); - // create curve path with 100 length - TShwAutoPtr< CHuiCurvePath > ellipsis = - NShwCurveFactory::CreateEllipsisL( screen, 100 ); - - // create the layout - TEUnitFillMem< TShwZoomAndPanLayout > layout; - // set screen and image size and maximum size - layout.SetSizes( screen, image, - TSize( screenX * KMaxZoomAndPanFactor, screenY * KMaxZoomAndPanFactor ) ); - // set the panning curve - layout.SetPanningCurve( &ellipsis ); - - // check that layout has correct init values - // need to upcast to get access to public functions - MGlxLayout& base = static_cast< MGlxLayout& >( layout ); - TGlxLayoutInfoResetter info; - // reset info - info.iPosition.iX = -1;info.iPosition.iY = -1; - info.iSize.iX = -1; info.iSize.iY = -1; - // run the layout - base.SetLayoutValues( info ); - // verify that the position was set properly, the initial size is minimum - // so pan gets scaled to 0 - TInt initialXonCurve = 160; - TInt initialYonCurve = 0; - EUNIT_ASSERT_EQUALS_DESC( - 0, TReal2TInt( info.iPosition.iX ),"x position set" ); - EUNIT_ASSERT_EQUALS_DESC( - 0, TReal2TInt( info.iPosition.iY ),"y position set" ); - // verify size - EUNIT_ASSERT_EQUALS_DESC( - screenX, TReal2TInt( info.iSize.iX ),"default x size is screen size" ); - EUNIT_ASSERT_EQUALS_DESC( - screenY, TReal2TInt( info.iSize.iY ),"default y size is screen size" ); - - // do zoom in in 1 second - layout.StartZoom( TShwZoomAndPanLayout::EZoomIn, 1 ); - - // create timer to give us callback - TShwAutoPtr< CPeriodic > timer = CPeriodic::NewL( CActive::EPriorityStandard ); - // wait for 1.5 seconds (to be sure the zoom completes) - timer->Start(1.5 * 1000000, 1.5 * 1000000, TShwCallBack< - T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> ( - this)); - // start async wait - iAsyncWait.Start(); - - // reset info - info.iPosition.iX = -1;info.iPosition.iY = -1; - info.iSize.iX = -1; info.iSize.iY = -1; - // run the layout - base.SetLayoutValues( info ); - // verify that the position was set; zoom in does one half of the curve - EUNIT_ASSERT_EQUALS_DESC( - -initialXonCurve, TReal2TInt( info.iPosition.iX ),"x position looped on the opposite side" ); - EUNIT_ASSERT_EQUALS_DESC( - initialYonCurve, TReal2TInt( info.iPosition.iY ),"y position looped back" ); - // verify size, after zoom in we are in 4x screen size - EUNIT_ASSERT_GREATER_DESC( - TReal2TInt( info.iSize.iX ), originalImageX,"x size is greater than original size" ); - EUNIT_ASSERT_GREATER_DESC( - TReal2TInt( info.iSize.iY ), originalImageY,"y size is greater than original size" ); - - // perform zoom out in one second - layout.StartZoom( TShwZoomAndPanLayout::EZoomOut, 1 ); - // cancel old timer - timer->Cancel(); - // wait for 1.5 seconds (to be sure the zoom completes) - timer->Start(1.5 * 1000000, 1.5 * 1000000, TShwCallBack< - T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> ( - this)); - // start async wait - iAsyncWait.Start(); - - // reset info - info.iPosition.iX = -1;info.iPosition.iY = -1; - info.iSize.iX = -1; info.iSize.iY = -1; - // run the layout - base.SetLayoutValues( info ); - // verify that the position was set to zero again as in minimum size the pan is 0 - EUNIT_ASSERT_EQUALS_DESC( - 0, TReal2TInt( info.iPosition.iX ), "x position looped " ); - EUNIT_ASSERT_EQUALS_DESC( - 0, TReal2TInt( info.iPosition.iY ), "y position looped back" ); - // verify size, after zoom in we are in 100% size - EUNIT_ASSERT_EQUALS_DESC( - screenX, TReal2TInt( info.iSize.iX ),"x size is back to minimum" ); - EUNIT_ASSERT_EQUALS_DESC( - screenY, TReal2TInt( info.iSize.iY ),"y size is back to minimum" ); - } - -void T_CShwZoomAndPanEffect::T_PauseTestL() - { - // display size is define by gScreenRect - // give the HUI env to the effect and the size - TSize screenSize = gScreenRect.Size(); - iCShwZoomAndPanEffect->InitializeL( - iEnv, - NULL, - NULL, - screenSize ); - - // prepare view with a max size image - TSize imageSize( screenSize.iWidth * KMaxThumbnailSize, screenSize.iHeight * KMaxThumbnailSize ); - TSize thumbSize = iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize ); - // check thumbnail size - EUNIT_ASSERT_EQUALS_DESC( - imageSize.iHeight, thumbSize.iHeight, "thumbnail is image size" ); - EUNIT_ASSERT_EQUALS_DESC( - imageSize.iWidth, thumbSize.iWidth, "thumbnail is image size" ); - - // then enter view, fade in should last 250 millliseconds and view 500 - // get the layout chain - MGlxLayout* layout = - iCShwZoomAndPanEffect->EnterViewL( iVisual, 500, 250 ); - // get the initial layout values - TGlxLayoutInfoResetter info; - // reset info - info.iPosition.iX = -1;info.iPosition.iY = -1; - info.iSize.iX = -1; info.iSize.iY = -1; - info.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info ); - - // next pause the effect - iCShwZoomAndPanEffect->PauseL(); - // create timer to give us callback - TShwAutoPtr< CPeriodic > timer = CPeriodic::NewL( CActive::EPriorityStandard ); - // start asynch wait for 1.5 second - timer->Start(1.5 * 1000000, 1.5 * 1000000, TShwCallBack< - T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> ( - this)); - // start async wait - iAsyncWait.Start(); - // cancel the timer - timer->Cancel(); - - // now verify that the layout chain is in same situation - // get new layout values - TGlxLayoutInfoResetter info2; - // reset info2 - info2.iPosition.iX = -1;info2.iPosition.iY = -1; - info2.iSize.iX = -1; info2.iSize.iY = -1; - info2.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info2 ); - // check that no changes - EUNIT_ASSERT_EQUALS_DESC( - TReal2TInt( info.iOpacity ), TReal2TInt( info2.iOpacity ), "opacity" ); - EUNIT_ASSERT_EQUALS_DESC( - TReal2TInt( info.iPosition.iX ), TReal2TInt( info2.iPosition.iX ), "position x" ); - EUNIT_ASSERT_EQUALS_DESC( - TReal2TInt( info.iPosition.iY ), TReal2TInt( info2.iPosition.iY ), "position y" ); - EUNIT_ASSERT_EQUALS_DESC( - TReal2TInt( info.iSize.iX ), TReal2TInt( info2.iSize.iX ), "size x" ); - EUNIT_ASSERT_EQUALS_DESC( - TReal2TInt( info.iSize.iY ), TReal2TInt( info2.iSize.iY ), "size y" ); - - // resume the effect - iCShwZoomAndPanEffect->Resume(); - - // start timer for 1.5 seconds - timer->Start(1.5 * 1000000, 1.5 * 1000000, TShwCallBack< - T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> ( - this)); - // start async wait - iAsyncWait.Start(); - // cancel the timer - timer->Cancel(); - - // now verify that the layout chain did change - // reset info2 - info2.iPosition.iX = -1;info2.iPosition.iY = -1; - info2.iSize.iX = -1; info2.iSize.iY = -1; - info2.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info2 ); - // check that values did not change - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info.iOpacity ), TReal2TInt( info2.iOpacity ), "opacity" ); - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info.iSize.iX ), TReal2TInt( info2.iSize.iX ), "size x" ); - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info.iSize.iY ), TReal2TInt( info2.iSize.iY ), "size y" ); - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info.iPosition.iX ), TReal2TInt( info2.iPosition.iX ), "position x" ); - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info.iPosition.iY ), TReal2TInt( info2.iPosition.iY ), "position y" ); - - // enter view again, fade in should last 250 millliseconds and view 500 - // get the layout chain - layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 500, 250 ); - // get the initial layout values - // reset info - info.iPosition.iX = -1;info.iPosition.iY = -1; - info.iSize.iX = -1; info.iSize.iY = -1; - info.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info ); - // start timer for .1 seconds, to make sure opacity does not run too fast - timer->Start(0.1 * 1000000, 0.1 * 1000000, TShwCallBack< - T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> ( - this)); - // start async wait - iAsyncWait.Start(); - // cancel the timer - timer->Cancel(); - - // reset info2 - info2.iPosition.iX = -1;info2.iPosition.iY = -1; - info2.iSize.iX = -1; info2.iSize.iY = -1; - info2.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info2 ); - // check that size and opacity changed, multiply with 10 to remove rounding errors - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info.iOpacity * 10 ), TReal2TInt( info2.iOpacity * 10 ), "opacity" ); - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info.iSize.iX ), TReal2TInt( info2.iSize.iX ), "size x" ); - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info.iSize.iY ), TReal2TInt( info2.iSize.iY ), "size y" ); - - // pause the effect - iCShwZoomAndPanEffect->PauseL(); - // run the layout to get values - layout->SetLayoutValues( info2 ); - // start timer for 1.0 seconds - timer->Start(1.0 * 1000000, 1.0 * 1000000, TShwCallBack< - T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> ( - this)); - // start async wait - iAsyncWait.Start(); - // cancel the timer - timer->Cancel(); - TGlxLayoutInfoResetter info3; - // reset info3 - info3.iPosition.iX = -1;info3.iPosition.iY = -1; - info3.iSize.iX = -1; info3.iSize.iY = -1; - info3.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info3 ); - // check that no changes between info2 and info3, multiply opacity to remove rounding error - EUNIT_ASSERT_EQUALS_DESC( - TReal2TInt( info2.iOpacity * 10 ), TReal2TInt( info3.iOpacity * 10 ), "opacity" ); - EUNIT_ASSERT_EQUALS_DESC( - TReal2TInt( info2.iSize.iX ), TReal2TInt( info3.iSize.iX ), "size x" ); - EUNIT_ASSERT_EQUALS_DESC( - TReal2TInt( info2.iSize.iY ), TReal2TInt( info3.iSize.iY ), "size y" ); - EUNIT_ASSERT_EQUALS_DESC( - TReal2TInt( info2.iPosition.iX ), TReal2TInt( info3.iPosition.iX ), "position x" ); - EUNIT_ASSERT_EQUALS_DESC( - TReal2TInt( info2.iPosition.iY ), TReal2TInt( info3.iPosition.iY ), "position y" ); - - // now do the resume - iCShwZoomAndPanEffect->Resume(); - // start timer for 1.0 seconds - timer->Start(1.0 * 1000000, 1.0 * 1000000, TShwCallBack< - T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> ( - this)); - // start async wait - iAsyncWait.Start(); - // cancel the timer - timer->Cancel(); - - // reset info3 - info3.iPosition.iX = -1;info3.iPosition.iY = -1; - info3.iSize.iX = -1; info3.iSize.iY = -1; - info3.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info3 ); - // check that values did change between info2 and info3, multiply opacity to remove rounding error - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info2.iOpacity * 10 ), TReal2TInt( info3.iOpacity * 10 ), "opacity" ); - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info2.iSize.iX ), TReal2TInt( info3.iSize.iX ), "size x" ); - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info2.iSize.iY ), TReal2TInt( info3.iSize.iY ), "size y" ); - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info2.iPosition.iX ), TReal2TInt( info3.iPosition.iX ), "position x" ); - EUNIT_ASSERT_NOT_EQUALS_DESC( - TReal2TInt( info2.iPosition.iY ), TReal2TInt( info3.iPosition.iY ), "position y" ); - } - -void T_CShwZoomAndPanEffect::T_TestBoundariesL() - { - // get the screen size - TSize screenSize = gScreenRect.Size(); - // calculate the maximum width and height - TInt maximumImageWidth = screenSize.iWidth * KMaxThumbnailSize; - TInt maximumImageHeight = screenSize.iHeight * KMaxThumbnailSize; - - // display size is define by gScreenRect - // give the HUI env to the effect and the size - iCShwZoomAndPanEffect->InitializeL( - iEnv, - NULL, - NULL, - screenSize ); - - // prepare view with image twice as wide but half the height of maximum - TSize imageSize( - maximumImageWidth * 2, - maximumImageHeight / 2 ); - TSize thumbSize = iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize ); - // check the thumbnail size - // note that the thumbnail may be wider than higher than the maximage but the area - // is the same - EUNIT_ASSERT_EQUALS_DESC( - maximumImageWidth * 2, thumbSize.iWidth, "size x" ); - EUNIT_ASSERT_EQUALS_DESC( - maximumImageHeight / 2, thumbSize.iHeight, "size y" ); - - // then enter view, fade in should last 0 millliseconds and view 0 so that the new values - // are immediate - // get the layout chain - MGlxLayout* layout = - iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 ); - // get the initial layout values - TGlxLayoutInfoResetter info; - // reset info - info.iPosition.iX = -1;info.iPosition.iY = -1; - info.iSize.iX = -1; info.iSize.iY = -1; - info.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info ); - // check that image width is maximum screen width times two and height is - // original by two (as original was twice as wide as fitted) - // note that the thumbnail may be wider than higher than the maximage but the area - // is the same - EUNIT_ASSERT_EQUALS_DESC( - maximumImageWidth * 2, TReal2TInt( info.iSize.iX ), "size x" ); - EUNIT_ASSERT_EQUALS_DESC( - maximumImageHeight / 2, TReal2TInt( info.iSize.iY ), "size y" ); - - // prepare view with image max wide but twice the height of maximum - imageSize.SetSize( maximumImageWidth, maximumImageHeight * 2 ); - iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize ); - // then enter view, fade in should last 0 millliseconds and view 0 so that the new values - // are immediate - // get the layout chain - layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 ); - // get the initial layout values - // reset info - info.iPosition.iX = -1;info.iPosition.iY = -1; - info.iSize.iX = -1; info.iSize.iY = -1; - info.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info ); - // check that image area is same as maximum image area - // note that the thumbnail may be wider than higher than the maximage but the area - // is the same - EUNIT_ASSERT_EQUALS_DESC( - maximumImageWidth * maximumImageHeight, - TReal2TInt( info.iSize.iX * info.iSize.iY ), "size x" ); - - // test image partially smaller than screen, should not zoom - // prepare view with image quarter of the screen wide but four times the height of screen - imageSize.SetSize( gScreenWidth / 4, gScreenHeight * 4 ); - iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize ); - // then enter view, fade in should last 0 millliseconds and view 0 so that the new values - // are immediate - // get the layout chain - layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 ); - // get the initial layout values - // reset info - info.iPosition.iX = -1;info.iPosition.iY = -1; - info.iSize.iX = -1; info.iSize.iY = -1; - info.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info ); - // check that image size is the maximum screen width and height multiplied by 16 - EUNIT_ASSERT_EQUALS_DESC( - gScreenWidth, TReal2TInt( info.iSize.iX ), "size x" ); - EUNIT_ASSERT_EQUALS_DESC( - gScreenHeight * 4 * 4, TReal2TInt( info.iSize.iY ), "size y" ); - - // test image partially smaller than screen, should zoom - // prepare view with image half of the screen wide but three times the height of screen - imageSize.SetSize( gScreenWidth - 10, gScreenHeight * 2 ); - iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize ); - // then enter view, fade in should last 0 millliseconds and view 0 so that the new values - // are immediate - // get the layout chain - layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 ); - // get the initial layout values - // reset info - info.iPosition.iX = -1;info.iPosition.iY = -1; - info.iSize.iX = -1; info.iSize.iY = -1; - info.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info ); - // check image area, should be same as max size - EUNIT_ASSERT_EQUALS_DESC( - maximumImageWidth * maximumImageHeight, - TReal2TInt( info.iSize.iX * info.iSize.iY ), "size x" ); - - // test image that is screen size, should not zoom - // prepare view with image - imageSize.SetSize( gScreenWidth, gScreenHeight ); - iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize ); - // then enter view, fade in should last 0 millliseconds and view 0 so that the new values - // are immediate - // get the layout chain - layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 ); - // get the initial layout values - // reset info - info.iPosition.iX = -1;info.iPosition.iY = -1; - info.iSize.iX = -1; info.iSize.iY = -1; - info.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info ); - // check that image size is screen size - EUNIT_ASSERT_EQUALS_DESC( - gScreenWidth, TReal2TInt( info.iSize.iX ), "size x" ); - EUNIT_ASSERT_EQUALS_DESC( - gScreenHeight, TReal2TInt( info.iSize.iY ), "size y" ); - - // test image partially larger than screen, should zoom - // prepare view - imageSize.SetSize( gScreenWidth * 1.5, gScreenHeight * 1.5 ); - iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize ); - // then enter view, fade in should last 0 millliseconds and view 0 so that the new values - // are immediate - // get the layout chain - layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 ); - // get the initial layout values - // reset info - info.iPosition.iX = -1;info.iPosition.iY = -1; - info.iSize.iX = -1; info.iSize.iY = -1; - info.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info ); - // check that image size is the screen multiplied by max zoom - EUNIT_ASSERT_EQUALS_DESC( - TInt(gScreenWidth * KMaxZoomAndPanFactor), TReal2TInt( info.iSize.iX ), "size x" ); - EUNIT_ASSERT_EQUALS_DESC( - TInt(gScreenHeight * KMaxZoomAndPanFactor), TReal2TInt( info.iSize.iY ), "size y" ); - - // enter transition to increase the counter, duration zero - // ignore layout chain - iCShwZoomAndPanEffect->EnterTransitionL( iVisual, 0 ); - // enter the same effect again, this time we do zoom out (max to min size) - // get the layout chain - layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 ); - // reset info - info.iPosition.iX = -1;info.iPosition.iY = -1; - info.iSize.iX = -1; info.iSize.iY = -1; - info.iOpacity = -1; - // run the layout to get values - layout->SetLayoutValues( info ); - // check that image size is the screen multiplied by max zoom - EUNIT_ASSERT_EQUALS_DESC( - gScreenWidth, TReal2TInt( info.iSize.iX ), "size x" ); - EUNIT_ASSERT_EQUALS_DESC( - gScreenHeight, TReal2TInt( info.iSize.iY ), "size y" ); - } - -TInt T_CShwZoomAndPanEffect::CancelAsyncL() - { - // stop async wait - iAsyncWait.AsyncStop(); - // return KErrNone to stop the timer - return KErrNone; - } - -// TEST TABLE -EUNIT_BEGIN_TEST_TABLE( - T_CShwZoomAndPanEffect, - "Test suite for CShwZoomAndPanEffect and Layout", - "UNIT" ) - -EUNIT_TEST( - "Geometry utilities test", - "NShwGeometryUtilities", - "FitDimension,FitInsideBox,FitToCoverBox", - "FUNCTIONALITY", - Empty, T_TestGeometryAlgorithmsL, Empty ) - -EUNIT_TEST( - "Layout test", - "TShwZoomAndPanLayout", - "TShwZoomAndPanLayout", - "FUNCTIONALITY", - Empty, T_LayoutTestL, Empty ) - -EUNIT_TEST( - "Curve test", - "ShwCurveFactory", - "CreateEllipsisL", - "FUNCTIONALITY", - Empty, T_CurveTestL, Empty ) - -EUNIT_TEST( - "Zoom and pan test", - "TShwZoomAndPanLayout", - "DoSetLayoutValues", - "FUNCTIONALITY", - Empty, T_ZoomAndPanTestL, Empty ) - -EUNIT_TEST( - "Pause Zoom and pan", - "CShwZoomAndPanEffect", - "PauseL, Resume", - "FUNCTIONALITY", - SetupL, T_PauseTestL, Teardown ) - -EUNIT_TEST( - "Test boundaries", - "CShwZoomAndPanEffect", - "PrepareViewL", - "FUNCTIONALITY", - SetupL, T_TestBoundariesL, Teardown ) - -EUNIT_END_TEST_TABLE - -// END OF FILE