Applied patch 1, to provide a syborg specific minigui oby file.
Need to compare this with the "stripped" version currently in the tree.
This supplied version applies for Nokia builds, but need to repeat the
test for SF builds to see if pruning is needed, or if the file needs to
be device-specific.
// Copyright (c) 1996-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:
// Converted from TMan test code (TMPNTKEY.CPP) May 2001
// Test Pointer move/drag buffer
//
//
/**
@file
@test
@internalComponent - Internal Symbian test code
*/
#include "TPNTKEY.H"
#define LOGGING on //Uncomment this line to get more logging
TInt CTPntKeyWindow::iTestScanCodes[ENumPntKeyTests]={'A','B',0,'C',EStdKeyEnter,'Y'};
TUint CTPntKeyWindow::iTestCodes[ENumPntKeyTests]={'a','B',0,'c',EKeyEnter,'y'};
TUint CTPntKeyWindow::iTestModifiers[ENumPntKeyTests]={0,EModifierShift,0,0,0,0};
CTPntKeyWindow::CTPntKeyWindow(CTPntKey *aTest) : iTest(aTest)
{}
CTPntKeyWindow::~CTPntKeyWindow()
{
}
void CTPntKeyWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent)
{
ConstructExtLD(*parent,pos,size);
iWin.SetPointerGrab(ETrue);
iKey1=TRect(size.iWidth*1/16,size.iHeight/2,size.iWidth*5/16,size.iHeight);
iKey2=TRect(size.iWidth*6/16,size.iHeight/2,size.iWidth*10/16,size.iHeight);
iKey3=TRect(size.iWidth*11/16,size.iHeight/2,size.iWidth*15/16,size.iHeight);
iWin.AddKeyRect(iKey1,'A',EFalse);
iWin.AddKeyRect(iKey2,'B',EFalse);
AssignGC(*Client()->iGc);
BaseWin()->EnableOnEvents();
Activate();
}
void CTPntKeyWindow::Error(TInt aWhere)
{
iTest->Failed(aWhere);
}
void CTPntKeyWindow::NextKey()
{
if (++iKeyCount!=ENumPntKeyTests)
{
#if defined(LOGGING)
_LIT(KLog,"Next Key KeyCount=%d");
iTest->LOG_MESSAGE2(KLog,iKeyCount);
#endif
if (iKeyCount==2)
iWin.RemoveAllKeyRects();
else if (iKeyCount==3)
iWin.AddKeyRect(iKey3,'C',EFalse);
else if (iKeyCount==4)
{
#if !defined(__WINS__)
if (iTest->NoDigitiser())
{
return;
}
#endif
iWin.RemoveAllKeyRects();
iWin.AddKeyRect(TRect(Client()->iScreen->SizeInPixels()),'Z',EFalse);
}
else if (iKeyCount==5)
{
iWin.RemoveAllKeyRects();
Client()->iWs.Flush();
User::After(500000); // Wait half a second
iWin.AddKeyRect(TRect(Client()->iScreen->SizeInPixels()),'Y',ETrue);
}
Invalidate();
}
SendEvent();
}
void CTPntKeyWindow::SendEvent()
{
TheClient->WaitForRedrawsToFinish();
#if defined(LOGGING)
_LIT(KLog,"SendEvent KeyCount=%d");
iTest->LOG_MESSAGE2(KLog,iKeyCount);
#endif
switch(iKeyCount)
{
case 0:
SimulatePointerDownUp(iKey1);
break;
case 1:
iTest->TestBase()->SimulateKey(TRawEvent::EKeyDown,EStdKeyLeftShift);
SimulatePointerDownUp(iKey2);
iTest->TestBase()->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftShift);
break;
case 2:
case 5:
{
TPoint pos=Position();
TSize size=Size();
iTest->TestBase()->SimulatePointerDownUp(pos.iX+size.iWidth/2,pos.iY+size.iHeight/4);
}
break;
case 3:
SimulatePointerDownUp(iKey3);
break;
case 4:
iTest->TestBase()->SimulateKeyDownUp(EStdKeyEnter);
break;
}
}
void CTPntKeyWindow::SimulatePointerDownUp(const TRect& aRect)
{
iTest->TestBase()->SimulatePointerDownUp((aRect.iTl.iX+aRect.iBr.iX)/2,(aRect.iTl.iY+aRect.iBr.iY)/2);
}
void CTPntKeyWindow::Test(TInt aCheck)
{
if (!aCheck)
Error(3);
}
void CTPntKeyWindow::KeyUpL(const TKeyEvent &aKey,const TTime&)
{
if (aKey.iScanCode==iTestScanCodes[iKeyCount])
NextKey();
}
void CTPntKeyWindow::KeyDownL(const TKeyEvent &aKey,const TTime &)
{
#if defined(LOGGING)
_LIT(KLog,"KeyDownL ScanCode=%d '%c' (%d) KeyCount=%d");
iTest->LOG_MESSAGE5(KLog,aKey.iScanCode,aKey.iScanCode,iTestScanCodes[iKeyCount],iKeyCount);
#endif
if (aKey.iScanCode!=EStdKeyLeftFunc && aKey.iScanCode!=EStdKeyRightFunc &&
aKey.iScanCode!=EStdKeyLeftAlt && aKey.iScanCode!=EStdKeyRightAlt &&
aKey.iScanCode!=EStdKeyLeftCtrl && aKey.iScanCode!=EStdKeyRightCtrl &&
aKey.iScanCode!=EStdKeyLeftShift && aKey.iScanCode!=EStdKeyRightShift &&
aKey.iScanCode!=EStdKeyOff &&
aKey.iScanCode!=EStdKeyEscape)
Test(aKey.iScanCode==iTestScanCodes[iKeyCount]);
}
void CTPntKeyWindow::WinKeyL(const TKeyEvent &aKey,const TTime &)
{
if (aKey.iCode!=EKeyEscape)
{
#if defined(LOGGING)
_LIT(KLog1,"WinKeyL1 ScanCode=%d (%d) Code=%d '%c' (%d)");
_LIT(KLog2,"WinKeyL2 ScanCode=%d Modifiers=0x%x (0x%x) KeyCount=%d");
iTest->LOG_MESSAGE6(KLog1,aKey.iScanCode,iTestScanCodes[iKeyCount],aKey.iCode,aKey.iCode,iTestCodes[iKeyCount]);
iTest->LOG_MESSAGE5(KLog2,aKey.iScanCode,aKey.iModifiers&EModifierMask,iTestModifiers[iKeyCount]&EModifierMask,iKeyCount);
#endif
Test(aKey.iScanCode==iTestScanCodes[iKeyCount]);
Test(aKey.iCode==iTestCodes[iKeyCount]);
Test((aKey.iModifiers&EModifierMask)==(iTestModifiers[iKeyCount]&EModifierMask));
}
}
void CTPntKeyWindow::SwitchOn(const TTime &)
{
#if defined(LOGGING)
_LIT(KLog,"SwitchOn KeyCount=%d");
iTest->LOG_MESSAGE2(KLog,iKeyCount);
#endif
if (iKeyCount==4)
NextKey();
else if (iKeyCount!=5)
Error(2);
}
void CTPntKeyWindow::PointerL(const TPointerEvent &aPointer,const TTime &)
{
#if defined(LOGGING)
_LIT(KLog,"Pointer Event Type=%d Pos=(%d,%d) PPos=(%d,%d) KeyCount=%d");
iTest->LOG_MESSAGE7(KLog,aPointer.iType,aPointer.iPosition.iX,aPointer.iPosition.iY
,aPointer.iParentPosition.iX,aPointer.iParentPosition.iY,iKeyCount);
#endif
if (aPointer.iType==TPointerEvent::EButton1Down)
{
if (iKeyCount!=2)
Error(1);
else
NextKey();
}
}
void CTPntKeyWindow::DrawButton(const TRect &aRect, const TDesC &aText)
{
iGc->DrawRect(aRect);
iGc->DrawText(aText, TPoint((aRect.iBr.iX+aRect.iTl.iX)/2,(aRect.iBr.iY+aRect.iTl.iY)/2));
}
void CTPntKeyWindow::Draw()
{
iGc->SetBrushColor(TRgb::Gray4(0));
iGc->SetPenColor(TRgb::Gray4(3));
iGc->Clear();
DrawButton(iKey1,_L("A"));
DrawButton(iKey2,_L("B"));
DrawButton(iKey3,_L("C"));
switch(iKeyCount)
{
case 0:
iGc->DrawText(_L("Click on 'A'"), TPoint(10,20));
break;
case 1:
iGc->DrawText(_L("Shift-Click on 'B'"), TPoint(10,20));
break;
case 2:
iGc->DrawText(_L("Click anywhere in this window"), TPoint(10,20));
break;
case 3:
iGc->DrawText(_L("Click on 'C'"), TPoint(10,20));
break;
case 4:
#if defined(__WINS__) // Can't emulate touching dig when switched off under WINS
iGc->DrawText(_L("Switch off and on (or press Enter)"), TPoint(10,20));
#else
iGc->DrawText(_L("Switch off, then touch the screen to switch on"), TPoint(10,20));
#endif
break;
case 5:
#if defined(__WINS__) // Can't emulate touching dig when switched off under WINS
iGc->DrawText(_L("Touch anywhere in the window"), TPoint(10,20));
#else
iGc->DrawText(_L("Switch off and touch the screen to switch on again"), TPoint(10,20));
#endif
break;
}
}
CTPntKey::CTPntKey(CTestStep* aStep):
CTWsGraphicsBase(aStep)
{
}
CTPntKey::~CTPntKey()
{
HAL::Set(HALData::EPenDisplayOn,iOldPointerState);
CTWin::Delete(iWin);
Client()->ResetFocus();
delete iTimeOut;
}
TInt CTPntKey::TimeOut(TAny* aTest) //static
{
static_cast<CTPntKey*>(aTest)->TimeOut();
return(KErrNone);
}
void CTPntKey::TimeOut()
{
TLogMessageText buf;
_LIT(KPntKeyTimeOut,"TIMEOUT: Pointer Key, %d, %S");
buf.AppendFormat(KPntKeyTimeOut,iState,&TestBase()->iSubTitle);
TheClient->LogMessage(buf);
Failed(4);
}
void CTPntKey::Failed(TInt aWhere)
{
_LIT(KLog,"Failed at %d");
LOG_MESSAGE2(KLog,aWhere);
if (!iFailed)
{
iFailed=ETrue;
Client()->iGroup->ClearCurrentWindow();
}
}
void CTPntKey::ConstructL()
{
TInt mods=TheClient->iWs.GetModifierState();
if (mods&EModifierCapsLock)
iTest->SimulateKeyDownUp(EStdKeyCapsLock);
//Make sure all the keys we test are in the up state
iTest->SimulateKeyDownUp(EStdKeyLeftShift);
iTest->SimulateKeyDownUp(EStdKeyRightShift);
iTest->SimulateKeyDownUp(EStdKeyLeftFunc);
iTest->SimulateKeyDownUp(EStdKeyLeftCtrl);
iTest->SimulateKeyDownUp(EStdKeyRightCtrl);
mods=TheClient->iWs.GetModifierState();
_LIT(KLog,"Initial Modifiers state 0x%x (ideally should be zero)");
LOG_MESSAGE2(KLog,mods);
TheClient->iScreen->SetScreenMode(0); //May sure we are in the right screen size mode
TheClient->iScreen->SetAppScreenMode(0);
TheClient->iWs.SetPointerCursorArea(TestBase()->iNormalPointerCursorArea);
CTPntKeyWindow *win=new(ELeave) CTPntKeyWindow(this);
win->SetUpLD(TPoint(20,20),Client()->iScreen->SizeInPixels()-TSize(40,40),Client()->iGroup);
iWin=win;
Client()->iGroup->SetCurrentWindow(iWin);
iNoDigitiser=EFalse;
TInt err=HAL::Get(HALData::EPenDisplayOn,iOldPointerState);
if (err==KErrNotSupported)
{
iNoDigitiser=ETrue;
}
else if (err==KErrNone)
{
err=HAL::Set(HALData::EPenDisplayOn,ETrue);
if (err==KErrNotSupported)
iNoDigitiser=(!iOldPointerState);
}
else
{
TEST(EFalse);
}
TheClient->WaitForRedrawsToFinish(); //Make sure all pending events have been delt with (redraw events are lowest priority)
iTimeOut=new(ELeave) CTimeOut();
iTimeOut->ConstructL();
iTimeOut->Start(KTimeOutAfter,TCallBack(CTPntKey::TimeOut,this));
}
void CTPntKey::RunTestCaseL(TInt /*aCurTestCase*/)
{
_LIT(KTestName,"Key set 1");
TEST(!iFailed);
if (iFailed)
{
_LIT(KLog,"Test Failed Substate=%d KeyCount=%d");
LOG_MESSAGE3(KLog,iTest->iState,iWin->KeyCount());
}
((CTPntKeyStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
switch(++iTest->iState)
{
/**
@SYMTestCaseID GRAPHICS-WSERV-0200
@SYMDEF DEF081259
@SYMTestCaseDesc Test Pointer move/drag buffer
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Exercise the pointer move/drag buffer and check
that it functions correctly
@SYMTestExpectedResults The buffer functions correctly
*/
case 1:
((CTPntKeyStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0200"));
iTest->LogSubTest(KTestName);
if (TestBase()->ConfigurationSupportsPointerEventTesting())
{
iWin->SendEvent();
TheClient->Flush();
}
else
{
INFO_PRINTF1(_L("Test skipped because config does not support pointer event testing"));
}
break;
case 2:
((CTPntKeyStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
((CTPntKeyStep*)iStep)->CloseTMSGraphicsStep();
if (TestBase()->ConfigurationSupportsPointerEventTesting())
{
iTimeOut->Cancel();
}
TestComplete();
break;
}
((CTPntKeyStep*)iStep)->RecordTestResultL();
}
__WS_CONSTRUCT_STEP__(PntKey)