--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/notifier/textnotifier.cpp Mon Oct 19 15:55:17 2009 +0100
@@ -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 <twintnotifier.h>
+#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<NOTIFIER_BASE>* NotifierArray()
+ {
+ CArrayPtrFlat<NOTIFIER_BASE>* array = new (ELeave) CArrayPtrFlat<NOTIFIER_BASE>(2);
+ CleanupStack::PushL(array);
+ CTestNotifier* notifier = new (ELeave) CTestNotifier(NOTIFIER_BASE::ENotifierPriorityLow);
+ CleanupStack::PushL(notifier);
+ array->AppendL(notifier);
+ CleanupStack::Pop(2,array);
+ return array;
+ }
+