windowing/windowserver/test/tauto/TPROCPRI.CPP
changeset 103 2717213c588a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/test/tauto/TPROCPRI.CPP	Tue Jun 22 15:21:29 2010 +0300
@@ -0,0 +1,194 @@
+// Copyright (c) 1996-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:
+// Test process priority control
+// 
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+
+#include "TPROCPRI.H"
+
+TName OtherGroupName;
+
+TInt ProcPriTestOtherProcess(TAny *aScreenNumber)
+	{
+	CTrapCleanup* CleanUpStack=CTrapCleanup::New();
+	RWsSession ws;
+	User::LeaveIfError(ws.Connect());
+	// use correct screen
+	//
+	CWsScreenDevice* screen = NULL;
+	TInt err;
+	TRAP(err, screen = new (ELeave) CWsScreenDevice(ws));
+	if (err!=KErrNone)
+		return err;
+	if ((err=screen->Construct((TInt)aScreenNumber))!=KErrNone)
+		{
+		delete screen;
+		return err;
+		}
+	
+	RWindowGroup group(ws);
+	group.Construct(888);
+	group.SetName(OTHER_PROC_GROUP_NAME);
+	RSemaphore sem1;
+	RSemaphore sem2;
+	sem1.OpenGlobal(PROC_PRI_SEMAPHORE_NAME1);
+	sem2.OpenGlobal(PROC_PRI_SEMAPHORE_NAME2);
+	sem1.Signal();	// Signal thread fully initialised
+	sem2.Wait();		// Wait for command to disable focus
+//
+	group.EnableReceiptOfFocus(EFalse);
+	ws.Flush();
+	sem1.Signal();	// Signal focus disabled
+	sem2.Wait();		// Wait for command to enable focus
+
+	group.EnableReceiptOfFocus(ETrue);
+	ws.Flush();
+	sem1.Signal();	// Signal focus enabled
+	sem2.Wait();		// Wait until signalled to exit
+//
+	group.EnableReceiptOfFocus(EFalse);	// To stop shell being tasked into foreground
+	delete screen;
+	ws.Close();
+	sem1.Close();
+	sem2.Close();
+	delete CleanUpStack;
+	return(KErrNone);
+	}
+
+CTProcPri::CTProcPri(CTestStep* aStep) : CTWsGraphicsBase(aStep)
+	{
+	}
+
+CTProcPri::~CTProcPri()
+	{
+	if (iFlags&ECreatedSem1)
+		iSem1.Close();
+	if (iFlags&ECreatedSem2)
+		iSem2.Close();
+	delete iProcess;
+	}
+
+void CTProcPri::TestPriChangeL()
+	{
+	#define BACK_PRI EPriorityForeground
+	#define FORE_PRI EPriorityForeground
+	RProcess proc;
+	TEST(proc.Priority()==BACK_PRI);
+	if (proc.Priority()!=BACK_PRI)
+		INFO_PRINTF3(_L("proc.Priority() return value - Expected: %d, Actual: %d"), BACK_PRI, proc.Priority());		
+
+	iSem2.Signal();
+	iSem1.Wait();
+
+	TEST(proc.Priority()==FORE_PRI);
+	if (proc.Priority()!=FORE_PRI)
+		INFO_PRINTF3(_L("proc.Priority() return value - Expected: %d, Actual: %d"), FORE_PRI, proc.Priority());		
+
+	iSem2.Signal();
+	iSem1.Wait();
+
+	TEST(proc.Priority()==BACK_PRI);
+	if (proc.Priority()!=BACK_PRI)
+		INFO_PRINTF3(_L("proc.Priority() return value - Expected: %d, Actual: %d"), BACK_PRI, proc.Priority());		
+
+	TInt ident;
+	User::LeaveIfError(ident=TheClient->iWs.FindWindowGroupIdentifier(0,OTHER_PROC_GROUP_NAME,0));
+	TInt retVal = TheClient->iWs.SetWindowGroupOrdinalPosition(ident,1);
+	TEST(retVal==KErrNone);
+	if (retVal!=KErrNone)
+		INFO_PRINTF3(_L("TheClient->iWs.SetWindowGroupOrdinalPosition(ident,1) return value - Expected: %d, Actual: %d"), KErrNone, retVal);		
+
+	TEST(proc.Priority()==FORE_PRI);
+	if (proc.Priority()!=FORE_PRI)
+		INFO_PRINTF3(_L("proc.Priority() return value - Expected: %d, Actual: %d"), FORE_PRI, proc.Priority());		
+
+	retVal = TheClient->iWs.SetWindowGroupOrdinalPosition(ident,0);
+	TEST(retVal==KErrNone);
+	if (retVal!=KErrNone)
+		INFO_PRINTF3(_L("TheClient->iWs.SetWindowGroupOrdinalPosition(ident,0) return value - Expected: %d, Actual: %d"), KErrNone, retVal);		
+
+	TEST(proc.Priority()==BACK_PRI);
+	if (proc.Priority()!=BACK_PRI)
+		INFO_PRINTF3(_L("proc.Priority() return value - Expected: %d, Actual: %d"), BACK_PRI, proc.Priority());		
+
+	TRequestStatus stat;
+	iProcess->Logon(stat);		//Must Logon before the last Signal so we can be sure that it is still alive to get round a base issue
+	iSem2.Signal();
+	User::WaitForRequest(stat);
+
+	TEST(proc.Priority()==FORE_PRI);
+		if (proc.Priority()!=FORE_PRI)
+		INFO_PRINTF3(_L("proc.Priority() return value - Expected: %d, Actual: %d"), FORE_PRI, proc.Priority());		
+
+	}
+
+void CTProcPri::ConstructL()
+	{
+	User::LeaveIfError(iSem1.CreateGlobal(PROC_PRI_SEMAPHORE_NAME1,0,KOwnerType));
+	iFlags|=ECreatedSem1;
+	User::LeaveIfError(iSem2.CreateGlobal(PROC_PRI_SEMAPHORE_NAME2,0,KOwnerType));
+	iFlags|=ECreatedSem2;
+	iProcess=CProcess::NewL(CProcess::eProcessPriortyTest,iTest->iScreenNumber);
+	iSem1.Wait();
+	}
+	
+void CTProcPri::RunTestCaseL(TInt /*aCurTestCase*/)
+	{
+	_LIT(KTest1,"Priority Change");
+	((CTProcPriStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+		
+	switch(++iTest->iState)
+		{
+/**
+
+  @SYMTestCaseID GRAPHICS-WSERV-0315
+  
+  @SYMDEF             DEF081259
+ 
+  @SYMTestCaseDesc Test that the priority of a process or thread changes depending
+  					on how the the process or thread is being used
+    
+  @SYMTestPriority High
+ 
+  @SYMTestStatus Implemented
+ 
+  @SYMTestActions Create a process or thread and use it. Check the priority of the
+  					process or thread changes depending on how it is being used
+  
+  @SYMTestExpectedResults Prioirty of the process of thread changes depending on
+  							how it is being used
+ 
+*/
+	case 1:
+		((CTProcPriStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0315"));
+		iTest->LogSubTest(KTest1);
+		TestPriChangeL();
+		break;
+	case 2:
+		((CTProcPriStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+		((CTProcPriStep*)iStep)->CloseTMSGraphicsStep();
+		TestComplete();
+		break;
+		}
+	((CTProcPriStep*)iStep)->RecordTestResultL();
+	}
+	
+__WS_CONSTRUCT_STEP__(ProcPri)