kerneltest/e32test/notifier/textnotifier.cpp
changeset 0 a41df078684a
--- /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;
+	}
+