--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tman/TPASSWRD.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,429 @@
+// 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:
+// Test Wserv password features
+//
+//
+
+#include <e32std.h>
+#include <e32hal.h>
+#include "W32STD.H"
+#include "../tlib/testbase.h"
+#include "TMAN.H"
+
+//#define LOG_TESTS
+
+#define THE_PASSWORD _L("pass")
+
+enum TPasswordState
+ {
+ ENotStarted,
+ EWaitForSwitchOff,
+ EWaitForEnter,
+ EWaitForA,
+ EWaitForSwitchOff2,
+ EWaitForSwitchOff3,
+ EWaitForSwitchOff4,
+ EWaitForSwitchOff5,
+ EWaitForEnter2,
+ EPasswordFinished,
+ };
+
+class CPasswordTest;
+
+class CPasswordWindowGroup : public CTWindowGroup
+ {
+public:
+ CPasswordWindowGroup(CTClient *aClient, CPasswordTest *aTest);
+ void ConstructL();
+ void PasswordL(const TTime &aTime);
+ void KeyL(const TKeyEvent &aKey,const TTime &aTime);
+ void SwitchOn(const TTime &aTime);
+private:
+ CPasswordTest *iTest;
+ };
+
+class CPasswordWindowGroup2 : public CTWindowGroup
+ {
+public:
+ CPasswordWindowGroup2(CTClient *aClient, CPasswordTest *aTest);
+ void ConstructL();
+ void KeyL(const TKeyEvent &aKey,const TTime &aTime);
+private:
+ CPasswordTest *iTest;
+ };
+
+class CPasswordWindow : public CTWin
+ {
+public:
+ CPasswordWindow(CPasswordTest *aTest);
+ void Draw();
+private:
+ CPasswordTest *iTest;
+ };
+
+class CPasswordTest : public CTestBase
+ {
+public:
+ CPasswordTest();
+ ~CPasswordTest();
+ TestState DoTestL();
+ void ConstructL();
+ void Fail(TInt aWhere);
+ void EnterKeyPressed(TPasswordState aNewState);
+ void SwitchOn();
+ void TestComplete(TPasswordState aNewState);
+ void PasswordMsgReceivedL();
+ TPasswordState PasswordState() const;
+ void SetPassState(TPasswordState aPassState);
+ void StartMainPasswordTestL();
+ void StartOnceADayPasswordTestL();
+ void TurnOffAndOn();
+private:
+ CPasswordWindowGroup *iGroup;
+ CPasswordWindowGroup2 *iGroup2;
+ CPasswordWindow *iPassWin;
+ CTBlankWindow *iBlankWin;
+ TSize iWinSize;
+ TInt iState;
+ TPasswordState iPassState;
+ TBool iPasswordTestFailed;
+ };
+
+GLDEF_C CTestBase *CreatePasswordTest()
+ {
+ return(new(ELeave) CPasswordTest());
+ }
+
+//
+
+CPasswordWindowGroup::CPasswordWindowGroup(CTClient *aClient, CPasswordTest *aTest) :
+ CTWindowGroup(aClient),
+ iTest(aTest)
+ {
+ __DECLARE_NAME(_S("CPasswordWindowGroup"));
+ }
+
+void CPasswordWindowGroup::ConstructL()
+ {
+ CTWindowGroup::ConstructL();
+ GroupWin()->EnableOnEvents();
+ }
+
+void CPasswordWindowGroup::SwitchOn(const TTime &)
+ {
+ iTest->SwitchOn();
+ }
+
+void CPasswordWindowGroup::KeyL(const TKeyEvent &aKey,const TTime &)
+ {
+ if (aKey.iCode==EKeyEscape)
+ iTest->TestComplete(EPasswordFinished);
+ switch(iTest->PasswordState())
+ {
+ case EWaitForEnter:
+ if (aKey.iCode==EKeyEnter)
+ iTest->EnterKeyPressed(EWaitForA);
+ break;
+ case EWaitForEnter2:
+ if (aKey.iCode==EKeyEnter)
+ iTest->TestComplete(EPasswordFinished);
+ break;
+ default:;
+ }
+ }
+
+void CPasswordWindowGroup::PasswordL(const TTime &)
+ {
+ iTest->TestL(iGroupWin.OrdinalPosition()==0);
+ iTest->PasswordMsgReceivedL();
+ }
+
+//
+
+CPasswordWindowGroup2::CPasswordWindowGroup2(CTClient *aClient, CPasswordTest *aTest) :
+ CTWindowGroup(aClient),
+ iTest(aTest)
+ {
+ __DECLARE_NAME(_S("CPasswordWindowGroup"));
+ }
+
+void CPasswordWindowGroup2::ConstructL()
+ {
+ CTWindowGroup::ConstructL();
+ iGroupWin.CaptureKey('a',0,0);
+ }
+
+void CPasswordWindowGroup2::KeyL(const TKeyEvent &aKey,const TTime &)
+ {
+ if (iTest->PasswordState()!=EPasswordFinished)
+ {
+ if (iTest->PasswordState()!=EWaitForA)
+ {
+ #if defined(LOG_TESTS)
+ TLogMessageText buf;
+ _LIT(KBadKey,"Bad Key Code=%d(%c) Scan=%d(%c) Rep=%d");
+ buf.AppendFormat(KBadKey,aKey.iCode,aKey.iCode,aKey.iScanCode,aKey.iScanCode,aKey.iRepeats);
+ Client()->LogMessage(buf);
+ #endif
+ if (aKey.iRepeats==0)
+ iTest->Fail(1);
+ }
+ else
+ {
+ if (aKey.iCode!='a')
+ iTest->Fail(2);
+ iTest->TestComplete(EWaitForSwitchOff2);
+ }
+ }
+ }
+
+//
+
+CPasswordWindow::CPasswordWindow(CPasswordTest *aTest) :
+ iTest(aTest)
+ {
+ }
+
+void CPasswordWindow::Draw()
+ {
+ iGc->Clear();
+ switch(iTest->PasswordState())
+ {
+ case EWaitForSwitchOff:
+ iGc->DrawText(_L("Please wait, turning off & on [1]"),TPoint(10,20));
+ break;
+ case EWaitForSwitchOff2:
+ iGc->DrawText(_L("Please wait, turning off & on [2]"),TPoint(10,20));
+ break;
+ case EWaitForSwitchOff3:
+ iGc->DrawText(_L("Please wait, turning off & on [3]"),TPoint(10,20));
+ break;
+ case EWaitForSwitchOff4:
+ iGc->DrawText(_L("Please wait, turning off & on [4]"),TPoint(10,20));
+ break;
+ case EWaitForSwitchOff5:
+ iGc->DrawText(_L("Please wait, turning off & on [5]"),TPoint(10,20));
+ break;
+ case EWaitForEnter:
+ iGc->DrawText(_L("Try the key of death, then..."),TPoint(10,20));
+ iGc->DrawText(_L("Press 'a', then..."),TPoint(10,40));
+ iGc->DrawText(_L("Press Enter"),TPoint(10,60));
+ break;
+ case EWaitForEnter2:
+ iGc->DrawText(_L("Press Enter"),TPoint(10,20));
+ break;
+ case EWaitForA:
+ iGc->DrawText(_L("Press 'a'"),TPoint(10,20));
+ case EPasswordFinished:
+ break;
+ default:;
+ }
+ }
+
+//
+
+CPasswordTest::CPasswordTest() : CTestBase(_L("Password"))
+ {}
+
+CPasswordTest::~CPasswordTest()
+ {
+ delete iBlankWin;
+ delete iPassWin;
+ delete iGroup;
+ delete iGroup2;
+ }
+
+#if defined(LOG_TESTS)
+void CPasswordTest::Fail(TInt aWhere)
+#else
+void CPasswordTest::Fail(TInt /*aWhere*/)
+#endif
+ {
+#if defined(LOG_TESTS)
+ TLogMessageText buf;
+ _LIT(KFailed,"Password Failed at %d (%d,%d)");
+ buf.AppendFormat(KFailed,aWhere,iState,iPassState);
+ Client()->LogMessage(buf);
+#endif
+ iPasswordTestFailed=ETrue;
+ Request();
+ }
+
+void CPasswordTest::TurnOffAndOn()
+ {
+/*#if defined(LOG_TESTS)
+ TLogMessageText buf;
+ _LIT(KSettingTime,"Setting Off Timer");
+ buf.Append(KSettingTime);
+ Client()->LogMessage(buf);
+#endif*/
+ RTimer timer;
+ timer.CreateLocal();
+ TTime time;
+ time.HomeTime();
+ time+=TTimeIntervalSeconds(7); // For some reason the O/S won't switch off for less than 6 seconds
+ TRequestStatus status;
+ timer.At(status,time);
+ UserHal::SwitchOff();
+ User::WaitForRequest(status);
+#if !defined(__WINS__)
+ TRawEvent event;
+ event.Set(TRawEvent::ESwitchOn);
+ UserSvr::AddEvent(event);
+#endif
+/*#if defined(LOG_TESTS)
+ TLogMessageText buf;
+ _LIT(KTimerOff,"Timer Gone Off (P=%d,S=%d)");
+ buf.AppendFormat(KTimerOff,iState,iPassState);
+ Client()->LogMessage(buf);
+#endif*/
+ }
+
+TPasswordState CPasswordTest::PasswordState() const
+ {
+ return(iPassState);
+ }
+
+void CPasswordTest::SetPassState(TPasswordState aPassState)
+ {
+ iPassState=aPassState;
+ iPassWin->DrawNow();
+ Client()->iWs.Flush();
+/*#if defined(LOG_TESTS)
+ TLogMessageText buf;
+ _LIT(PassTestState,"Password Test(%d), State=%d");
+ buf.AppendFormat(PassTestState,iState,aPassState);
+ Client()->LogMessage(buf);
+#endif*/
+ switch(aPassState)
+ {
+ case EWaitForSwitchOff:
+ case EWaitForSwitchOff2:
+ case EWaitForSwitchOff3:
+ case EWaitForSwitchOff4:
+ case EWaitForSwitchOff5:
+ TurnOffAndOn();
+ break;
+ default:;
+ }
+ }
+
+void CPasswordTest::SwitchOn()
+ {
+/*#if defined(LOG_TESTS)
+ TLogMessageText buf;
+ _LIT(KTimerOff,"Switch On (P=%d,S=%d)");
+ buf.AppendFormat(KTimerOff,iState,iPassState);
+ Client()->LogMessage(buf);
+#endif*/
+ switch (iPassState)
+ {
+ case EWaitForSwitchOff:
+ SetPassState(EWaitForEnter);
+ break;
+ case EWaitForSwitchOff2:
+ SetPassState(EWaitForSwitchOff3);
+ break;
+ case EWaitForSwitchOff3:
+ SetPassState(EWaitForSwitchOff4);
+ break;
+ case EWaitForSwitchOff4:
+ {
+ SetPassState(EWaitForSwitchOff5);
+ TTime time;
+ time.HomeTime();
+ time+=TTimeIntervalHours(24);
+ User::SetHomeTime(time);
+ }
+ break;
+ case EWaitForSwitchOff5:
+ SetPassState(EWaitForEnter2);
+ break;
+ default:;
+ }
+ }
+
+void CPasswordTest::PasswordMsgReceivedL()
+ {
+ TestL(iPassWin->BaseWin()->OrdinalPosition()==0);
+ if (iPassState==EWaitForSwitchOff3 || iPassState==EWaitForSwitchOff4)
+ Fail(3);
+ }
+
+void CPasswordTest::EnterKeyPressed(TPasswordState aNewState)
+ {
+ iPassWin->BaseWin()->SetOrdinalPosition(-1);
+ SetPassState(aNewState);
+ Client()->iWs.PasswordEntered();
+ }
+
+void CPasswordTest::TestComplete(TPasswordState aNewState)
+ {
+ Request();
+ SetPassState(aNewState);
+ iPassState=aNewState;
+ }
+
+void CPasswordTest::ConstructL()
+ {
+ iGroup2=new(ELeave) CPasswordWindowGroup2(Client(),this);
+ iGroup2->ConstructL();
+ iGroup=new(ELeave) CPasswordWindowGroup(Client(),this);
+ iGroup->ConstructL();
+ iPassWin=new(ELeave) CPasswordWindow(this);
+ iPassWin->ConstructL(*iGroup);
+ iPassWin->AssignGC(*Client()->iGc);
+ iPassWin->Activate();
+ iBlankWin=new(ELeave) CTBlankWindow();
+ iBlankWin->ConstructL(*iGroup);
+ iBlankWin->SetVisible(EFalse);
+ iBlankWin->Activate();
+ iState=ENotStarted;
+ }
+
+void CPasswordTest::StartMainPasswordTestL()
+ {
+ if (iPassWin->BaseWin()->PasswordWindow(EPasswordAlways)!=KErrNone)
+ {
+ DisplayDialog(_L("Can't do password tests"),_L("Password window"),_L("already exists"), Client()->iGroup->GroupWin());
+ AbortL();
+ }
+ SetPassState(EWaitForSwitchOff);
+ }
+
+void CPasswordTest::StartOnceADayPasswordTestL()
+ {
+ TestL(iPassWin->BaseWin()->PasswordWindow(EPasswordOnceADay)==KErrNone);
+ }
+
+TestState CPasswordTest::DoTestL()
+ {
+ if (iPasswordTestFailed)
+ TestL(ETrue);
+ switch(iState)
+ {
+ case 0:
+ LogSubTest(_L("Password 1"),1);
+ StartMainPasswordTestL();
+ iState++;
+ return(EContinue);
+ case 1:
+ LogSubTest(_L("Password 2"),2);
+ StartOnceADayPasswordTestL();
+ iState++;
+ return(EContinue);
+ default:
+ return(EFinished);
+ }
+ }