diff -r 000000000000 -r bde4ae8d615e os/kernelhwsrv/kerneltest/e32test/notifier/textnotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/kernelhwsrv/kerneltest/e32test/notifier/textnotifier.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,190 @@ +// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "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: +// e32test\notifier\textnotifier1.cpp +// +// + +#ifndef V2_NOTIFIER +#endif + +#include +#include "textnotifier.h" + +#ifdef V2_NOTIFIER + +#define KUidTestTextNotifier KUidTestTextNotifier2 +#define KUidOtherTestTextNotifier KUidTestTextNotifier1 +#define NOTIFIER_BASE MNotifierBase2 + +#else + +#define KUidTestTextNotifier KUidTestTextNotifier1 +#define KUidOtherTestTextNotifier KUidTestTextNotifier2 +class MEikSrvNotifierBase : public MNotifierBase {}; +#define NOTIFIER_BASE MEikSrvNotifierBase + +#endif + + +// Give each notifers a different channel so they don't block each other +// (this is required for the MNotiferManager testing to be valid.) +#define KUidOutputChannel KUidTestTextNotifier + + +class CTestNotifier : public CBase, public NOTIFIER_BASE + { +public: + CTestNotifier(TNotifierPriority aPriority); + virtual void Release(); + virtual TNotifierInfo RegisterL(); + virtual TNotifierInfo Info() const; + virtual TPtrC8 StartL(const TDesC8& aBuffer); +#ifdef V2_NOTIFIER + virtual void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage); +#else + virtual void StartL(const TDesC8& aBuffer, const TAny* aReturnVal, RMessage aMessage); +#endif + virtual void Cancel(); + virtual TPtrC8 UpdateL(const TDesC8& aBuffer); +private: + TBool iCancel; + TBuf8<256> iResponse; + TBool iNotifierManagerTested; + TNotifierPriority iPriority; + }; + +void CTestNotifier::Release() + { + delete this; + } + +CTestNotifier::CTestNotifier(TNotifierPriority aPriority) + : iPriority(aPriority) + {} + +CTestNotifier::TNotifierInfo CTestNotifier::RegisterL() + { + CTestNotifier::TNotifierInfo info; + info.iUid = KUidTestTextNotifier; + info.iChannel = KUidOutputChannel; + info.iPriority = iPriority; + return info; + } + + +CTestNotifier::TNotifierInfo CTestNotifier::Info() const + { + CTestNotifier::TNotifierInfo info; + info.iUid = KUidTestTextNotifier; + info.iChannel = KUidOutputChannel; + info.iPriority = iPriority; + return info; + } + +TPtrC8 CTestNotifier::StartL(const TDesC8& aBuffer) + { + iCancel = EFalse; + if(aBuffer==KMNotifierManager) + { + iNotifierManagerTested = ETrue; + iResponse.SetMax(); + iResponse.FillZ(); + iResponse.Zero(); + iManager->StartNotifierL(KUidOtherTestTextNotifier,KStartData,iResponse); + return TPtrC8(iResponse); + } + if(aBuffer!=KStartData) + User::Leave(KErrGeneral); + return TPtrC8(KResponseData); + } + +#ifdef V2_NOTIFIER +void CTestNotifier::StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage) +#else +void CTestNotifier::StartL(const TDesC8& aBuffer, const TAny* aReturnVal, RMessage aMessage) +#endif + { + TBool cancelled=iCancel; + iCancel = EFalse; + TInt r=KErrNone; + if(aBuffer==KMNotifierManager || aBuffer==KMNotifierManagerWithCancelCheck) + { + iNotifierManagerTested = ETrue; + iResponse.SetMax(); + iResponse.FillZ(); + iResponse.Zero(); + iManager->StartNotifierL(KUidOtherTestTextNotifier,KStartData,iResponse); + if(aBuffer==KMNotifierManagerWithCancelCheck) + r = cancelled ? KTestNotifierWasPreviouselyCanceled : KErrGeneral; + } + else if(aBuffer==KStartData) + iResponse.Copy(KResponseData); + else if(aBuffer==KHeapData) + { + iResponse.Zero(); + TInt allocSize; + r=User::AllocSize(allocSize); + iResponse.Format(_L8("%d"),allocSize); + } + else if(aBuffer==KStartWithCancelCheckData) + { + iResponse.Copy(KResponseData); + r = cancelled ? KTestNotifierWasPreviouselyCanceled : KErrGeneral; + } + else + User::Leave(KErrGeneral); +#ifdef V2_NOTIFIER + aMessage.WriteL(aReplySlot,iResponse); +#else + aMessage.WriteL(aReturnVal,iResponse); +#endif + aMessage.Complete(r); + } + +void CTestNotifier::Cancel() + { + if(iNotifierManagerTested) + { + iNotifierManagerTested = EFalse; + iManager->CancelNotifier(KUidOtherTestTextNotifier); + } + iCancel = ETrue; + } + +TPtrC8 CTestNotifier::UpdateL(const TDesC8& aBuffer) + { + if(aBuffer==KMNotifierManager) + { + iNotifierManagerTested = ETrue; + iManager->UpdateNotifierL(KUidOtherTestTextNotifier,KUpdateData,iResponse); + } + else if(aBuffer==KUpdateData) + iResponse.Copy(KResponseData); + else + User::Invariant(); + return TPtrC8(iResponse); + } + + +EXPORT_C CArrayPtr* NotifierArray() + { + CArrayPtrFlat* array = new (ELeave) CArrayPtrFlat(2); + CleanupStack::PushL(array); + CTestNotifier* notifier = new (ELeave) CTestNotifier(NOTIFIER_BASE::ENotifierPriorityLow); + CleanupStack::PushL(notifier); + array->AppendL(notifier); + CleanupStack::Pop(2,array); + return array; + } +