author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// 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)