diff -r 000000000000 -r 2f259fa3e83a lafagnosticuifoundation/cone/tef/TCONE7STEP.CPP --- /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 +#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(); + } + +