fep/frontendprocessor/test/src/TAPPMORSE.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/frontendprocessor/test/src/TAPPMORSE.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,438 @@
+// Copyright (c) 2006-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:
+// @file
+// @test
+// @internalComponent - Internal Symbian test code
+// This is a FEP crash test.\n
+// Launch the application and load the Morse FEP (TAPPMORSE.FEP).\n
+// Create the stream code using character array.\n Offer these simulated events to the application.\n
+// FEP intercepts these events. On success the application exits without a crash.\n  
+// ___Install_Fep	// Define this if you want to use an extern fep
+// 
+//
+
+      
+#include <eikdef.h>
+#include <eikenv.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikappui.h>
+#include <uikon.hrh>
+#include <w32std.h>
+#include <fepbase.h>
+
+#include "TAppMorse.h"
+
+//
+//	Forward class declarations
+//
+class CTAppMorseAppView;
+class CTAppMorseAppUi;
+class CTAppMorseDocument;
+class CTAppMorseApplication;
+
+//
+//	Constant definitions
+//
+
+//const TUid KUidTAppMorse				= { 0x01000001 };
+
+//Character codes to create the stream 
+const TUint KFirstTestStreamCode	= 'A';
+const TUint KListTestStreamCode		= 'Z';
+const TUint KSizeTestStream			= KListTestStreamCode - KFirstTestStreamCode;
+_LIT(KTAPPMORSEResourceFilePath,""/*"z:\\system\\data\\tappmorse.rsc"*/);
+
+#ifdef ___Install_Fep 	// Define this if you want to use an extern fep
+_LIT(KLitFepMorseDllName, "\\system\\fep\\TAPPMORSE.FEP");
+const TUid KUidTAppMorseFep = { 0x11111111 };
+#else					// Not defined, to use the internal fep
+	
+	
+//
+//	CStackFaultTestFep members definitions
+
+
+/**
+	Auxiliary Function for Test Case ID TAppMorse-doTestStepL.\n
+	Return a fully constructed object of CCoeFep\n
+
+*/
+CCoeFep* CStackFaultTestFep::NewFepL( CCoeEnv& aConeEnvironment, const CCoeFepParameters& aFepParameters )
+	{
+	CStackFaultTestFep* const fep=new(ELeave) CStackFaultTestFep(aConeEnvironment);
+	CleanupStack::PushL(fep);
+	fep->ConstructL(aFepParameters);
+	CleanupStack::Pop(); // fep
+	return fep;
+	}
+/**
+  
+  Constructor
+  
+*/
+CStackFaultTestFep::CStackFaultTestFep(CCoeEnv& aConeEnvironment)
+	:CCoeFep(aConeEnvironment)
+	{
+	}
+/**
+  Auxiliary Function for  Test Case ID TAppMorse-doTestStepL.\n
+  Initialise the FEP's generic settings\n
+  Sets this FEP's attributes with values from the global settings\n
+  Create a stream (character array)\n
+  Simulates key event for each of the character codes in the array passed to it\n
+  
+*/
+void CStackFaultTestFep::ConstructL(const CCoeFepParameters& aFepParameters)
+	{
+	BaseConstructL(aFepParameters);
+	ReadAllAttributesL();
+	
+	//Set stream to owner.  Stream will be rubbish unless Morse test app had focus
+	RArray<TUint> aChars;
+	for( TUint i=0; i<=KSizeTestStream; i++ )
+		aChars.Insert( i+KFirstTestStreamCode, i );
+	SimulateKeyEventsL( aChars.Array() );
+	aChars.Close();
+	}
+#endif
+
+
+//
+//	CTAppMorseAppView members definition
+
+
+/**
+ Auxiliary Function for  Test Case ID TAppMorse-doTestStepL.\n
+ Initialise a pointer to CTAppMorseAppView and return it\n
+
+*/
+CTAppMorseAppView* CTAppMorseAppView::NewL(const TRect& aRect, CTmsTestStep* aStep )
+	{
+
+	CTAppMorseAppView* self = new(ELeave) CTAppMorseAppView(aStep);
+	CleanupStack::PushL(self);
+	self->ConstructL(aRect);
+	CleanupStack::Pop();
+	return self;
+	};
+/**
+   Constructor \n
+  
+ */	
+CTAppMorseAppView::CTAppMorseAppView(CTmsTestStep* aStep)
+	: iStop( NULL )
+	, iTestFep( NULL )
+	, iNextValidScanCode( KFirstTestStreamCode )
+	, iStep(aStep)
+	{INFO_PRINTF1(_L("AppMorse App View Default Constructor"));
+	}
+/**
+  Auxiliary Function for  Test Case ID TAppMorse-doTestStepL.\n
+  Creates a control's window \n
+  Set the control's extent and as ready to be drawn \n
+  Initialize the active object \n
+  Install the FEP, if an external fep is to be used,else use internal FEP \n
+  Create a fully constructed object of CStackFaultTestFep class \n
+  
+*/	
+void CTAppMorseAppView::ConstructL( const TRect& aRect )
+	{
+	INFO_PRINTF1(_L("App Mosre App View Construct L"));
+	CreateWindowL();
+	SetRect(aRect);
+	ActivateL();
+	iStop = new(ELeave) CTAppMorseAppView::CStop( iEikonEnv );
+#ifdef ___Install_Fep	// Define this if you what to use an extern fep
+	iCoeEnv->InstallFepL(KUidTAppMorseFep);
+#else					// Not defined to use the internal fep
+	CCoeFepParameters* pFepParams = NULL; // this is passed into a reference parameter - this pointer should never be dereferenced
+	iTestFep = CStackFaultTestFep::NewFepL(*ControlEnv(), *pFepParams );
+#endif	
+	};
+/**
+  
+   Destructor \n
+   delete the FEP object and the active object\n
+  
+ */	
+CTAppMorseAppView::~CTAppMorseAppView()
+	{
+	delete iStop;
+	delete iTestFep;
+	}
+/**
+   Auxiliary Function for  Test Case ID TAppMorse-doTestStepL.\n
+   Send the key events to CCoeControl::OfferKeyEventL() to handle \n
+  
+ */	
+TKeyResponse CTAppMorseAppView::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+	{
+	INFO_PRINTF3(_L("OfferKeyeventL, EventCode %d , EventCode %d"), aKeyEvent.iCode, aType);
+	if( aKeyEvent.iCode != iNextValidScanCode++ )
+		{
+		iNextValidScanCode = KFirstTestStreamCode;
+		}
+	else
+		{
+		if( iNextValidScanCode > KListTestStreamCode )
+			{
+			DoTestL();
+			};
+		};
+	return CCoeControl::OfferKeyEventL(aKeyEvent,aType);
+	};
+/**
+  Auxiliary Function for Test Case ID TAppMorse-doTestStepL.\n
+  Install the external FEP, if to be used.\n
+  Call DoStop() of CStop \n
+   
+*/
+void CTAppMorseAppView::DoTestL()
+	{
+	INFO_PRINTF1(_L("Executing Test"));
+#ifdef ___Install_Fep	// Define this if you what to use an extern fep
+	iCoeEnv->InstallFepL(KNullUid);
+	iStop->DoStop();
+	TRAPD(exitCondition,CActiveScheduler::Start());	
+	if (exitCondition!=KLeaveExit)
+		User::Leave(exitCondition);
+#else					// Not defined to use the internal fep
+	delete iTestFep;
+	iTestFep = NULL;
+#endif
+	iStop->DoStop();
+	}
+
+//	CTAppMorseAppView::CStop members definition
+
+
+/**
+  
+  Constructor \n
+  Adds the active object to the current active scheduler \n
+ 
+*/
+CTAppMorseAppView::CStop::CStop( CEikonEnv* env ) 
+	: CActive(EPriorityLow)
+	, iEikEnv( env )
+	{
+	CActiveScheduler::Add(this);
+	}
+/**
+  Auxiliary Function for Test Case ID TAppMorse-doTestStepL.\n
+  Indicate the completion status of a request made to a service provider \n
+ 		
+  Signal the current thread that the asynchronous request associated \n
+  with the specified request status object is complete (RequestComplete) \n
+ 
+  Indicates that the active object has issued a request \n
+  and that it is now outstanding(Set Active) \n
+  
+*/			
+void CTAppMorseAppView::CStop::DoStop()
+	{
+	TRequestStatus* requestStatus=&iStatus;
+	User::RequestComplete(requestStatus, KErrNone);
+	SetActive();
+	}
+/**
+ Auxiliary Function for Test Case ID TAppMorse-doTestStepL.\n
+ Handles any leave occurring in the request completion event(RunL) \n
+ 
+*/			
+TInt CTAppMorseAppView::CStop::RunError(TInt)
+	{
+	return KLeaveExit;
+	}
+/**
+ Auxiliary Function for Test Case ID TAppMorse-doTestStepL.\n
+ Do nothing \n
+ 
+*/		
+void CTAppMorseAppView::CStop::DoCancel()
+	{
+	};
+/**
+  Auxiliary Function for Test Case ID TAppMorse-doTestStepL.\n
+  Handle active object's request completion event \n
+ 
+*/			
+void CTAppMorseAppView::CStop::RunL()
+	{
+	//Uncomment the following line if tester wants active confirmation success
+	//iEikEnv->AlertWin( _L( "No Defect. Press Continue to exit" ) );
+	static_cast< CTAppMorseAppUi* >( iEikEnv->AppUi() )->DoExit();
+	};
+
+//	CTAppMorseAppUi members definition
+
+/**
+
+ Constructor \n
+
+*/
+CTAppMorseAppUi::CTAppMorseAppUi(CTmsTestStep* aStep)
+	: CTestAppUi(aStep,KTAPPMORSEResourceFilePath), iAppView( NULL )
+	{INFO_PRINTF1(_L("App Morse default constructor"));
+	}
+/**
+   Auxiliary Function for Test Case ID TAppMorse-doTestStepL.\n
+   Inserts a control into the app UI's control stack (AddToStackL) \n
+   Call StartAutoTest() of AutoTestManager() \n
+    
+ */	
+void CTAppMorseAppUi::ConstructL(CTmsTestStep* aStep)
+	{
+	INFO_PRINTF1(_L("AppMoresAppUI ContructL"));
+	CTestAppUi::ConstructL();
+	iAppView = CTAppMorseAppView::NewL(ClientRect(),aStep);
+	AddToStackL( iAppView );
+	AutoTestManager().StartAutoTest();
+	};
+/**
+   
+   Destructor \n
+   Removes the control from the app UI's control stack \n
+    
+ */
+CTAppMorseAppUi::~CTAppMorseAppUi()
+	{
+	RemoveFromStack( iAppView );
+	delete iAppView;
+	};
+/**
+  
+  Auxiliary Function for Test Case ID TAppMorse-doTestStepL.\n
+  Do nothing for step number value 1\n
+ 
+*/	
+void CTAppMorseAppUi::RunTestStepL(TInt aStepNum)
+	{
+	switch (aStepNum)
+		{
+		case 1:
+			{
+			}
+		}
+	}
+/**
+  
+  Auxiliary Function for Test Case ID TAppMorse-doTestStepL.\n
+  Handle the Application exit command by calling the DoExit() \n
+ 
+*/
+void CTAppMorseAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch(aCommand)
+		{
+		case EEikCmdExit:
+			DoExit();
+			break;
+		}
+	};
+/**
+  
+  Auxiliary Function for Test Case ID TAppMorse-doTestStepL.\n
+  Close the app UI \n
+ 
+*/	
+void CTAppMorseAppUi::DoExit()
+	{
+	Exit();
+	};
+/**
+  
+  Auxiliary Function for Test Case ID TAppMorse-doTestStepL.\n
+  Call ConstructL() of CEikonEnv and initialize a pointer to CTAppMorseAppUi \n
+  Call ConstructL() of CTAppMorseAppUi and set the application's user interface object \n
+ 
+*/
+void CTAppMorse::ConstructAppL(CEikonEnv* aEikEnv)
+	{
+	INFO_PRINTF1(_L("CTAppMorse::ConstructAppL"));
+	aEikEnv->ConstructL();
+ 	CTAppMorseAppUi* appUi=new(ELeave) CTAppMorseAppUi(this);
+ 	appUi->ConstructL(this);
+	CleanupStack::PushL(appUi);
+ 	aEikEnv->SetAppUi(appUi);
+	CleanupStack::Pop();
+	}
+	
+
+CTAppMorse::~CTAppMorse()
+/**
+  Destructor
+ */
+	{
+	}
+
+CTAppMorse::CTAppMorse()
+/**
+  Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTAppMorse);
+	}
+/**
+   @SYMTestCaseID UIF-TAppMorse-doTestStepL
+  
+   @SYMPREQ
+  
+   @SYMTestCaseDesc  Simply launch the application and offer some key events.\n
+   The test is dependend on the TFepMorse FEP being installed. \n
+   
+   @SYMTestPriority High 
+  
+   @SYMTestStatus Implemented
+   
+   @SYMTestActions Provide an active environment for creating controls and utility functions \n
+   Launches the application using ExecuteD(). Simulate key events and offer them to the 
+   application
+  
+   @SYMTestExpectedResults The test case fails if the application crashed with an exception, due to FEP not being able to intercept the event codes. \n 
+   and the test passes if the application exits cleanly. 
+    
+ */
+TVerdict CTAppMorse::doTestStepL()
+	{
+	SetTestStepID(_L("UIF-TAppMorse-doTestStepL"));
+	INFO_PRINTF1(_L("Test Started"));
+	
+	CEikonEnv* EikEnv=new CEikonEnv;
+	if (EikEnv==NULL)
+		{	
+			SetTestStepResult(EFail);
+			return TestStepResult();
+		}
+	TRAPD(error, ConstructAppL(EikEnv));
+	if (error!=KErrNone)
+		{
+		delete EikEnv;
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+
+	EikEnv->ExecuteD();
+	
+	INFO_PRINTF1(_L("Test Finished"));
+	RecordTestResultL();
+	CloseTMSGraphicsStep();
+	return TestStepResult();
+	}
+	
+
+//	End of file TAppMorse.cpp
+