messagingfw/watcherfw/test/src/t_watcher.cpp
changeset 22 bde600d88860
parent 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/watcherfw/test/src/t_watcher.cpp	Fri Jun 04 10:32:16 2010 +0100
@@ -0,0 +1,181 @@
+// Copyright (c) 2000-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:
+// t_watcher.cpp
+//
+
+#include <watcher.h>
+#include <e32test.h>
+#include <bautils.h>
+#include "msvtestutils.h"
+#include "cwatcher.h"
+
+_LIT(KTestFile, "c:\\TESTWATCHER");
+const TInt KWaitDelay = 1000000;
+const TInt KWaitCount = 30;
+
+RTest test(_L("Watcher Test Harness"));
+class CWatcherTestUtils;
+CWatcherTestUtils* theUtils = NULL;
+
+//**********************************
+// CWatcherTestUtils
+//**********************************
+
+class CWatcherTestUtils : public CTestUtils
+	{
+public:
+	static CWatcherTestUtils* NewL(RTest& aTest);
+	CWatcherTestUtils(RTest& aTest);
+	void Panic(TInt aPanic);
+	//
+public:
+	void Start(const TDesC& aDes);
+	void Complete();
+	//
+private:
+	TInt iTestNum;
+	};
+
+CWatcherTestUtils* CWatcherTestUtils::NewL(RTest& aTest)
+	{
+	CWatcherTestUtils* self = new(ELeave)CWatcherTestUtils(aTest);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(); // self
+	return self;
+	}
+
+CWatcherTestUtils::CWatcherTestUtils(RTest& aTest)
+: CTestUtils(aTest)
+	{
+	}
+
+void CWatcherTestUtils::Panic(TInt)
+	{
+	test(EFalse);
+	}
+
+void CWatcherTestUtils::Start(const TDesC& aDes)
+	{
+	if (iTestNum == 0)
+		test.Start(aDes);
+	else
+		test.Next(aDes);
+
+	TestStart(++iTestNum, aDes);
+	}
+
+void CWatcherTestUtils::Complete()
+	{
+	TestFinish(iTestNum, KErrNone);
+	}
+
+LOCAL_C TBool WaitForTestFile()
+	{
+	TInt count = KWaitCount;
+	while(count--)
+		{
+		User::After(KWaitDelay);
+		if (BaflUtils::FileExists(theUtils->FileSession(), KTestFile))
+			return ETrue;
+		}
+	return EFalse;
+	}
+
+void DoTestsL()
+	{
+	// Create waiter
+	CWatcherWait* wait = CWatcherWait::NewLC();
+
+	// Create the watcher
+	CWatcher* watcher = CWatcher::NewL(CActive::EPriorityStandard);
+	CleanupStack::PushL(watcher);
+
+	theUtils->Start(_L("Watcher startup"));
+	theUtils->FileSession().Delete(KTestFile);
+	wait->Start();
+	watcher->Start(wait->iStatus);
+	test(WaitForTestFile());
+	theUtils->Complete();
+
+	theUtils->Start(_L("Watcher death"));
+	watcher->Cancel();
+	CActiveScheduler::Start();
+	test(wait->iStatus.Int() == KErrCancel);
+	theUtils->Complete();
+
+	theUtils->Start(_L("Watcher restart"));
+	test(theUtils->FileSession().Delete(KTestFile) == KErrNone);
+	wait->Start();
+	watcher->Start(wait->iStatus);
+	test(WaitForTestFile());
+	theUtils->Complete();
+
+	// Close the watcher
+	theUtils->Start(_L("Closing watchers"));
+	watcher->Cancel();
+	CActiveScheduler::Start();
+	test(wait->iStatus.Int() == KErrCancel);
+	theUtils->Complete();
+
+	CleanupStack::PopAndDestroy(2); // watcher, wait
+	}
+
+void SetupL()
+	{
+	CActiveScheduler::Install(new(ELeave)CActiveScheduler);
+	theUtils = CWatcherTestUtils::NewL(test);
+	}
+
+void Close(TInt aRet)
+	{
+	if (theUtils)
+		{
+		if (!aRet)
+			theUtils->TestHarnessCompleted();
+		else
+			theUtils->TestHarnessFailed(aRet);
+		}
+	test(aRet == KErrNone);
+
+	delete theUtils;
+	delete CActiveScheduler::Current();
+	}
+
+void DoMainL()
+	{
+	SetupL();
+	DoTestsL();
+	}
+
+GLDEF_C TInt E32Main()
+	{       
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	TRAPD(ret, DoMainL());
+	Close(ret);
+	test.Close();
+	delete cleanup;      
+	__UHEAP_MARKEND;
+	return(KErrNone);
+	}
+
+EXPORT_C TInt WinsMain()
+	{
+#if defined(__WINS__)
+	E32Main();
+#endif
+	return KErrNone;
+	}
+