--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/frontendprocessor/test/src/DEFOCUSING_EDWIN.CPP Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,341 @@
+// 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
+*/
+#include <e32std.h>
+#include <e32base.h>
+#include <coemain.h>
+#include <coeaui.h>
+#include <gulbordr.h>
+#include <techview/eikedwin.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikenv.h>
+#include <ecom/ecom.h>
+
+#include "DEFOCUSING_EDWIN.h"
+
+_LIT(KLitInitialText, "Enter some inline text (with TFEP1) here and leave it uncommitted when the timer expires: ");
+
+const TInt KNumberOfSeconds = 5;
+
+
+/*************************************************************
+ **
+ ** CTestTimer
+ **
+ *************************************************************/
+
+/**
+ Application exists as long as the timer .\n
+*/
+
+CTestTimer* CTestTimer::NewL(TInt aDurationInSeconds)
+ {
+ CTestTimer* timer=new(ELeave) CTestTimer(aDurationInSeconds);
+ CleanupStack::PushL(timer);
+ timer->ConstructL();
+ timer->QueueAndInfoPrint();
+
+ //CActiveScheduler::Start();
+ CleanupStack::Pop(timer);
+ return timer;
+ }
+
+
+CTestTimer::CTestTimer(TInt aDurationInSeconds)
+ :CTimer(EActivePriorityWsEvents+1),
+ iSecondsRemaining(aDurationInSeconds)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+/**
+ Format the timer message to be send to the appliation window.
+*/
+
+void CTestTimer::QueueAndInfoPrint()
+ {
+ After(iSecondsRemaining*1000000);
+ TBuf<100> message;
+ message.Format(_L("%d seconds remaining"), iSecondsRemaining);
+ User::InfoPrint(message);
+ }
+
+/**
+ Inform with a message ,the timer seconds remaining till its up.\n
+ Send event to windows group when timer time is up .\n
+*/
+void CTestTimer::RunL()
+ {
+ --iSecondsRemaining;
+ if (iSecondsRemaining>0)
+ {
+ QueueAndInfoPrint();
+ }
+ else
+ {
+ User::InfoPrint(_L("Time's up"));
+ iCompleted = ETrue;
+
+ CCoeEnv* env = CCoeEnv::Static();
+ TWsEvent theEvent;
+ theEvent.SetType(EEventUser + 1);
+
+ RWsSession ws;
+ TInt theRes = ws.Connect();
+
+ if(theRes == KErrNone)
+ {
+ RWindowGroup& winGroup = env->RootWin();
+ theEvent.SetType(EEventUser + 1);
+ theEvent.SetTimeNow();
+ TInt theId = winGroup.Identifier();
+ ws.SendEventToWindowGroup(theId, theEvent);
+ }
+ ws.Close();
+ }
+ }
+
+
+
+/*************************************************************
+ **
+ ** CDefocusingEdwinUi
+ **
+ *************************************************************/
+
+CDefocusingEdwinUi::CDefocusingEdwinUi(CTmsTestStep* aStep) :
+ CTestAppUi(aStep, KNullDesC)
+ {
+ }
+
+CDefocusingEdwinUi::~CDefocusingEdwinUi()
+ {
+ RemoveFromStack(iTextEditor);
+ delete iTextEditor;
+ delete iTestTimer;
+ }
+
+/**
+ Construct a new Editor window and set the containing window \n
+ Set cursor position in the document and the word wrap \n
+ Set the pointer capture and make the control ready to draw\n
+ Install the FEP and call the StartAutoTest()\n
+*/
+void CDefocusingEdwinUi::ConstructL()
+ {
+ CTestAppUi::ConstructL();
+ iTestTimer = CTestTimer::NewL(5);
+
+ iTextEditor=new(ELeave) CEikEdwin(TGulBorder(TGulBorder::EDeepSunkenWithOutline));
+ iTextEditor->ConstructL(CEikEdwin::EOwnsWindow, 20, 0, 3);
+ iTextEditor->SetContainerWindowL();
+ iTextEditor->SetExtent(TPoint(20, 20), iTextEditor->Size());
+ iTextEditor->SetTextL(&KLitInitialText);
+ iTextEditor->SetCursorPosL(0, EFalse); // a necessary function call as it creates the CTextView in the CEikEdwin - also it needs to be passed zero to work around a bug where if it's passed textEditor->TextLength() (to put the cursor at the end of the text) then all the text gets scrolled to the left a bit (i.e. the left centimeter or so is off-screen)
+ iTextEditor->SetWordWrapL(ETrue);
+ iTextEditor->SetPointerCapture();
+ AddToStackL(iTextEditor, ECoeStackPriorityDialog, ECoeStackFlagSharable);
+ iTextEditor->ActivateL();
+ iTextEditor->SetCursorPosL(iTextEditor->TextLength(), EFalse); // the cursor can now be put at the end of the text as the text has been laid out
+
+ iTmStart.HomeTime();
+
+ const TUid KUidTFep1 = { 0x102024D0 };
+ iCoeEnv->InstallFepL(KUidTFep1);
+
+ AutoTestManager().StartAutoTest();
+ }
+
+/**
+ @SYMTestCaseID UIF-FEPTEST-0001
+ @SYMPREQ 0000
+ @SYMTestCaseDesc Launch the application and offer events.
+ @SYMTestPriority High
+ @SYMTestStatus Implemented
+ @SYMTestActions Launch an application with the editor window. The application is made to exit, when a timer expires.
+ Load the FEP (TFEP1). Create character codes for text events. Offer the texts to the applciation for
+ the TFEP1 to intercept.
+ A succesful implementation ensures that the application exits without a crash.
+ Here the layout of the FEP UI is such that the Composition Window is integrated into the Target Control.
+ @SYMTestExpectedResults The test case fails if the app crashed with an exception and passes if the app exits cleanly
+ */
+void CDefocusingEdwinUi::RunTestStepL(TInt aStep)
+ {
+ User::After(TTimeIntervalMicroSeconds32(1));
+
+ TTimeIntervalSeconds theInterval;
+
+ TTime tm;
+ tm.HomeTime();
+ tm.SecondsFrom(iTmStart,theInterval);
+
+ TInt theInt = theInterval.Int();
+
+ if(iCurrentSecond < theInt)
+ {
+ if(KNumberOfSeconds-iCurrentSecond < 0)
+ {
+ iCoeEnv->InstallFepL(KNullUid);
+ AutoTestManager().FinishAllTestCases(CAutoTestManager::EPass);
+ return;
+ }
+ else
+ {
+ TBuf<100> message;
+ message.Format(_L("%d seconds remaining"), KNumberOfSeconds-iCurrentSecond);
+ User::InfoPrint(message);
+
+ iCurrentSecond = theInt;
+ }
+ }
+ TWsEvent theEvent;
+ TKeyEvent *theKey = theEvent.Key();
+ theKey->iScanCode = 0;
+ theKey->iModifiers= 0;
+ theKey->iRepeats=0;
+ theKey->iCode = 'A';
+
+ TInt nRes = aStep % 7;
+
+ if(nRes == 6)
+ {
+ theKey->iCode = EKeyEnter;
+ }
+ else
+ {
+ theKey->iCode += nRes;
+ }
+
+ INFO_PRINTF2(_L("Simulate Key Event with code %d"), theKey->iCode);
+ SendEventToWindowGroups(theEvent);
+ }
+
+/**
+ Handle the user defined events.\n
+ Handle the System events
+ Call made to the static implementation CEikAppUi::HandleSystemEventL().\n
+*/
+void CDefocusingEdwinUi::HandleApplicationSpecificEventL(TInt , const TWsEvent& aEvent)
+ {
+ if(aEvent.Type() == (EEventUser + 1))
+ {
+ Exit();
+ }
+ else
+ {
+ CEikAppUi::HandleSystemEventL(aEvent);
+ }
+ }
+
+/**
+ Handle the window events.\n
+ Create a window server session and connect the client\n
+ Set the event type and call the SendEventToWindowGroup().\n
+ Close the session on completion \n
+*/
+void CDefocusingEdwinUi::SendEventToWindowGroups(TWsEvent& aEvent)
+ {
+ RWsSession ws;
+ TInt theRes = ws.Connect();
+ TEST(theRes == KErrNone);
+
+ RWindowGroup& winGroup = iCoeEnv->RootWin();
+ TInt theId = winGroup.Identifier();
+
+ aEvent.SetType(EEventKeyDown);
+ aEvent.SetTimeNow();
+ ws.SendEventToWindowGroup(theId, aEvent);
+
+ aEvent.SetType(EEventKey);
+ aEvent.SetTimeNow();
+ ws.SendEventToWindowGroup(theId, aEvent);
+
+ aEvent.SetType(EEventKeyUp);
+ aEvent.SetTimeNow();
+ ws.SendEventToWindowGroup(theId, aEvent);
+
+ ws.Close();
+ }
+
+
+
+/*************************************************************
+ **
+ ** CTestDefocusingEdwinStep
+ **
+ *************************************************************/
+
+CTestDefocusingEdwinStep::CTestDefocusingEdwinStep()
+ {
+ SetTestStepName(KDefocusingEdwinStep);
+ }
+
+CTestDefocusingEdwinStep::~CTestDefocusingEdwinStep()
+ {
+ }
+
+/**
+ Call ConstructL() of CEikonEnv and initialize a pointer to CDefocusingEdwinUi.
+ Set the application's user interface object.
+ Call ConstructL() of CDefocusingEdwinUi
+ */
+void CTestDefocusingEdwinStep::ConstructAppL(CEikonEnv* aCoe)
+ { // runs inside a TRAP harness
+ aCoe->ConstructL();
+ CTestAppUi* appUi= new (ELeave) CDefocusingEdwinUi(this);
+ aCoe->SetAppUi(appUi);
+ appUi->ConstructL();
+ }
+
+/**
+ Launches the application using ExecuteD(). \n
+ */
+TVerdict CTestDefocusingEdwinStep::doTestStepL()
+ {
+ PreallocateHALBuffer();
+
+ INFO_PRINTF1(_L("TestDefocusingEdwin started..."));
+
+ __UHEAP_MARK;
+
+ SetTestStepID(_L("UIF-FEPTEST-0001"));
+
+ CEikonEnv* coe=new(ELeave) CEikonEnv;
+ TRAPD(err,ConstructAppL(coe));
+
+ if (!err)
+ coe->ExecuteD();
+ else
+ {
+ delete coe;
+ SetTestStepResult(EFail);
+ }
+
+ RecordTestResultL();
+ CloseTMSGraphicsStep();
+
+ __UHEAP_MARKEND;
+
+ INFO_PRINTF1(_L("...TestDefocusingEdwin finished!"));
+
+ return TestStepResult();
+ }
+