commonuisupport/uikon/test/tlibs/taddlib/TADDLIB.CPP
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonuisupport/uikon/test/tlibs/taddlib/TADDLIB.CPP	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,489 @@
+// 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:
+// Test adds a control factory function and resource file to the application.\n  
+// 
+//
+
+/**
+ @file
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <basched.h>
+#include <eikenv.h>
+#include <eikappui.h>
+#include <techview/eikon.hrh>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <techview/eiklabel.h>
+#include <eikfctry.h>
+#include <coecntrl.h>
+#include <barsread.h>
+#include "TADDLIB.HRH"
+#include <external.rsg>
+#include <techview/eiktbar.h>
+#include <techview/eikmenub.h>
+#include <eikspane.h>
+#include <ecom/ecom.h>
+
+
+_LIT(KTAddLibResourceFilePath, "");
+
+#include "Taddlib.h"
+
+/**
+   Auxiliary function for refreshing Label
+  
+   This method is an override from CEikLabel. It draws the label control.
+   
+ */ 
+void CTestLabel::Draw(const TRect& aRect) const
+	{
+	CWindowGc& gc=SystemGc();
+	gc.SetPenColor(KRgbBlack);
+	CEikLabel::Draw(aRect);
+	}
+
+
+CTestContainer::CTestContainer(CTestAppUi* aAppUi)
+	: iResourceFile(_L("z:\\system\\test\\taddlib\\external.rsc")),
+	iAppUi(aAppUi)
+/**
+   Constructor
+ */
+	{
+	}
+
+void CTestContainer::ConstructL(const TRect& aRect)
+    {
+    CreateWindowL();
+    Window().SetShadowDisabled(ETrue);
+	Window().SetBackgroundColor(KRgbWhite);
+ 	SetRect(aRect);
+
+	ActivateL();
+    }
+
+/**
+   @SYMTestCaseID UIF-AddLib-AddLibraryL
+  
+   @SYMPREQ
+  
+   @SYMTestCaseDesc Tests CEikonEnv::AddLibraryL() method.
+  
+   @SYMTestPriority High
+  
+   @SYMTestStatus Implemented
+   
+   @SYMTestActions The test case tests whether the specified control factory
+   function and resource file are added to their respective lists by
+   CEikonEnv::AddLibraryL(). The method verifies this by checking whether
+   CEikonEnv::AddLibraryL() returns a non-zero value for the resource file
+   offset indicating successful addition.\n
+   API Calls:\n	
+   TInt CEikonEnv::AddLibraryL(TCreateByTypeFunction aControlFactory, TFileName* aResourceFile)\n
+  
+   @SYMTestExpectedResults On successful addition of the specified control
+   factory function and resource file, CEikonEnv::AddLibraryL() should
+   return a non-zero value.
+   
+ */
+void CTestContainer::AddLibraryL()
+    {
+	if(iResFileOffset)
+		{
+		iEikonEnv->InfoMsg(_L("Library already added!"));
+		return;
+		}
+	iAppUi->INFO_PRINTF1(_L("ADD LOCAL CONTROL FACTORY AND RESOURCE FILE TO THE EIKON ENVIRONMENT"));
+	iResFileOffset = iEikonEnv->AddLibraryL(CreateByTypeL, &iResourceFile);
+	iAppUi->TEST(iResFileOffset >= 0);
+	iEikonEnv->InfoMsg(_L("Library added."));
+    }
+    
+    
+/**
+   @SYMTestCaseID UIF-AddLib_RemoveLibrary
+  
+   @SYMPREQ
+  
+   @SYMTestCaseDesc Tests CEikonEnv::RemoveLibrary() method.
+  
+   @SYMTestPriority High
+  
+   @SYMTestStatus Implemented
+   
+   @SYMTestActions The test case tests whether the specified control factory
+   function and the resource file identified by the resource file offset
+   specified as parameters are removed from their respective lists by
+   CEikonEnv::RemoveLibrary().\n
+   API Calls:\n	
+   void CEikonEnv::RemoveLibrary(TCreateByTypeFunction aControlFactory, TInt aResourceFileOffset)\n
+  
+   @SYMTestExpectedResults The test removes the control factory function
+   and the resource file which was previously added.
+   
+ */
+void CTestContainer::RemoveLibrary()
+    {
+	if(!iResFileOffset)
+		{
+		iEikonEnv->InfoMsg(_L("No library to remove."));
+		return;
+		}
+	iAppUi->INFO_PRINTF1(_L("FREE UP THE CONTROL FACTORY AND RESOURCE FILE MEMORY FROM EIKENV"));
+	iEikonEnv->RemoveLibrary(CreateByTypeL, iResFileOffset);
+	delete iLabel;
+	iLabel = NULL;
+	iResFileOffset = 0;
+	iEikonEnv->InfoMsg(_L("Library removed."));
+	DrawNow();
+    }
+
+/**
+   Auxiliary function for TestCaseID T-AddLib-RunL
+  
+   This method is used by CTestContainer::RunL() to create the applications
+   control. This method calls the control factory function
+   CTestContainer::CreateByTypeL() to create the control. The method then uses
+   Cone to construct the control by reading information from the resource
+   file that was added.
+   
+ */
+TBool CTestContainer::CreateControlL()
+	{
+	TBool ret = EFalse;
+	if(!iLabel)
+		{
+		iAppUi->INFO_PRINTF1(_L("ASK THE EIKON CONTROL FACTORY TO CREATE THIS APPLICATION'S CONTROL\n"));
+		SEikControlInfo controlInfo = EikControlFactory::CreateByTypeL(ECtTestLabel);
+		if(controlInfo.iControl)
+			{
+			iAppUi->INFO_PRINTF1(_L("Control successfully created\n"));
+			iLabel = STATIC_CAST(CTestLabel*, controlInfo.iControl);
+			iAppUi -> TEST(iLabel != NULL);
+
+			iLabel->SetContainerWindowL(*this);
+			iLabel->SetControlContext(iLabel);
+			
+			iAppUi->INFO_PRINTF1(_L("ASK CONE TO CONSTRUCT THIS APPLICATION'S CONTROL FROM THE LOCAL RESOURCE FILE\n"));
+
+			TResourceReader reader;
+			iCoeEnv->CreateResourceReaderLC(reader,R_TESTADDLIB_LABEL);
+			iLabel->ConstructFromResourceL(reader);
+			CleanupStack::PopAndDestroy();
+			iLabel->SetRect(TRect(TPoint(260,110),iLabel->MinimumSize()));
+			iLabel->ActivateL();
+			ret = ETrue;
+			}
+		}
+	// Control already created
+	else ret = ETrue;
+	
+	return ret;
+	}
+
+/**
+   @SYMTestCaseID UIF-AddLib-RunL
+  
+   @SYMPREQ
+  
+   @SYMTestCaseDesc Tests Creation of Applications Control.
+  
+   @SYMTestPriority High
+  
+   @SYMTestStatus Implemented
+   
+   @SYMTestActions The test initiates creation of applications control and
+   draws it on the container. \n
+   
+   @SYMTestExpectedResults The test should create controls by reading
+   information from the resource file and should display them.
+  
+ */
+void CTestContainer::RunL()
+    {
+	if(CreateControlL())
+		DrawNow();
+	else iEikonEnv->InfoMsg(_L("Must add library first!"));
+    }
+
+
+CTestContainer::~CTestContainer()
+/**
+   Destructor
+ */
+    {
+	delete iLabel;
+    }
+
+/**
+   Auxiliary function for TestCaseID T-AddLib-RunL
+  
+   This method is an override from CCoeControl. It returns the number of
+   controls contained in a compound control.
+   
+ */
+TInt CTestContainer::CountComponentControls() const
+    {
+	if(iLabel)
+		return 1;
+	else
+		return 0;
+    }
+
+/**
+   Auxiliary function for TestCaseID T-AddLib-RunL
+  
+   This method is an override from CCoeControl. It returns the label component
+   from the container control. 
+   
+ */  
+CCoeControl* CTestContainer::ComponentControl(TInt aIndex) const
+    {			 
+	switch (aIndex)
+		{
+		case 0:
+		default:
+			return iLabel;
+		}
+	}
+
+/**
+   Auxiliary function for refreshing Container
+  
+   This method is an override from CCoeControl. It draws the container control.
+   
+ */ 
+void CTestContainer::Draw(const TRect& aRect) const
+    {
+   	CWindowGc& gc=SystemGc();
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	gc.SetBrushColor(KRgbGray);
+	gc.SetPenStyle(CGraphicsContext::ESolidPen);
+	gc.SetPenColor(KRgbWhite);
+	gc.DrawRect(aRect);
+    }
+
+/**
+   Auxiliary function for TestCaseID T-AddLib-RunL
+  
+   This method is the control factory function for this Application.
+   It is called by CTestContainer::CreateControlL() to create label control.
+   The method returns the structure SEikControlInfo which contains the
+   control information for the control.
+   
+ */  
+SEikControlInfo CTestContainer::CreateByTypeL(TInt aControlType)
+	{	
+	SEikControlInfo controlInfo;
+	controlInfo.iControl = NULL;
+	controlInfo.iTrailerTextId = 0;
+	controlInfo.iFlags = 0;
+
+    switch (aControlType)
+        {
+    case ECtTestLabel:
+		controlInfo.iControl = new(ELeave) CTestLabel;
+		break;
+		}
+	return controlInfo;
+	}
+
+
+
+CTestAddLibraryAppUi::CTestAddLibraryAppUi(CTmsTestStep*		aStep, const TDesC& aRes) :
+	CTestAppUi(	aStep, aRes)
+/**
+   Constructor
+ */
+	{
+	}
+
+
+CTestAddLibraryAppUi::~CTestAddLibraryAppUi()
+/**
+   Destructor
+ */
+	{
+	RemoveFromStack(iContainer);
+	delete iContainer;
+	
+	}
+
+
+/**
+   Auxiliary function for all Test Cases
+   
+   The method creates a container and sets active object with lowest
+   priority for running test in auto mode.
+  
+ */
+void CTestAddLibraryAppUi::ConstructL()
+	{
+	CTestAppUi::ConstructL();
+	
+	TRect boundingRect=ClientRect(); // make toolband stretch to the screen width by default
+    iContainer=new(ELeave) CTestContainer(this);
+	
+	ReduceRect(boundingRect);
+	iContainer->ConstructL(boundingRect);
+    AddToStackL(iContainer);
+
+	AutoTestManager().StartAutoTest();
+	}
+
+
+/**
+   Auxiliary function for all Test Cases
+  
+   The method is an override from CTestAppUi. The method initiates all tests
+   to be performed by calling CTestAddLibraryAppUi::HandleCommandL().
+   
+ */
+void CTestAddLibraryAppUi::RunTestStepL(TInt aStep)
+	{
+	TInt theProgramState = 0;
+
+//#ifdef FORCE_AUTO
+	User::After(TTimeIntervalMicroSeconds32(1000000));
+//#endif	
+	switch (aStep)
+		{
+	case 1:
+		INFO_PRINTF1(_L("Adding library\n"));
+		SetTestStepID(_L("UIF-AddLib-AddLibraryL"));
+		theProgramState = ECmdAddLibrary;
+		RecordTestResultL();
+		break;
+	case 2:
+		INFO_PRINTF1(_L("Run library\n"));
+		SetTestStepID(_L("UIF-AddLib-RunL"));
+		theProgramState = ECmdRun;
+		RecordTestResultL();
+		break;
+	case 3:
+		INFO_PRINTF1(_L("Removing library\n"));
+		SetTestStepID(_L("UIF-AddLib_RemoveLibrary"));
+		theProgramState = ECmdRemoveLibrary;
+		RecordTestResultL();
+		CloseTMSGraphicsStep();
+		break;
+	case 5:
+		theProgramState = EEikCmdExit;
+		break;
+		}
+	HandleCommandL(theProgramState);							
+	}
+
+
+
+/**
+   Auxiliary function for all Test Cases
+  
+   This method is called by CTestAddLibraryAppUi::RunTestStepL() to initiate
+   the tests.
+   
+ */
+void CTestAddLibraryAppUi::HandleCommandL(TInt aCommand)
+	{
+
+	switch (aCommand)
+		{
+	case ECmdAddLibrary:
+		if(iContainer)
+			{
+			iContainer->AddLibraryL();
+			}
+		break;
+	case ECmdRemoveLibrary:
+		if(iContainer)
+			{
+			iContainer->RemoveLibrary();
+			}
+		break;
+	case ECmdRun:
+		if(iContainer)
+			{
+			iContainer->RunL();
+			}
+		break;
+	case EEikCmdExit:
+		if(iContainer)
+			{
+			iContainer->RemoveLibrary();
+			iCoeEnv->Flush();
+			}
+		Exit();
+		break;
+		}
+	}
+
+
+//----------
+
+CTestAddLibraryStep::CTestAddLibraryStep()
+/**
+   Constructor
+ */
+	{
+	SetTestStepName(KTestAddLibraryStep);
+	}
+
+CTestAddLibraryStep::~CTestAddLibraryStep()
+/**
+   Destructor
+ */
+	{
+	}
+
+/**
+   Auxiliary function for all Test Cases
+  
+   The method creates & sets the application's user interface object.
+   
+ */
+void CTestAddLibraryStep::ConstructAppL(CEikonEnv* aCoe)
+    { // runs inside a TRAP harness
+	aCoe->ConstructL();
+
+	CTestAppUi* appUi= new (ELeave) CTestAddLibraryAppUi(this,KTAddLibResourceFilePath);
+    aCoe->SetAppUi(appUi);
+    appUi->ConstructL();
+    }
+
+/**
+   Auxiliary function for all Test Cases
+  
+   The method creates & sets the application's user interface object to
+   launch the application which will initiate the tests.
+   
+ */
+TVerdict CTestAddLibraryStep::doTestStepL() // main function called by E32
+	{
+	PreallocateHALBuffer();
+	__UHEAP_MARK;
+
+	CEikonEnv* coe=new CEikonEnv;
+	TRAPD(err,ConstructAppL(coe));
+
+	if (!err)
+		coe->ExecuteD();
+
+		REComSession::FinalClose();	
+		__UHEAP_MARKEND;
+
+	return TestStepResult();
+	}
+