lafagnosticuifoundation/cone/tef/TCONE7STEP.CPP
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lafagnosticuifoundation/cone/tef/TCONE7STEP.CPP	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,542 @@
+// 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:
+//
+
+/**
+ @file
+ @internalComponent - Internal Symbian test code 
+*/
+
+#include <apgcli.h>
+#include "TCone7Step.h"
+#include "twindowposition.h"
+
+CCone7TestAppUi::CCone7TestAppUi(CTmsTestStep* aStep) :
+CTestCoeAppUi(aStep)
+{}
+
+CCone7TestAppUi::~CCone7TestAppUi()
+	{
+	}
+
+
+void CCone7TestAppUi::ConstructL()
+	{
+	INFO_PRINTF1(_L("App UI ConstructL"));
+	
+	CTestCoeAppUi::ConstructL();
+	AutoTestManager().StartAutoTest();
+	}
+
+	
+TKeyResponse CCone7TestAppUi::HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+	{
+	TKeyResponse ret=EKeyWasNotConsumed;
+    	if (aType==EEventKey && aKeyEvent.iCode==CTRL('e'))
+		{
+		CBaActiveScheduler::Exit();
+		ret=EKeyWasConsumed;
+		}
+	return ret;
+	}
+
+
+/**
+Ensure the text-drawer is propagated from container to component control
+test case PREQ641.1
+*/
+TBool CCone7TestAppUi::TestTextDrawer_1L()
+	{
+	CCtlContainer641* testContainer = new (ELeave)CCtlContainer641();
+	CleanupStack::PushL(testContainer);
+	testContainer->ConstructL( _L("Container") );
+	testContainer->SetExtent( TPoint(20,20),TSize(600,200) );
+	testContainer->ActivateL();
+	testContainer->DrawNow();
+	
+	const TInt err = testContainer->iContainee->TestContainerTextDrawer();
+	User::After( TTimeIntervalMicroSeconds32(2000000) );
+	
+	CleanupStack::PopAndDestroy(testContainer);
+	return err;
+	}
+
+
+
+/**
+Ensure the text-drawer is propagated from the super-container, 
+via the sub-container to the component control	
+test case PREQ641.2
+*/
+TBool CCone7TestAppUi::TestTextDrawer_2L()
+	{
+	CCtlSuperContainer641* testSuperContainer = new (ELeave)CCtlSuperContainer641;
+	CleanupStack::PushL(testSuperContainer);
+	testSuperContainer->ConstructL( _L("SuperContainer") );
+	testSuperContainer->SetExtent( TPoint(20,20),TSize(600,200) );			
+	testSuperContainer->ActivateL();
+	testSuperContainer->DrawNow();
+	
+	const TInt err = testSuperContainer->iSubContainer->iContainee->TestContainerTextDrawer();
+	User::After( TTimeIntervalMicroSeconds32(2000000) );
+	
+	CleanupStack::PopAndDestroy(testSuperContainer);
+	return err;
+	}
+
+
+class MyDummyMopObject
+	{
+public:
+	enum { ETypeId = 0x1234 };
+	MyDummyMopObject() {}
+	~MyDummyMopObject() {}
+public:
+	TInt iDummy;
+	};
+
+/**  Ensure the text-drawer the MopSupplyObject function is working properly. */
+
+TBool CCone7TestAppUi::TestTextDrawer_3L()
+	{
+	CCoePlainTextDrawer* drawer = CCoePlainTextDrawer::New(KRgbRed);
+	if (!drawer)
+		return EFalse;
+		
+	XCoeTextDrawer xdrawer(*drawer);
+	
+	const CCoePlainTextDrawer* drawer2 = xdrawer->MopGetObject(drawer2);
+	if (!drawer2 || (drawer2->TextColor() != KRgbRed))
+		return EFalse;
+		
+	const MyDummyMopObject* dummy3 = xdrawer->MopGetObject(dummy3);
+	if (dummy3)
+		return EFalse;
+	
+	return ETrue;
+	}
+
+/**
+This test will verify that left and right text alignment is swapped when the
+application language is set to a RightToLeft script, unless the alignment is
+set to be absolute. This will be done in 9 steps, drawing a four line text
+clockwise from topLeft, via topCenter, topRight, bottomRight, bottomCenter, 
+bottomLeft, topLeft, topCenter, to topRight.
+
+Visual verification is required.
+*/
+TBool CCone7TestAppUi::TestTextDrawer_4L()
+	{
+	CCtlTestTextDrawer* testTextDrawer = new(ELeave) CCtlTestTextDrawer();
+	CleanupStack::PushL(testTextDrawer);
+	testTextDrawer->ConstructL();
+	testTextDrawer->SetExtent(TPoint(20,20),TSize(600,200));
+	testTextDrawer->ActivateL();
+	testTextDrawer->DrawNow();
+	
+	const TInt noOfLines = TCoeTextTypeAdaptor(KMultipleLineText).NumberOfLines();
+	TEST(noOfLines == 4);
+	INFO_PRINTF2(_L("Number of lines in the text separated by new line character are : %d"), noOfLines);
+
+	TOpenFontFaceAttrib openFontFaceAttrib;
+	((CFbsFont&)(testTextDrawer->FontUsed())).GetFaceAttrib(openFontFaceAttrib);
+	TBuf<25> buf(openFontFaceAttrib.FullName());
+	INFO_PRINTF2(_L("CCtlTestTextDrawer : Typeface being used is %S"), &buf);
+	
+	CWsScreenDevice* screenDevice = iCoeEnv->ScreenDevice();
+	TSize sizeInPixels = screenDevice->SizeInPixels();
+	TSize sizeInTwips = screenDevice->SizeInTwips();
+	TInt xPixel = sizeInPixels.iWidth;
+	TInt xTwips = sizeInTwips.iWidth;
+	TInt yPixel = sizeInPixels.iHeight;
+	TInt yTwips = sizeInTwips.iHeight;
+	
+	TInt KLineWidthsInPixels[4];
+	
+	//Line width in pixels on H4
+	if(xPixel == 320 && xTwips == 4463 && yPixel == 240 && yTwips == 3041)
+		{
+		KLineWidthsInPixels[0] = 80;
+		KLineWidthsInPixels[1] = 51;
+		KLineWidthsInPixels[2] = 110;
+		KLineWidthsInPixels[3] = 100;
+		}
+	//Line width in pixels on H6 QVGA
+	else if(xPixel == 240 && xTwips == 3685 && yPixel == 320 && yTwips ==5056)
+		{
+		KLineWidthsInPixels[0] = 64;
+		KLineWidthsInPixels[1] = 41;
+		KLineWidthsInPixels[2] = 88;
+		KLineWidthsInPixels[3] = 80;
+		}
+	//Line width in pixels on H6 VGA
+	else if(xPixel == 480 && xTwips == 3685 && yPixel == 640 && yTwips ==5056)
+		{
+		KLineWidthsInPixels[0] = 128;
+		KLineWidthsInPixels[1] = 81;
+		KLineWidthsInPixels[2] = 176;
+		KLineWidthsInPixels[3] = 160;
+		}
+	//Line width in pixels on emulator
+	else if(xPixel == 640 && xTwips == 7620 && yPixel == 240 && yTwips == 2858)
+		{
+		KLineWidthsInPixels[0] = 80;
+		KLineWidthsInPixels[1] = 51;
+		KLineWidthsInPixels[2] = 110;
+		KLineWidthsInPixels[3] = 100;
+		}
+	//Line width in pixels on NaviEngine
+	else if(xPixel == 800 && xTwips == 9520 && yPixel == 480 && yTwips == 5712)
+		{
+		KLineWidthsInPixels[0] = 80;
+		KLineWidthsInPixels[1] = 51;
+		KLineWidthsInPixels[2] = 110;
+		KLineWidthsInPixels[3] = 100;
+		}
+	//Line width in pixels on NaviEngine without integrated screen
+	else if(xPixel == 640 && xTwips == 7616 && yPixel == 480 && yTwips == 5712)
+		{
+		KLineWidthsInPixels[0] = 80;
+		KLineWidthsInPixels[1] = 51;
+		KLineWidthsInPixels[2] = 110;
+		KLineWidthsInPixels[3] = 100;
+		}
+	else
+		{
+		INFO_PRINTF1(_L("This might be a new hardware, need to calculate line widths in pixels again."));
+		INFO_PRINTF5(_L("xPixel=%d, xTwips=%d, yPixel=%d, yTwips=%d"),xPixel,xTwips,yPixel,yTwips);
+		CleanupStack::PopAndDestroy(testTextDrawer);
+		return EFalse;
+		}
+    
+	TInt widthInPixels = 0;
+	for (TInt line = 0; line < noOfLines; line++)
+		{
+		testTextDrawer->WidthOfText(line, widthInPixels);
+		TInt testWidth = KLineWidthsInPixels[line];
+		// Allow a tolerance of 1 pixel difference less than KLineWidthsInPixels
+		TEST(Rng(testWidth-1, widthInPixels, testWidth));
+		INFO_PRINTF3(_L("Width for line %d in pixels : %d"), line, widthInPixels);
+		}
+		
+	for(TInt testIndex = 0; testIndex <= 8; testIndex++)
+		{
+		testTextDrawer->TestTextDrawer(testIndex, ETrue);
+		User::After( TTimeIntervalMicroSeconds32(1000000) );
+		}
+
+	CleanupStack::PopAndDestroy(testTextDrawer);		
+	return ETrue;
+	}
+
+/**
+This text case will verify that vertical text drawing of XCoeTextDrawer class is correct and 
+consistent with horizontal drawing of the same alignment. Clip area will also be set to check that 
+drawing will not happen outside this area. The text will consist of a few lines.
+
+defect INC122592  
+Visual verification is required.
+*/
+TBool CCone7TestAppUi::TestTextDrawer_5L()
+	{
+	CCtlTestTextDrawer* testTextDrawer = new(ELeave) CCtlTestTextDrawer();
+	CleanupStack::PushL(testTextDrawer);
+	testTextDrawer->ConstructL();
+	testTextDrawer->SetExtent(TPoint(20,20),TSize(600,200));
+	testTextDrawer->ActivateL();
+	testTextDrawer->DrawNow();
+	
+	const TInt noOfLines = TCoeTextTypeAdaptor(KMultipleLineText1).NumberOfLines();
+
+	TOpenFontFaceAttrib openFontFaceAttrib;
+	((CFbsFont&)(testTextDrawer->FontUsed())).GetFaceAttrib(openFontFaceAttrib);
+	TBuf<25> buf(openFontFaceAttrib.FullName());
+	INFO_PRINTF2(_L("CCtlTestTextDrawer : Typeface being used is %S"), &buf);
+	
+	//testing with clip area
+	TRect clipRect = testTextDrawer->Rect();
+	clipRect.Shrink(40, 40);
+	TRgb nonClippedText = KRgbRed;
+	
+	//drawing vertical text, up direction
+	for(TInt testIndex = 0; testIndex <= 8; testIndex++)
+		{
+		testTextDrawer->TestTextDrawer(testIndex, ETrue, NULL, &nonClippedText);
+		testTextDrawer->TestTextDrawer(testIndex, ETrue, &clipRect, NULL, EFalse);
+		User::After( TTimeIntervalMicroSeconds32(1000000) );
+
+		testTextDrawer->TestTextDrawer(testIndex, EFalse, NULL, &nonClippedText);
+		testTextDrawer->TestTextDrawer(testIndex, EFalse, &clipRect, NULL, EFalse);
+		User::After( TTimeIntervalMicroSeconds32(1000000) );
+		}
+
+	//drawing vertical text, up direction
+	for(TInt testIndex = 0; testIndex <= 8; testIndex++)
+		{
+		testTextDrawer->TestTextDrawer(testIndex, ETrue, NULL, &nonClippedText);
+		testTextDrawer->TestTextDrawer(testIndex, ETrue, &clipRect, NULL, EFalse);
+		User::After( TTimeIntervalMicroSeconds32(1000000) );
+
+		testTextDrawer->TestTextDrawer(testIndex, EFalse, NULL,     &nonClippedText, ETrue, EFalse);
+		testTextDrawer->TestTextDrawer(testIndex, EFalse, &clipRect, NULL,         EFalse, EFalse);
+		User::After( TTimeIntervalMicroSeconds32(1000000) );
+		}
+	
+	CleanupStack::PopAndDestroy(testTextDrawer);		
+	return ETrue;
+	}
+
+/**
+   @SYMTestCaseID UIF-TCone7Step-TestWindowPositionL
+  
+   @SYMDEF PDEF109812: Draw optimization assumes children's position are relative to parent's 
+  
+   @SYMTestCaseDesc Launches the twindowposition application.
+	The application test for position of the non window owning control being drawn.
+	
+   @SYMTestPriority High
+  
+   @SYMTestStatus Implemented
+   
+   @SYMTestActions : Launches an test application as follows.
+	Instantiates a CApaCommandLine object. Creates the application KAppFileName using RProcess object
+	and sets the process environment. Resumes the process and tests for application's exit reason. 
+	The test application draw the controls such that when the child has a parent window and is not 
+	relative to the the parent control's window.
+	  
+   @SYMTestExpectedResults The test application should be started without any error. 
+	The test application exit with KErrNone if the position of the child window being drawn matches 
+	with co-ordinate space of the parent control. Otherwise it exit with KErrWindowPosDoesNotMatch.
+
+   @SYMTestType : CIT 
+ */
+TBool CCone7TestAppUi::TestWindowPositionL()
+	{
+	_LIT(KAppFileName,"z:\\sys\\bin\\twindowposition.exe");
+	CApaCommandLine* cmdLine = CApaCommandLine::NewLC();	
+	RProcess windowPos;
+	TInt ret = windowPos.Create(KAppFileName,KNullDesC);
+	TEST(ret == KErrNone);
+	User::LeaveIfError(ret);
+	CleanupClosePushL(windowPos);
+	INFO_PRINTF1(_L("Create twindowposition process."));
+	
+	//attach commandline to twindowposition process
+	TRAP(ret,cmdLine->SetProcessEnvironmentL(windowPos));
+	TEST(ret == KErrNone);
+	windowPos.Resume();
+	//Time for the twindowposition process to launch itself
+	User::After(3000000);
+	TEST(windowPos.ExitReason() != KErrWindowPosDoesNotMatch);
+	CleanupStack::PopAndDestroy(&windowPos);
+	CleanupStack::PopAndDestroy(cmdLine);
+	return ETrue;
+	}
+
+
+/**
+   @SYMTestCaseID UIF-TCone7Step-TestExtentNotSetL
+  
+   @SYMDEF DEF123521 - Fix for PDEF116704 has been removed 
+  
+   @SYMTestCaseDesc Tests fix for PDEF116704 has not regressed.
+	
+   @SYMTestPriority High
+  
+   @SYMTestStatus Implemented
+   
+   @SYMTestActions : Creates a CCoeControl and a RWindow. Sets the RWindow as the container
+    window for the CCoeControl.
+	  
+   @SYMTestExpectedResults The RWindow's position and size should not change.
+
+   @SYMTestType : CIT 
+ */
+TBool CCone7TestAppUi::TestExtentNotSetL()
+	{
+	
+	// Create a window
+	RWindow window(iCoeEnv->WsSession());
+	TEST(window.Construct((RWindowTreeNode&)iCoeEnv->RootWin(), TUint32(this))==KErrNone);
+	
+	// Create a control
+	CCoeControl* ctrl = new (ELeave) CCoeControl;
+	CleanupStack::PushL(ctrl);
+	ctrl->SetExtent(TPoint(20,20), TSize(40,40));
+
+	// Get extent of window
+	TPoint position1 = window.Position();
+	TSize size1 = window.Size();
+
+	// Set control's container window
+	ctrl->SetContainerWindowL(window);
+
+	// Check extent not changed
+	TPoint position2 = window.Position();
+	TSize size2 = window.Size();
+
+	TEST((size1==size2)&&(position1==position2)); 
+
+	// Cleanup
+
+	CleanupStack::PopAndDestroy(ctrl);
+	window.Close();
+
+	return ETrue;
+	}
+
+
+/**
+   @SYMTestCaseID UIF-TCone7Step-TestBackedUpExtentNotSetL
+  
+   @SYMDEF DEF123521 - Fix for PDEF116704 has been removed 
+  
+   @SYMTestCaseDesc Tests fix for PDEF116704 has not regressed.
+	
+   @SYMTestPriority High
+  
+   @SYMTestStatus Implemented
+   
+   @SYMTestActions : Creates a CCoeControl and a RBackedUpWindow. Sets the RBackupWindow as the container
+    window for the CCoeControl.
+	  
+   @SYMTestExpectedResults The RBackedUpWindow's position and size should not change.
+
+   @SYMTestType : CIT 
+ */
+TBool CCone7TestAppUi::TestBackedUpExtentNotSetL()
+	{
+	
+	// Create a window
+	RBackedUpWindow window(iCoeEnv->WsSession());
+	TEST(window.Construct((RWindowTreeNode&)iCoeEnv->RootWin(), EGray4, TUint32(this))==KErrNone);
+	
+	// Create a control
+	CCoeControl* ctrl = new (ELeave) CCoeControl;
+	CleanupStack::PushL(ctrl);
+	ctrl->SetExtent(TPoint(20,20), TSize(40,40));
+
+	// Get extent of window
+	TPoint position1 = window.Position();
+	TSize size1 = window.Size();
+
+	// Set control's container window
+	ctrl->SetContainerWindowL(window);
+
+	// Check extent not changed
+	TPoint position2 = window.Position();
+	TSize size2 = window.Size();
+
+	TEST((size1==size2)&&(position1==position2)); 
+
+	// Cleanup
+	CleanupStack::PopAndDestroy(ctrl);
+	window.Close();
+
+	return ETrue;
+	} 
+
+void CCone7TestAppUi::RunTestStepL(TInt aStepNum)
+	{
+	switch(aStepNum)
+		{
+		case 0 :
+		case 1 :
+			TEST(TestTextDrawer_1L());
+			break;
+		case 2 :
+			TEST(TestTextDrawer_2L());	
+			break;
+		case 3 :
+			TEST(TestTextDrawer_3L());
+			break;		
+		case 4:
+			TEST(TestTextDrawer_4L());
+			break;
+		case 5:
+			TEST(TestTextDrawer_5L());
+			break;
+		case 6:
+			SetTestStepID(_L("UIF-TCone7Step-TestWindowPositionL"));
+			TEST(TestWindowPositionL());
+			RecordTestResultL();
+			break;
+		case 7:
+			SetTestStepID(_L("UIF-TCone7Step-TestExtentNotSetL"));
+			TEST(TestExtentNotSetL());
+			RecordTestResultL();
+			break;
+		case 8:
+			SetTestStepID(_L("UIF-TCone7Step-TestBackedUpExtentNotSetL"));
+			TEST(TestBackedUpExtentNotSetL());
+			RecordTestResultL();
+			CloseTMSGraphicsStep();
+			break;
+		default:
+			AutoTestManager().FinishAllTestCases(CAutoTestManager::EPass);
+			break;
+		}
+	}
+
+
+
+//----------
+void CTCone7Step::ConstructAppL(CCoeEnv* aCoe)
+	{ // runs inside a TRAP harness
+	aCoe->ConstructL();
+	CCone7TestAppUi* appUi= new (ELeave) CCone7TestAppUi(this);
+	aCoe->SetAppUi(appUi);
+	appUi->ConstructL();
+	}
+
+CTCone7Step::CTCone7Step()
+	{
+	SetTestStepName(KTCone7Step);
+	}
+
+CTCone7Step::~CTCone7Step()
+	{}
+
+
+TVerdict CTCone7Step::doTestStepL() // main function called by E32
+	{
+	INFO_PRINTF1(_L("Test 7 Started"));
+	
+	PreallocateHALBuffer();
+
+	__UHEAP_MARK;
+
+	CCoeEnv* coe=new(ELeave) CCoeEnv;
+
+	TRAPD(err,ConstructAppL(coe));
+
+	if (!err)
+		{
+		coe->ExecuteD();
+		}
+	else
+		{
+		SetTestStepResult(EFail);
+		delete coe;
+		}
+
+	REComSession::FinalClose();	
+
+	__UHEAP_MARKEND;
+
+	INFO_PRINTF1(_L("Test Finished"));
+	return TestStepResult();
+	}
+
+