localisation/apparchitecture/tef/T_ControlPanelTest.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /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 <f32file.h>
+#include <fbs.h>
+#include <s32std.h> 
+#include <s32stor.h> 
+#include <s32file.h> 
+
+#include <apaid.h>
+#include "..\apparc\apadll.h"
+#include <apgaplst.h>
+#include <apgicnfl.h>
+#include <apgdoor.h>
+#include <apfrec.h>
+#include <apfctlf.h>
+#include <apgctl.h>
+#include <apgaplst.h>
+#include <apaflrec.h>
+#include <apgcli.h>
+#include <apacmdln.h>
+#include <apsserv.h>
+#include <appfwk_test_AppUi.h>
+
+#include "T_ControlPanelTest.h"
+#include "tstapp.h"
+#include <w32std.h>
+
+#if !defined(__E32TEST_H__)
+#include <e32test.h>
+#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
+ */
+	{
+
+	}