fontservices/fontstore/tfs/t_cachedeletion.cpp
changeset 0 1fb32624e06b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fontservices/fontstore/tfs/t_cachedeletion.cpp	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,195 @@
+/*
+* Copyright (c) 2007-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: 
+*
+*/
+
+
+/**
+ @file
+ @test
+ @internalComponent Internal Symbian test code
+*/
+
+#include "FNTSTORE.H"
+#include "OPENFONT.H"
+#include "FNTBODY.H"
+#include "FNTSTD.H"
+#include "t_cachedeletion.h"
+#include <hal.h>
+#include <s32file.h>
+#include <graphics/shapeimpl.h>
+
+_LIT(KSecondProcess,"tcachedeletionprocess");
+_LIT(KThirdProcess,"tcachedeletionprocess");
+
+class CTCacheDeletion : public CTGraphicsBase
+	{
+public:
+	CTCacheDeletion(CTestStep* aStep);
+	~CTCacheDeletion();
+protected:
+// From CTGraphicsStep
+	virtual void RunTestCaseL(TInt aCurTestCase);
+private:
+	void RunProcess2L();
+	};
+
+CTCacheDeletion::CTCacheDeletion(CTestStep* aStep)
+ :	CTGraphicsBase(aStep)
+	{
+
+	}
+
+CTCacheDeletion::~CTCacheDeletion()
+	{
+	// no action needed
+	}
+
+void TimerCleanup(TAny *aTimer)
+	{
+	((RTimer*)aTimer)->Cancel();
+	}
+
+/**
+	@SYMTestCaseID
+	GRAPHICS-FNTSTORE-0050
+
+	@SYMTestCaseDesc
+	Tests font and bitmap server disconnection (when a process finishes)
+	at the same time a process is outputing.
+
+	@SYMTestActions
+	This function creates two processes.  These processes are called
+    process 3 and process 2.  Process 3 is created, and run.  There are
+    parameters input to the process.  The first is an indicator to the
+    process of the instance (2 or 3) and the second is a timeout.
+    Process3 runs continually, drawing text for the full timeout period.
+    Process2 is created and allowed to finish in a loop in this function for
+    the same timeout period, currently ten seconds.
+
+	@SYMTestExpectedResults
+	Test should pass
+*/
+void CTCacheDeletion::RunProcess2L()
+	{
+	TInt runForMicroSecs = 1000*1000*10;
+
+	//create process 3
+	RProcess process3;
+	TInt err;
+	err = process3.Create(KThirdProcess, KNullDesC);
+	User::LeaveIfError(err);
+	CleanupClosePushL(process3);
+
+	//run process 3
+	process3.SetParameter(1,1);
+	process3.SetParameter(2,runForMicroSecs);
+	TRequestStatus completeStatus3;
+	process3.Logon(completeStatus3);
+	TRequestStatus rendezvousStatus3;
+	rendezvousStatus3=KRequestPending;
+	process3.Rendezvous(rendezvousStatus3);
+	process3.Resume(); //start the process
+	User::WaitForRequest(rendezvousStatus3);
+	
+	//create a timer
+	RTimer timer;
+	timer.CreateLocal();
+	TRequestStatus timerStatus=KRequestPending;
+	TTimeIntervalMicroSeconds32 timeout(runForMicroSecs);
+	timer.After(timerStatus, runForMicroSecs);
+
+	TCleanupItem cleanup(TimerCleanup,&timer);
+	CleanupStack::PushL(cleanup);
+
+	do
+		{
+		//run process 2 in a loop
+
+		//create process 2
+		RProcess process2;
+		TInt err = process2.Create(KSecondProcess, KNullDesC);
+		User::LeaveIfError(err);
+		CleanupClosePushL(process2);
+
+		//start process 2
+		process2.SetParameter(1,0);
+		process2.SetParameter(2,runForMicroSecs);//not actually used
+		TRequestStatus completeStatus2;
+		process2.Logon(completeStatus2);
+		TRequestStatus rendezvousStatus2;
+		rendezvousStatus2=KRequestPending;
+		process2.Rendezvous(rendezvousStatus2);
+		process2.Resume(); //start the process
+
+		//rendezvous with 2
+		User::WaitForRequest(rendezvousStatus2);
+		TInt status = rendezvousStatus2.Int();
+		TEST(status ==1);
+
+		//now let 2 finish
+		User::WaitForRequest(completeStatus2);
+		TExitType exit = process2.ExitType();
+		TEST(exit == EExitKill);
+		TInt reason = process2.ExitReason();
+		TEST (reason == 0);
+
+		CleanupStack::PopAndDestroy();
+		}
+	while (timerStatus==KRequestPending);
+	timer.Cancel();
+	CleanupStack::Pop();//timer
+
+	//rendezvous with 3
+	User::WaitForRequest(rendezvousStatus3);
+	TInt status = rendezvousStatus3.Int();
+	TEST(status ==10);
+
+	//now let 3 finish
+	User::WaitForRequest(completeStatus3);
+	TExitType exit = process3.ExitType();
+	TEST(exit == EExitKill);
+	TInt reason = process3.ExitReason();
+	TEST (reason == 0);
+
+	CleanupStack::PopAndDestroy();//process 3 
+	}
+	
+void CTCacheDeletion::RunTestCaseL( TInt aCurTestCase )
+	{
+#if defined __WINS__ || defined __WINSCW__
+	aCurTestCase = aCurTestCase;  //to avoid unused warning
+	TestComplete(); //only run test on hardware, always passes on winscw
+	return;
+#endif
+	((CTCacheDeletionStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+
+	switch ( aCurTestCase )
+		{
+	case 1:	
+		((CTCacheDeletionStep*)iStep)->SetTestStepID(_L("GRAPHICS-FNTSTORE-0050"));
+		RunProcess2L();
+		break;
+	case 2:
+		((CTCacheDeletionStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+		((CTCacheDeletionStep*)iStep)->CloseTMSGraphicsStep();
+		TestComplete();
+		break;
+		}
+	((CTCacheDeletionStep*)iStep)->RecordTestResultL();
+	}
+
+// --------------
+__CONSTRUCT_STEP__(CacheDeletion)