diff -r 57c618273d5c -r bbf46f59e123 windowing/windowserver/test/tauto/TPROCPRI.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/test/tauto/TPROCPRI.CPP Tue Aug 31 16:31:06 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)