diff -r 000000000000 -r 2f259fa3e83a commonuisupport/grid/tef/TCOGRDSTEP.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonuisupport/grid/tef/TCOGRDSTEP.CPP Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,506 @@ +// Copyright (c) 2005-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: +// Tests APIs related to CGridImg,CGridLay and MGridTable classes +// for tables with INDEFINITE row boundaries\n +// +// + +/** + @file + @internalComponent - Internal Symbian test code +*/ + + +#include +#include + +#include "TCoGridStep.h" + + +/** + Constructor +*/ +CTestCoeGridAppUi::CTestCoeGridAppUi(CTmsTestStep* aStep) : +CTestCoeAppUi(aStep) +{} + +/** + Destructor +*/ +CTestCoeGridAppUi::~CTestCoeGridAppUi() + { + RemoveFromStack(iGridWin); + delete iGridWin; + delete iGridImg; + delete iGridLay; + delete iTestCellImg; + delete iTestLabelImg; + delete iGridTable; + delete iZoomFactor; + } +/** + Auxiliary Function for T-CoGridStep-RunTestStepL.\n + Handles the following Key Events\n + 1. Ctrl+ e - Exits the application\n + 2. Ctrl+ t - Toggles the Title Lines\n + 3. Ctrl+ r - Resets the grid to its default layout and sets the cursor position to the cell at the top of the window\n + 4. Ctrl+ m - Sets the zoom factor \n + 5. Ctrl+ p - Paginates the Grid \n + 6. Ctrl+ i - Inserts columns \n + 7. Ctrl+ d - Deletes columns \n + 8. Ctrl+ c - Changes the grid colour settings\n + 9. Shift+m - Sets the zoom factor\n + + @return TKeyResponse indicating whether the key event has been handled or not.\n + +*/ +TKeyResponse CTestCoeGridAppUi::HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) + { + if (aType==EEventKey) + { + if ((aKeyEvent.iModifiers&EAllStdModifiers)==EModifierCtrl) + { + switch (aKeyEvent.iCode) + { + case CTRL('e'): + SaveL(); + iCoeEnv->Flush(); + CBaActiveScheduler::Exit(); + break; + case CTRL('t'): + iGridWin->GridLay()->ToggleTitleLinesL(); + break; + case CTRL('r'): + iGridWin->GridLay()->SetGridToDefault(); + iUndoColors=EFalse; + iUndoColors =~iUndoColors; + ChangeColors(iUndoColors); + iGridWin->DrawNow(); + iGridWin->SetCursorPosL(iGridWin->GridLay()->VisibleRange().iFrom); + break; + case CTRL('m'): + { + TInt zoomFactor=iZoomFactor->ZoomFactor(); + zoomFactor=(zoomFactor<(TZoomFactor::EZoomOneToOne*4)) + ? zoomFactor*2 : TZoomFactor::EZoomOneToOne/4; + SetZoomFactorL(zoomFactor); + break; + } + case CTRL('p'): + iGridWin->GridLay()->SetPageSizeInTwipsL + (TSize(EPageWidthInTwips,EPageHeightInTwips)); + + iGridWin->GridLay()->PaginateL(); + iGridWin->DrawNow(); + break; + case CTRL('c'): + { + iUndoColors = ~iUndoColors; + ChangeColors(iUndoColors); + iGridWin->DrawNow(); + } + break; + case CTRL('i'): + case CTRL('d'): + { + TInt noOfCols=(aKeyEvent.iCode==CTRL('i')) ? 1 : -1; + iGridLay->InsertDeleteColumns(iGridLay->VisibleRange().iFrom.iCol, + noOfCols,CGridLay::EAdjustGridRange); + iGridWin->DrawNow(); + } + break; + case CTRL('z'): + { + iGridTable->iZeroRows=!iGridTable->iZeroRows; + iGridImg->ResetReferencePoints(); + iGridLay->ResetVisibleToCell(); + iGridWin->DrawNow(); + } + break; + default: + break; + } + } + else if ((aKeyEvent.iModifiers&EAllStdModifiers)==EModifierShift) + { + switch (User::LowerCase(aKeyEvent.iCode)) + { + case 'm': + { + TInt zoomFactor=iZoomFactor->ZoomFactor(); + zoomFactor=(zoomFactor>(TZoomFactor::EZoomOneToOne/4)) + ? zoomFactor/2 : TZoomFactor::EZoomOneToOne*4; + SetZoomFactorL(zoomFactor); + break; + } + default: + break; + } + } + } + return EKeyWasConsumed; + } +/** + Second Phase constructor for the CTestCoeGridAppUi class.\n + Gets the current zoom factor.\n + Sets the grid cell settings like font and zoom factor.\n + Constructs a GridTable. It is an interface providing row and column info.\n + Initializes a GridLay passing the gridtable and null gridimage. \n + The GridLay object is used to handle the layout of a grid, + and controls how columns, rows and selections appear.\n + Initializes a GridImage with gridcell settings which is used to draw cell contents.\n + A Grid Window is formed containing using GridTable,GridLay and GridImage objects.\n + The GridWindow offers handlers to pointer and key events.\n + Sets the current cursor position and activates the Grid Window.\n +*/ +void CTestCoeGridAppUi::ConstructL() + { + CTestCoeAppUi::ConstructL(); + + iUndoColors = EFalse; + CGraphicsDevice* device=iCoeEnv->ScreenDevice(); + //iCoeEnv->WsSession().SetAutoFlush(ETrue); + iZoomFactor = new(ELeave) TZoomFactor(device); + User::Heap().Check(); + + const CFont* font = iCoeEnv->NormalFont(); + iTestCellImg = new(ELeave) CTestCellImg(font); + + TFontSpec fontSpec(_L("Swiss"),240); + iTestLabelImg = new(ELeave) CTestLabelImg(fontSpec,iZoomFactor); + iTestLabelImg->ConstructL(); + User::Heap().Check(); + + iGridLay = new(ELeave) CGridLay(iZoomFactor); + iGridImg = CGridImg::NewL(device,iTestCellImg,iGridLay); + iGridImg->SetGridLabelImg(iTestLabelImg); + iGridTable = new(ELeave) CTestGridTable(); + iGridLay->ConstructL(iGridTable,iGridImg,ENoCols); + + iGridWin = CGridWin::NewL(NULL,iGridLay,iGridImg); + AddToStackL(iGridWin); + + // + iGridWin->SetRect((TRect(10,10,630,230))); + iGridWin->ActivateL(); + iGridWin->DrawNow(); + // + iGridLay->SetMinRowHeightInPixels(15); // If ENoRows is not used, a minRowHeight is recommended + iGridLay->SetColumnBursting(ETrue); + iGridLay->SetRowPermanentlySelectedL(ETrue); + iGridLay->SetColumnSelectionDisabled(ETrue); + iGridLay->SetCursorVisible(EFalse); + iGridLay->SetHighlightVisible(EFalse); + iGridLay->SetGridLabelSeparators(EFalse); + iGridLay->SetAutoClearGridCells(EFalse); + + LoadL(); // Get Persistent data + User::Heap().Check(); + iGridWin->ActivateL(); + User::Heap().Check(); + + AutoTestManager().StartAutoTest(); + + } +/** + Auxiliary function for T-CoGridStep-RunTestStepL.\n + Creates a File Store and returns the pointer.\n + + @return FileStore pointer used for storing persistant data.\n + +*/ +CFileStore* CTestCoeGridAppUi::CreateStoreLC(RFile &aFile) + { + CFileStore *store=CDirectFileStore::NewLC(aFile); + TUid uid; + uid.iUid=TUint32('G'|('R'<<8)|('D'<<16)); + store->SetTypeL(TUidType(KDirectFileStoreLayoutUid,uid)); + return(store); + } +/** + Auxiliary function for T-CoGridStep-RunTestStepL.\n + Loads the GridLay settings and cursor position from dat file TGRID0.DAT.\n +*/ +void CTestCoeGridAppUi::LoadL() + { + RFile file; + TInt err=(file.Open(iCoeEnv->FsSession(),_L("C:\\data\\TCOGRD.DAT"), + EFileRead|EFileShareReadersOnly)); + if (err==KErrNotFound || err==KErrPathNotFound) + return; // Use default settings + User::LeaveIfError(err); + + CFileStore *store=CDirectFileStore::FromLC(file); + TStreamId root=store->Root(); + RStoreReadStream source; + source.OpenLC(*store,root); + source >> *(iGridWin->GridLay()); + TCellRef cursorPos; + source >> cursorPos; +// TInt visibleFromCol=iGridWin->GridLay()->VisibleRange().iFrom.iCol; +// iGridWin->SetCursorPosL(TCellRef(cursorPos.iRow,visibleFromCol)); + + iGridWin->SetCursorPosL(iGridWin->GridLay()->VisibleRange().iFrom); + + CleanupStack::PopAndDestroy(2); // stream+store + } +/** + Auxiliary function for T-CoGridStep-RunTestStepL.\n + Stores the current grid settings to a Dat File.\n + Saves the current cursor postion.\n +*/ +void CTestCoeGridAppUi::SaveL() + { + RFs fsSession=iCoeEnv->FsSession(); + RFile file; + TInt err=fsSession.MkDir(_L("C:\\data\\")); + if (err!=KErrAlreadyExists) + User::LeaveIfError(err); + User::LeaveIfError(file.Replace(fsSession,_L("C:\\data\\TCOGRD.DAT"),EFileRead|EFileWrite)); + + CFileStore *store=CreateStoreLC(file); + RStoreWriteStream source; + TStreamId root = source.CreateLC(*store); + source << *(iGridWin->GridLay()); + source << iGridWin->CursorPos(); + store->SetRootL(root); + CleanupStack::PopAndDestroy(2); + } +/** + Auxiliary function for T-CoGridStep-RunTestStepL.\n + Sets the zoom factor depending on the argument.\n + To Redraw the grid table again, the procedure followed is as follows\n + Recalculates the internal maps that map row and column numbers to heights and widths respectively.\n + Resets the reference points.\n + The reference points are the mainpoint and the titlepoint.\n + Resets the row and column numbers visible at the bottom, and to the right, of the visible area of the grid.\n +*/ +void CTestCoeGridAppUi::SetZoomFactorL(TInt aZoomFactor) + { + iZoomFactor->SetZoomFactor(aZoomFactor); + TEST(aZoomFactor == iZoomFactor->ZoomFactor()); + iTestLabelImg->NotifyGraphicsDeviceMapChangeL(); + iGridWin->GridLay()->RecalcPixelSparseMaps(); + iGridWin->GridImg()->ResetReferencePoints(); + iGridWin->GridLay()->ResetVisibleToCell(); + iGridWin->DrawNow(); + } + +/** + Auxiliary function for T-CoGridStep-RunTestStepL.\n + Sets the Grid colours depending on the argument.\n + If Reset is enabled, the default colours will be enabled.\n + Foreground to RGB value(0,0,0) , Background to RGB value(255,255,255) and Lines to (170,170,170).\n + If Reset is not enabled, Sets the following combination\n + Forground to Blue, Background to Yellow, Colour of lines to Yellow and Label separators + to Green.\n +*/ +void CTestCoeGridAppUi::ChangeColors(TBool aReset) + { + if (aReset) + { + TGridColors gridColors; + iGridLay->SetGridColors(gridColors); + } + else + { + TGridColors newGridColors(KRgbBlue, KRgbYellow, KRgbRed, KRgbGreen); + iGridLay->SetGridColors(newGridColors); + } + iUndoColors = aReset; + } +/** + @SYMTestCaseID UIF-CoGridStep-RunTestStepL + + @SYMPREQ + + @SYMTestCaseDesc + Tests different functionalities of Grid Window + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions \n + The following tests are performed \n + 1. Setting grid with its default settings.\n + 2. Simulating right arrow key event.\n + 3. Simulating down arrow key event.\n + 4. Change Color Settings. \n + 5. Setting zoom in factor. \n + 6. Setting zoom out factor.\n + 7. Toggle Title Lines. \n + 8. Scroll Right.\n + 9. Scroll Left.\n + 7. Paginate the Grid. \n + + + @SYMTestExpectedResults The test pass if the events are handled without exceptions / panic / crashes\n + + */ +void CTestCoeGridAppUi::RunTestStepL(TInt aNumStep) + { + TKeyEvent theKeyEvent; + Mem::FillZ(&theKeyEvent, sizeof(TKeyEvent)); + TEventCode theType=EEventKey; + + + User::After(TTimeIntervalMicroSeconds32(1000000)); + + switch(aNumStep) + { + case 1: + SetTestStepID(_L("UIF-CoGridStep-RunTestStepL")); + theKeyEvent.iModifiers = EModifierCtrl; + theKeyEvent.iCode=CTRL('r'); + INFO_PRINTF1(_L("Set grid to default")); + HandleKeyEventL(theKeyEvent,theType); + break; + case 2: case 3: case 4: + INFO_PRINTF1(_L("Move cursor right")); + theKeyEvent.iCode = EKeyRightArrow; + iGridWin->OfferKeyEventL(theKeyEvent,theType); + break; + case 5: case 6: + INFO_PRINTF1(_L("Move cursor down")); + theKeyEvent.iCode = EKeyDownArrow; + iGridWin->OfferKeyEventL(theKeyEvent,theType); + break; + case 7: case 8: + INFO_PRINTF1(_L("Change color")); + theKeyEvent.iModifiers=EModifierCtrl; + theKeyEvent.iCode = CTRL('c'); + HandleKeyEventL(theKeyEvent,theType); + break; + case 9: case 10: + INFO_PRINTF1(_L("Zoom in")); + theKeyEvent.iModifiers=EModifierCtrl; + theKeyEvent.iCode = CTRL('m'); + HandleKeyEventL(theKeyEvent,theType); + break; + case 11: case 12: + INFO_PRINTF1(_L("Zoom out")); + theKeyEvent.iModifiers=EModifierShift; + theKeyEvent.iCode = 'm'; + HandleKeyEventL(theKeyEvent,theType); + break; + case 13: + INFO_PRINTF1(_L("Toggle title lines")); + theKeyEvent.iModifiers=EModifierCtrl; + theKeyEvent.iCode = CTRL('t'); + HandleKeyEventL(theKeyEvent,theType); + break; + case 14: + INFO_PRINTF1(_L("Scroll right")); + theKeyEvent.iModifiers=EModifierCtrl; + theKeyEvent.iCode = EKeyRightArrow; + iGridWin->OfferKeyEventL(theKeyEvent,theType); + break; + case 15: + INFO_PRINTF1(_L("Scroll left")); + theKeyEvent.iModifiers=EModifierCtrl; + theKeyEvent.iCode = EKeyLeftArrow; + iGridWin->OfferKeyEventL(theKeyEvent,theType); + break; + case 16: + INFO_PRINTF1(_L("Toggle title lines")); + theKeyEvent.iModifiers=EModifierCtrl; + theKeyEvent.iCode = CTRL('t'); + HandleKeyEventL(theKeyEvent,theType); + break; + case 17: + INFO_PRINTF1(_L("Paginate")); + theKeyEvent.iModifiers=EModifierCtrl; + theKeyEvent.iCode = CTRL('p'); + HandleKeyEventL(theKeyEvent,theType); + break; + case 18: + INFO_PRINTF1(_L("Set grid to default")); + theKeyEvent.iModifiers=EModifierCtrl; + theKeyEvent.iCode = CTRL('r'); + HandleKeyEventL(theKeyEvent,theType); + RecordTestResultL(); + CloseTMSGraphicsStep(); + break; + case 19: + SaveL(); + iCoeEnv->Flush(); + AutoTestManager().FinishAllTestCases(CAutoTestManager::EPass); + break; + + } + } + +/** + Constructs the CTCoGrid Test application.\n + Initializes the AppUi object.\n + Sets the AppUi object as the default AppUi for the application.\n + +*/ +void CTCoGridStep::ConstructAppL(CCoeEnv* aCoe) + { // runs inside a TRAP harness + aCoe->ConstructL(); + CTestCoeGridAppUi* appUi=new(ELeave) CTestCoeGridAppUi(this); + appUi->ConstructL(); + aCoe->SetAppUi(appUi); + } + + +CTCoGridStep::~CTCoGridStep() +/** + Destructor + */ + { + } + +CTCoGridStep::CTCoGridStep() +/** + Constructor + */ + { + // Call base class method to set up the human readable name for logging + SetTestStepName(KTCoGridStep); + } +/** + Entry Function for the CTCoGrid Test Step.\n + Initializes a control environment for the application.\n + Starts the application.\n + + @return : Test execution results indicating whether the test step has passed or failed.\n + +*/ +TVerdict CTCoGridStep::doTestStepL() + { + INFO_PRINTF1(_L("Test Started")); + + PreallocateHALBuffer(); + + __UHEAP_MARK; + + CCoeEnv* coe=new(ELeave) CCoeEnv; + TRAPD(err,ConstructAppL(coe)); + if (!err) + coe->ExecuteD(); + else + { + SetTestStepResult(EFail); + delete coe; + } + + __UHEAP_MARKEND; + + INFO_PRINTF1(_L("Test Finished")); + return TestStepResult(); + } +