diff -r 000000000000 -r 4e91876724a2 photosgallery/viewframework/commandhandlers/tsrc/ut__commandhandlermarking/src/t_glxcommandhandlermarking.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/viewframework/commandhandlers/tsrc/ut__commandhandlermarking/src/t_glxcommandhandlermarking.cpp Thu Dec 17 08:45:44 2009 +0200 @@ -0,0 +1,563 @@ +/* +* Copyright (c) 2006 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: CommandHandlerMarking unit test cases +* +*/ + + + + +// CLASS HEADER +#include "t_glxcommandhandlermarking.h" + +// EXTERNAL INCLUDES +#include +#include + +#include + +#include +#include +#include + +// INTERNAL INCLUDES + +// +CGlxMedia::CGlxMedia(const TGlxMediaId& aId) + : iId(aId) + { + } + +CGlxMedia::~CGlxMedia() + { + Reset(); + iValues.Close(); + iAttributes.Close(); + } + +class _CGlxTestMediaList: public CBase, public MGlxMediaList + { +public: + ~_CGlxTestMediaList() + { + iItems.Close(); + iMedia.ResetAndDestroy(); + iSelectedItems.Close(); + } + + virtual void Close() + { + }; + virtual TGlxMediaListId Id() const + { + return KGlxIdNone; + } + + virtual TInt Count(NGlxListDefs::TCountType /*aType*/) const + { + return iItems.Count(); + } + + virtual TInt FocusIndex() const + { + return iFocusIndex; + } + + virtual void SetFocusL(NGlxListDefs::TFocusSetType /*aType*/, TInt aValue) + { + iFocusIndex = aValue; + } + + virtual const TGlxMedia& Item(TInt aIndex) const + { + return iItems[aIndex]; + } + + virtual TInt Index(const TGlxIdSpaceId& /* aIdSpaceId */, const TGlxMediaId& aId) const + { + TInt count = iItems.Count(); + for (TInt i = 0; i < count; i++) + { + if (iItems[i].Id() == aId) + { + return i; + } + } + return KErrNotFound; + } + + virtual void AddMediaListObserverL(MGlxMediaListObserver* /*aObserver*/) + { + } + + virtual void RemoveMediaListObserver(MGlxMediaListObserver* /*aObserver*/) + { + } + + virtual void AddContextL(const MGlxFetchContext* /*aContext*/, TInt /*aPriority*/) + { + } + + virtual void RemoveContext(const MGlxFetchContext* /*aContext*/) + { + } + + virtual MMPXCollection& Collection() const + { + // we know that this method is not called in our tests, this is just to make the code compile + MMPXCollection* empty = NULL; + return *empty; + } + + virtual TBool IsSelected(TInt aIndex) const + { + TInt idx = iSelectedItems.Find(aIndex); + return (idx != KErrNotFound); + } + + virtual void SetSelectedL(TInt aIndex, TBool aSelected) + { + if (aSelected) + { + iSelectedItems.InsertInOrder(aIndex); + } + else + { + iSelectedItems.Remove(iSelectedItems.Find(aIndex)); + } + } + + virtual const TArray Selection() const + { + return iSelectedItems.Array(); + } + + virtual void CommandL(CMPXCommand& /*aCommand*/) + { + } + + virtual void CancelCommand() + { + } + + virtual void SetFilterL(CMPXFilter* /*aFilter*/) + { + } + + virtual CMPXFilter* Filter() const + { + return NULL; + } + + virtual TGlxIdSpaceId IdSpaceId(TInt /*aIndex*/) const + { + return KGlxIdNone; + } + + void AppendL(TInt aId, TBool aCreateMedia) + { + if (aCreateMedia) + { + CGlxMedia* media = new (ELeave) CGlxMedia(TGlxMediaId(aId)); + CleanupStack::PushL(media); + iMedia.AppendL(media); + CleanupStack::Pop(media); + iItems.AppendL(TGlxMedia(TGlxMediaId(aId), media)); + } + else + { + iItems.AppendL(TGlxMedia(TGlxMediaId(aId))); + } + } + + CGlxMedia* MediaObj(TInt aIndex) const + { + return const_cast(static_cast(iItems[aIndex].Properties())); + } + + CMPXCollectionPath* PathLC(NGlxListDefs::TPathType /*aType*/) const + { + return NULL; + } + + TInt SelectionCount() const + { + return iSelectedItems.Count(); + } + + TInt SelectedItemIndex(TInt /*aSelectionIndex*/) const + { + return 0; + } + + TBool IsPopulated() const + { + return ETrue; + } + + void AddStaticItemL( CGlxMedia* /*aStaticItem*/, + NGlxListDefs::TInsertionPosition /*aTargetPosition*/ ) {}; + + void RemoveStaticItem(const TGlxMediaId& /*aItemId*/) {}; + + void SetStaticItemsEnabled( TBool aEnabled ) { iStaticItemsEnabled = aEnabled; }; + + TBool IsStaticItemsEnabled() const { return iStaticItemsEnabled; }; + + void SetFocusInitialPosition(NGlxListDefs::TFocusInitialPosition aFocusInitialPosition){}; + + void ResetFocus(){}; + + void SetVisibleWindowIndexL( TInt aIndex ){}; + TInt VisibleWindowIndex() const {}; + + RArray iItems; + RPointerArray iMedia; + RArray iSelectedItems; + TInt iFocusIndex; + TBool iStaticItemsEnabled; + }; + + +TInt GlxAttributeRetriever::RetrieveL(const MGlxFetchContext&, MGlxMediaList&, TBool) + { + return KErrNone; + } + + + +CGlxMarkingCommandHandlerTester* CGlxMarkingCommandHandlerTester::NewL() + { + CGlxMarkingCommandHandlerTester* me = new(ELeave)CGlxMarkingCommandHandlerTester(); + CleanupStack::PushL(me); + me->ConstructL(); + CleanupStack::Pop(); + return me; + } + +CGlxMarkingCommandHandlerTester::~CGlxMarkingCommandHandlerTester() + { + iMarker->Deactivate(); + + iCommandHandlerList.ResetAndDestroy(); + iCommandHandlerList.Close(); + + delete iMediaList; + } + + +CGlxMarkingCommandHandlerTester::CGlxMarkingCommandHandlerTester() + { + + } + +void CGlxMarkingCommandHandlerTester::ConstructL() + { + EUNIT_PRINT(_L("CGlxMarkingCommandHandlerTester::ConstructL")); + + iMediaList = new (ELeave) _CGlxTestMediaList; + + EUNIT_PRINT(_L("Construct command handler")); + iMarker = CGlxCommandHandlerMarking::NewL(this,ETrue); + + iCommandHandlerList.AppendL(iMarker); + + iMarker->ActivateL(0); + + EUNIT_PRINT(_L("CGlxMarkingCommandHandlerTester::ConstructL complete")); + } + +MGlxMediaList& CGlxMarkingCommandHandlerTester::MediaList() + { + return *iMediaList; + } + +TBool CGlxMarkingCommandHandlerTester::ExecuteL(TInt aCommand) + { + return iCommandHandlerList[0]->ExecuteL( aCommand ); + } + +TBool CGlxMarkingCommandHandlerTester::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType) + { + TKeyResponse resp = iMarker->OfferKeyEventL(aKeyEvent, aType); + return (resp == EKeyWasConsumed); + } + +void CGlxMarkingCommandHandlerTester::HandleFocusChangedL(NGlxListDefs::TFocusChangeType aType, TInt aNewIndex, TInt aOldIndex) + { + iMarker->HandleFocusChangedL(aType, aNewIndex, aOldIndex, iMediaList); + } + +// CONSTRUCTION +ut__commandhandlermarking* ut__commandhandlermarking::NewL() + { + ut__commandhandlermarking* self = ut__commandhandlermarking::NewLC(); + CleanupStack::Pop(); + + return self; + } + +ut__commandhandlermarking* ut__commandhandlermarking::NewLC() + { + ut__commandhandlermarking* self = new( ELeave ) ut__commandhandlermarking(); + CleanupStack::PushL( self ); + + self->ConstructL(); + + return self; + } + +// Destructor (virtual by CBase) +ut__commandhandlermarking::~ut__commandhandlermarking() + { + } + +// Default constructor +ut__commandhandlermarking::ut__commandhandlermarking() + { + } + +// Second phase construct +void ut__commandhandlermarking::ConstructL() + { + CEUnitTestSuiteClass::ConstructL(); + } + +// METHODS + + +void ut__commandhandlermarking::SetupL( ) + { + EUNIT_PRINT(_L("ut__commandhandlermarking::SetupL")); + iTester = CGlxMarkingCommandHandlerTester::NewL(); + } + + +void ut__commandhandlermarking::Teardown( ) + { + delete iTester; + iTester = NULL; + } + + +void ut__commandhandlermarking::T_TestCreateL( ) + { + } + +void ut__commandhandlermarking::T_TestExecuteNoItemsL() + { + EUNIT_PRINT(_L("ut__commandhandlermarking::T_TestExecuteNoItemsL")); + TBool exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe == EFalse, "Mark unsupported "); + + exe = iTester->ExecuteL(EAknCmdUnmark); + EUNIT_ASSERT_DESC( exe == EFalse, "Unmark unsupported"); + + exe = iTester->ExecuteL(EAknMarkAll); + EUNIT_ASSERT_DESC( exe == EFalse, "Mark all unsupported"); + + exe = iTester->ExecuteL(EAknUnmarkAll); + EUNIT_ASSERT_DESC( exe == EFalse, "Unmark all unsupported"); + + exe = iTester->ExecuteL(-1); + EUNIT_ASSERT_DESC( exe == EFalse, "unknown command -1"); + + exe = iTester->ExecuteL(1024); + EUNIT_ASSERT_DESC( exe == EFalse, "unknown command 1024"); + } + + + +void ut__commandhandlermarking::T_TestExecuteItemsL() + { + EUNIT_PRINT(_L("ut__commandhandlermarking::T_TestExecuteItemsL")); + + _CGlxTestMediaList* ml = dynamic_cast<_CGlxTestMediaList*>(&iTester->MediaList()); + + ml->AppendL(0, ETrue); + ml->AppendL(1, ETrue); + ml->AppendL(2, ETrue); + ml->AppendL(3, ETrue); + ml->AppendL(4, ETrue); + ml->iFocusIndex = 0; + + TBool exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe, "Mark supported"); + + exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe == EFalse, "Already marked"); + + exe = iTester->ExecuteL(EAknCmdUnmark); + EUNIT_ASSERT_DESC( exe, "Unmark supported"); + + exe = iTester->ExecuteL(EAknCmdUnmark); + EUNIT_ASSERT_DESC( exe == EFalse, "Unmark not supported"); + + exe = iTester->ExecuteL(EAknMarkAll); + EUNIT_ASSERT_DESC( exe, "Mark all"); + + exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe == EFalse, "Cannot mark"); + + exe = iTester->ExecuteL(EAknMarkAll); + EUNIT_ASSERT_DESC( exe == EFalse, "Mark all not supported"); + + exe = iTester->ExecuteL(EAknUnmarkAll); + EUNIT_ASSERT_DESC( exe, "Unmark all"); + + exe = iTester->ExecuteL(EAknUnmarkAll); + EUNIT_ASSERT_DESC( exe==EFalse, "Unmark all not supported"); + + exe = iTester->ExecuteL(EAknCmdUnmark); + EUNIT_ASSERT_DESC( exe == EFalse, "Unmark not supported"); + + exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe, "Mark supported"); + + EUNIT_PRINT(_L("ut__commandhandlermarking::T_TestExecuteItemsL change focus pos")); + + ml->iFocusIndex = 1; + exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe, "Mark supported"); + + exe = iTester->ExecuteL(EAknCmdUnmark); + EUNIT_ASSERT_DESC( exe, "Unmark supported"); + + ml->iFocusIndex = 0; + + exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe == EFalse, "Already marked"); + + ml->iFocusIndex = 1; + exe = iTester->ExecuteL(EAknCmdUnmark); + EUNIT_ASSERT_DESC( exe == EFalse, "not marked"); + } + +void ut__commandhandlermarking::T_TestOfferKeyL() + { + _CGlxTestMediaList* ml = dynamic_cast<_CGlxTestMediaList*>(&iTester->MediaList()); + + ml->AppendL(0, ETrue); + ml->AppendL(1, ETrue); + ml->AppendL(2, ETrue); + ml->AppendL(3, ETrue); + ml->AppendL(4, ETrue); + ml->iFocusIndex = 0; + + TKeyEvent kev = { 0 }; + kev.iModifiers |= EModifierShift; + + // shift key pressed + iTester->OfferKeyEventL(kev, EEventKeyDown); + + // change focus + iTester->HandleFocusChangedL( NGlxListDefs::EForward, 4,0); + + // all items should now be marked + TBool exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe == EFalse, "Cannot mark"); + + exe = iTester->ExecuteL(EAknMarkAll); + EUNIT_ASSERT_DESC( exe == EFalse, "All already marked"); + + // shift key disabled + kev.iModifiers = 0; + iTester->OfferKeyEventL(kev, EEventKeyUp); + + iTester->OfferKeyEventL(kev, EEventKeyDown); + + // changing focus has no effect + iTester->HandleFocusChangedL( NGlxListDefs::EBackward, 0,4); + + exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe == EFalse, "Cannot mark"); + + exe = iTester->ExecuteL(EAknMarkAll); + EUNIT_ASSERT_DESC( exe == EFalse, "All already marked"); + + kev.iModifiers |= EModifierShift; + + // shift key down + iTester->OfferKeyEventL(kev, EEventKeyDown); + + iTester->HandleFocusChangedL( NGlxListDefs::EForward, 4,0); + + // all items have been unmarked + exe = iTester->ExecuteL(EAknUnmarkAll); + EUNIT_ASSERT_DESC( exe == EFalse, "None marked"); + + exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe, "Can mark"); + + exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe == EFalse, "Already marked"); + + // select with shift down + kev.iScanCode=EStdKeyDevice3; + TBool resp = iTester->OfferKeyEventL(kev, EEventKey); + EUNIT_ASSERT_DESC( resp, "Event consumed"); + + // item has been unmarked + exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe, "Can mark"); + + // shift key up + // select should have no effect on marking + kev.iScanCode=EStdKeyDevice3; + kev.iModifiers = 0; + resp = iTester->OfferKeyEventL(kev, EEventKeyDown); + EUNIT_ASSERT_DESC( resp == EFalse, "Event notconsumed"); + + exe = iTester->ExecuteL(EAknCmdMark); + EUNIT_ASSERT_DESC( exe == EFalse, "Already marked"); + } + +// TEST TABLE +EUNIT_BEGIN_TEST_TABLE( + ut__commandhandlermarking, + "Add test suite description here.", + "MODULE" ) + +EUNIT_TEST( + "Test0", + "Create marking command handler", + "Test0", + "FUNCTIONALITY", + SetupL, T_TestCreateL, Teardown) + +EUNIT_TEST( + "Test1", + "Test execute no items", + "Test1", + "FUNCTIONALITY", + SetupL, T_TestExecuteNoItemsL, Teardown) + +EUNIT_TEST( + "Test2", + "Test execute items", + "Test2", + "FUNCTIONALITY", + SetupL, T_TestExecuteItemsL, Teardown) + + EUNIT_TEST( + "Test3", + "Test offer key events", + "Test3", + "FUNCTIONALITY", + SetupL, T_TestOfferKeyL, Teardown) + + +EUNIT_END_TEST_TABLE + +// END OF FILE