diff -r e8c1ea2c6496 -r 8758140453c0 localisation/apparchitecture/tef/T_ControlPanelTest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localisation/apparchitecture/tef/T_ControlPanelTest.cpp Thu Jan 21 12:53:44 2010 +0000 @@ -0,0 +1,502 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Tests control panel Application Apparc base classes and utility functions to get application's data.\n +// +// + + + +/** + @file + @internalComponent - Internal Symbian test code +*/ + +#include +#include +#include +#include +#include + +#include +#include "..\apparc\apadll.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "T_ControlPanelTest.h" +#include "tstapp.h" +#include + +#if !defined(__E32TEST_H__) +#include +#endif + +_LIT(KCompleted, "Completed."); + + +_LIT(KRSCDIR,"C:\\Resource\\apps\\"); +_LIT(KRSCREGDIR,"C:\\private\\10003a3f\\import\\apps\\"); +_LIT(KNEWCTLPATH,"C:\\sys\\bin\\app_CTRL2.exe"); +_LIT(KSRCRESOURCEPATH,"Z:\\private\\10003a3f\\import\\apps\\App_CTRL2_reg.Rsc"); +_LIT(KDESTRESOURCEPATH,"C:\\private\\10003a3f\\import\\apps\\App_CTRL2_reg.Rsc"); + +LOCAL_D TInt SimulateKey(TAny*) + { + User::After(3000000); + RWsSession session; + User::LeaveIfError(session.Connect()); + //control down + TRawEvent rawEvent; + + rawEvent.Set(TRawEvent::EKeyDown,EStdKeyLeftCtrl); + session.SimulateRawEvent(rawEvent); + + // e down + rawEvent.Set(TRawEvent::EKeyDown,'E'); + session.SimulateRawEvent(rawEvent); + + // e up + rawEvent.Set(TRawEvent::EKeyUp,'E'); + session.SimulateRawEvent(rawEvent); + + //control up + rawEvent.Set(TRawEvent::EKeyUp,EStdKeyLeftCtrl); + session.SimulateRawEvent(rawEvent); + + session.Flush(); + + session.Close(); + + return KErrNone; + } + +void CT_ControlPanelTestStep::RemoveFilesFromCDrive() + { + TInt ret = iTestServ.SetReadOnly(KDESTRESOURCEPATH,0); //remove READ ONLY option + TEST(ret==KErrNone); + + TRAP(ret,iTestServ.DeleteFileL(KDESTRESOURCEPATH)); + TEST(ret==KErrNone); + } + + + +/** + Auxiliary Fn for Test Case ID T-ControlPanelStep-testControls1L, + T-ControlPanelStep-testControls2L, T-ControlPanelStep-testControls3L + + The method finds the index of control app_ctrl2.exe in the control list. + Depending on the Boolean value of argument aIsNewPath the search is + done on ROM / RAM.\n + +*/ + +TInt CT_ControlPanelTestStep::ControlIndexInList(CApaSystemControlList* aList, TBool aIsNewPath) + { + TFileName ctlPath=_L("Z:\\sys\\bin\\app_CTRL2.exe"); + TFileName newCtlPath=_L("c:\\sys\\bin\\app_ctrl2.exe"); + const TInt count = aList->Count(); + TInt retVal = KErrNotFound; + for(TInt ii = 0; ii < count; ++ii) + { + if(((aList->Control(ii)->FileName().CompareF(ctlPath)==0) && (!aIsNewPath)) || + ((aList->Control(ii)->FileName().CompareF(newCtlPath)==0) && (aIsNewPath))) + { + retVal = ii; + + + if(aList->Control(ii)->FileName().CompareF(ctlPath)==0) + { + INFO_PRINTF1(_L("***Found control on the z: drive")); + } + else + { + INFO_PRINTF1(_L("***Found control on the c: drive")); + } + break; + } + } + INFO_PRINTF2(_L("Out [%d] controlIndexInList"),retVal); + return retVal; + } + + +/** + @SYMTestCaseID T-ControlPanelStep-testControls1L + + @SYMPREQ + + @SYMTestCaseDesc Tests CApaSystemControlList::UpdateL(). + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions Check the control list to find the number of controls in the + list and the number of updates to the list. Call UpdateL(). Check the list + again for no change in the count of controls and updates to the list.\n + API Calls:\n + CApaSystemControlList::UpdateL()\n + + @SYMTestExpectedResults Test confirms that there is no change in the control + list after updating. + */ +void CT_ControlPanelTestStep::testControls1L() + { + INFO_PRINTF1(_L("In testControls1L......")); + + iControlCount1 = iControlList->Count(); + TEST((iControlCount1>=1)); + + TEST((iControlList->UpdateCount()>=1));//update count returns 1 if new list + // + // do an update - there should be no changes + TInt ret; + INFO_PRINTF1(_L("Updating the list ......")); + TRAP(ret, iControlList->UpdateL()); + TEST(ret==KErrNone); + iControlCount2 = iControlList->Count(); + TEST(iControlCount2 == iControlCount1); + TEST((iControlList->UpdateCount()>=1)); + iIndex = ControlIndexInList(iControlList,EFalse); + TEST((iIndex >= 0) && (iIndex < iControlCount2)); + + INFO_PRINTF1(_L("Out testControls1L......")); + } + + +/** + @SYMTestCaseID T-ControlPanelStep-testControls2L + + @SYMPREQ + + @SYMTestCaseDesc Tests CApaSystemControlList::UpdateL() and UpdateCount(). + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions Copy control from Z: drive to C: drive. Call UpdateL() to + update the control list. Check if UpdateL() has incremented iUpdateCount + by calling UpdateCount(). Check the filename of control to ensure that the + control copied to C: drive has been updated in the list. Delete the newly + copied control.\n + API Calls:\n + CApaSystemControlList::UpdateL()\n + CApaSystemControlList::UpdateCount()const\n + + @SYMTestExpectedResults The test shows updating of the copied control in control list. + */ + +void CT_ControlPanelTestStep::testControls2L() + { + INFO_PRINTF1(_L("In testControls2L......")); + + iTestServ.CreateDirectoryL(KRSCDIR); + iTestServ.CreateDirectoryL(KRSCREGDIR); + + TInt ret=iTestServ.CopyFileL(KSRCRESOURCEPATH,KDESTRESOURCEPATH); + TEST(ret==KErrNone); + + INFO_PRINTF1(_L("Files Copied to C Drive......")); + INFO_PRINTF1(_L("Updating the list ......")); + iControlCount=iControlList->UpdateCount(); + while(iControlList->UpdateCount()<=iControlCount) + { + TRAP(ret, iControlList->UpdateL()); + if(ret!=KErrNone) + { + break; + } + User::After(100000); + } + + INFO_PRINTF2(_L("In testControls2L After Controllist update [%d]......"),ret); + TEST(ret==KErrNone); + iControlCount3 = iControlList->Count(); + TEST(iControlCount3 == iControlCount1); + TEST((iControlList->UpdateCount()>=2)); + iIndex = ControlIndexInList(iControlList,ETrue); + TEST((iIndex >= 0) && (iIndex < iControlCount3)); + + TFileName name=iControlList->Control(iIndex)->FileName(); + TEST(name.CompareF(KNEWCTLPATH)==0); + RemoveFilesFromCDrive(); + INFO_PRINTF1(_L("Removed the file from C Drive......")); + INFO_PRINTF1(_L("Updating the list ......")); + iControlCount=iControlList->UpdateCount(); + while(iControlList->UpdateCount()<=iControlCount) + { + TRAPD(ret, iControlList->UpdateL()); + if(ret!=KErrNone) + { + break; + } + User::After(100000); + } + INFO_PRINTF1(_L("Out testControls2L......")); + } + +/** + @SYMTestCaseID T-ControlPanelStep-testControls3L + + @SYMPREQ + + @SYMTestCaseDesc Tests CApaSystemControlList::Control() and CApaSystemControl APIs Type() and Caption(). + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions Update the control list to ensure that the deleted control is + removed from the list and the control on the Z: Drive is added to the list. + Retrieve this control from the list using CApaSystemControlList::Control(). + Check the type and caption of the control calling Type() and Caption() methods.\n + API Calls:\n + CApaSystemControlList::Control(TInt aIndex)const\n + CApaSystemControl::Type()const\n + CApaSystemControl::Caption()const\n + + @SYMTestExpectedResults The test shows the addition of the control present on + Z: drive in control list. Test confirms the retrieved info on the control + obtained from the control list. + + */ +void CT_ControlPanelTestStep::testControls3L() + { + INFO_PRINTF1(_L("In testControls3L......")); + TFileName ctlPath=_L("Z:\\sys\\bin\\app_ctrl2.exe"); + TFileName ctlCaption=_L("app_ctrl2"); + // This method is called to close the panic dialog generated by previous test + CloseAllPanicWindowsL(); + + INFO_PRINTF1(_L("IN testControls3L Before Updating the list......")); + TRAPD(ret, iControlList->UpdateL()); + + TEST(ret==KErrNone); + const TInt controlCount4 = iControlList->Count(); + TEST(controlCount4 == iControlCount1); // no changes in the count + TEST((iControlList->UpdateCount()>=3)); + + iIndex = ControlIndexInList(iControlList,EFalse); + TEST((iIndex >= 0) && (iIndex < controlCount4)); + TEST(iControlList->Control(iIndex)->FileName().CompareF(ctlPath)==0); + + INFO_PRINTF1(_L("Testing CApaSystemControl")); + // + //get the control from the list and check it's type and caption + iControl=iControlList->Control(iIndex); + TEST(iControl!=NULL); + TFileName caption=iControl->Caption(); + TEST(caption.CompareF(ctlCaption)==0); + TEST(iControl->Icon()!=NULL); + + RThread thread; + TFullName name=_L("Control Panel Test"); + TInt r=thread.Create(name,SimulateKey,KDefaultStackSize,KDefaultStackSize,KDefaultStackSize,NULL); + TEST(r==KErrNone); + thread.Resume(); + + // run the control + TRAP(ret, iControl->CreateL()); // this call is synchronous + TEST(ret==KErrNone); + + thread.Close(); + INFO_PRINTF1(_L("Out testControls3L......")); + } + + + +/** + Auxiliary Fn for T-ControlPanelStep-testControls1L, T-ControlPanelStep-testControls2L, T-ControlPanelStep-testControls3L + + This method creates a control list by calling CApaSystemControlList::NewL() and + initiates subsequent tests on CApaSystemControlList and CApaSystemControl APIs. + + */ +void CT_ControlPanelTestStep::testControlsL() + { + INFO_PRINTF1(_L("Testing CApaSystemControlList")); + + //Create a session with F & B server + TInt ret=RFbsSession::Connect(); + TEST(!ret); + + TRAP(ret,iControlList=CApaSystemControlList::NewL(iFs)); + TEST(ret==KErrNone); + + TRAPD(err,testControls1L()); + TRAP(err,testControls2L()); + TRAP(err,testControls3L()); + + delete iControlList; + + //Close the session F & B server. + RFbsSession::Disconnect(); + } + + +/** + Auxiliary Fn for all Test Cases. + + This method creates and installs an active scheduler and puts the + test code on the scheduler as a CIdle object. The method initiates + all tests by calling the static method CT_ControlPanelTestCallBack::CallBack(). + +*/ +void CT_ControlPanelTestStep::DoStepTestsInCallbackL() + { + // create an active scheduler + CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; + CActiveScheduler::Install(scheduler); + CleanupStack::PushL(scheduler); + + // put the test code onto the scheduler as an idle object + CIdle* idle=CIdle::NewL(-20); + CleanupStack::PushL(idle); + + CT_ControlPanelTestCallBack* callBack = new(ELeave) CT_ControlPanelTestCallBack(this); + CleanupStack::PushL(callBack); + + idle->Start(TCallBack(CT_ControlPanelTestCallBack::CallBack,callBack)); + // start the test code + CActiveScheduler::Start(); + + // all outstanding requests complete - kill the scheduler + CleanupStack::PopAndDestroy(3); //scheduler, callBack, idle + } + + + + +/** + Auxiliary Fn for all Test Cases. + + The method initiates all tests to be performed. + +*/ +void CT_ControlPanelTestStep::DoStepTests() + { + __UHEAP_MARK; + INFO_PRINTF1(_L("Test Controls......")); + TRAPD(r,testControlsL()); + TEST(r==KErrNone); + INFO_PRINTF1(KCompleted); + __UHEAP_MARKEND; + } + + +CT_ControlPanelTestStep::~CT_ControlPanelTestStep() +/** + Destructor + */ + { + } + +CT_ControlPanelTestStep::CT_ControlPanelTestStep() +/** + Constructor + */ + { + // Call base class method to set up the human readable name for logging + SetTestStepName(KT_ControlPanelTest); + } + +TVerdict CT_ControlPanelTestStep::doTestStepPreambleL() +/** + @return - TVerdict code + Override of base class virtual + */ + { + SetTestStepResult(EPass); + return TestStepResult(); + } + +TVerdict CT_ControlPanelTestStep::doTestStepPostambleL() +/** + @return - TVerdict code + Override of base class virtual + */ + { + return TestStepResult(); + } + + +TVerdict CT_ControlPanelTestStep::doTestStepL() +/** + @return - TVerdict code + Override of base class virtual +*/ + { + INFO_PRINTF1(_L("Testing Apparc ...T_ControlPanel")); + + // set up the directory structure + User::LeaveIfError(iFs.Connect()); + + // connect to the test utils server + User::LeaveIfError(iTestServ.Connect()); + + // Run the tests...w + TRAPD(ret,DoStepTestsInCallbackL()) + TEST(ret==KErrNone); + + // Close everything + iFs.Close(); + iTestServ.Close(); + + INFO_PRINTF1(_L("T_ControlPanel Completed.")); + return TestStepResult(); + } + + +TInt CT_ControlPanelTestCallBack::CallBack(TAny* callBack /*aThis*/) +/** + This static method is the callback function of CIdle object. The method + calls the non-static method DoStepTests() which initiates all the tests. +*/ + { + + //Call Test Step func + + ((CT_ControlPanelTestCallBack *)callBack)->iTestStep->DoStepTests(); + + CActiveScheduler::Stop(); + return EFalse; // don't call back again + } + + +CT_ControlPanelTestCallBack::CT_ControlPanelTestCallBack(CT_ControlPanelTestStep* aTestStep) +/** + Constructor + */ + { + iTestStep = aTestStep; + } + +CT_ControlPanelTestCallBack::~CT_ControlPanelTestCallBack() +/** + Destructor + */ + { + + }