os/graphics/windowing/windowserver/test/tauto/TPROCPRI.CPP
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// Test process priority control
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
/**
sl@0
    19
 @file
sl@0
    20
 @test
sl@0
    21
 @internalComponent - Internal Symbian test code
sl@0
    22
*/
sl@0
    23
sl@0
    24
sl@0
    25
#include "TPROCPRI.H"
sl@0
    26
sl@0
    27
TName OtherGroupName;
sl@0
    28
sl@0
    29
TInt ProcPriTestOtherProcess(TAny *aScreenNumber)
sl@0
    30
	{
sl@0
    31
	CTrapCleanup* CleanUpStack=CTrapCleanup::New();
sl@0
    32
	RWsSession ws;
sl@0
    33
	User::LeaveIfError(ws.Connect());
sl@0
    34
	// use correct screen
sl@0
    35
	//
sl@0
    36
	CWsScreenDevice* screen = NULL;
sl@0
    37
	TInt err;
sl@0
    38
	TRAP(err, screen = new (ELeave) CWsScreenDevice(ws));
sl@0
    39
	if (err!=KErrNone)
sl@0
    40
		return err;
sl@0
    41
	if ((err=screen->Construct((TInt)aScreenNumber))!=KErrNone)
sl@0
    42
		{
sl@0
    43
		delete screen;
sl@0
    44
		return err;
sl@0
    45
		}
sl@0
    46
	
sl@0
    47
	RWindowGroup group(ws);
sl@0
    48
	group.Construct(888);
sl@0
    49
	group.SetName(OTHER_PROC_GROUP_NAME);
sl@0
    50
	RSemaphore sem1;
sl@0
    51
	RSemaphore sem2;
sl@0
    52
	sem1.OpenGlobal(PROC_PRI_SEMAPHORE_NAME1);
sl@0
    53
	sem2.OpenGlobal(PROC_PRI_SEMAPHORE_NAME2);
sl@0
    54
	sem1.Signal();	// Signal thread fully initialised
sl@0
    55
	sem2.Wait();		// Wait for command to disable focus
sl@0
    56
//
sl@0
    57
	group.EnableReceiptOfFocus(EFalse);
sl@0
    58
	ws.Flush();
sl@0
    59
	sem1.Signal();	// Signal focus disabled
sl@0
    60
	sem2.Wait();		// Wait for command to enable focus
sl@0
    61
sl@0
    62
	group.EnableReceiptOfFocus(ETrue);
sl@0
    63
	ws.Flush();
sl@0
    64
	sem1.Signal();	// Signal focus enabled
sl@0
    65
	sem2.Wait();		// Wait until signalled to exit
sl@0
    66
//
sl@0
    67
	group.EnableReceiptOfFocus(EFalse);	// To stop shell being tasked into foreground
sl@0
    68
	delete screen;
sl@0
    69
	ws.Close();
sl@0
    70
	sem1.Close();
sl@0
    71
	sem2.Close();
sl@0
    72
	delete CleanUpStack;
sl@0
    73
	return(KErrNone);
sl@0
    74
	}
sl@0
    75
sl@0
    76
CTProcPri::CTProcPri(CTestStep* aStep) : CTWsGraphicsBase(aStep)
sl@0
    77
	{
sl@0
    78
	}
sl@0
    79
sl@0
    80
CTProcPri::~CTProcPri()
sl@0
    81
	{
sl@0
    82
	if (iFlags&ECreatedSem1)
sl@0
    83
		iSem1.Close();
sl@0
    84
	if (iFlags&ECreatedSem2)
sl@0
    85
		iSem2.Close();
sl@0
    86
	delete iProcess;
sl@0
    87
	}
sl@0
    88
sl@0
    89
void CTProcPri::TestPriChangeL()
sl@0
    90
	{
sl@0
    91
	#define BACK_PRI EPriorityForeground
sl@0
    92
	#define FORE_PRI EPriorityForeground
sl@0
    93
	RProcess proc;
sl@0
    94
	TEST(proc.Priority()==BACK_PRI);
sl@0
    95
	if (proc.Priority()!=BACK_PRI)
sl@0
    96
		INFO_PRINTF3(_L("proc.Priority() return value - Expected: %d, Actual: %d"), BACK_PRI, proc.Priority());		
sl@0
    97
sl@0
    98
	iSem2.Signal();
sl@0
    99
	iSem1.Wait();
sl@0
   100
sl@0
   101
	TEST(proc.Priority()==FORE_PRI);
sl@0
   102
	if (proc.Priority()!=FORE_PRI)
sl@0
   103
		INFO_PRINTF3(_L("proc.Priority() return value - Expected: %d, Actual: %d"), FORE_PRI, proc.Priority());		
sl@0
   104
sl@0
   105
	iSem2.Signal();
sl@0
   106
	iSem1.Wait();
sl@0
   107
sl@0
   108
	TEST(proc.Priority()==BACK_PRI);
sl@0
   109
	if (proc.Priority()!=BACK_PRI)
sl@0
   110
		INFO_PRINTF3(_L("proc.Priority() return value - Expected: %d, Actual: %d"), BACK_PRI, proc.Priority());		
sl@0
   111
sl@0
   112
	TInt ident;
sl@0
   113
	User::LeaveIfError(ident=TheClient->iWs.FindWindowGroupIdentifier(0,OTHER_PROC_GROUP_NAME,0));
sl@0
   114
	TInt retVal = TheClient->iWs.SetWindowGroupOrdinalPosition(ident,1);
sl@0
   115
	TEST(retVal==KErrNone);
sl@0
   116
	if (retVal!=KErrNone)
sl@0
   117
		INFO_PRINTF3(_L("TheClient->iWs.SetWindowGroupOrdinalPosition(ident,1) return value - Expected: %d, Actual: %d"), KErrNone, retVal);		
sl@0
   118
sl@0
   119
	TEST(proc.Priority()==FORE_PRI);
sl@0
   120
	if (proc.Priority()!=FORE_PRI)
sl@0
   121
		INFO_PRINTF3(_L("proc.Priority() return value - Expected: %d, Actual: %d"), FORE_PRI, proc.Priority());		
sl@0
   122
sl@0
   123
	retVal = TheClient->iWs.SetWindowGroupOrdinalPosition(ident,0);
sl@0
   124
	TEST(retVal==KErrNone);
sl@0
   125
	if (retVal!=KErrNone)
sl@0
   126
		INFO_PRINTF3(_L("TheClient->iWs.SetWindowGroupOrdinalPosition(ident,0) return value - Expected: %d, Actual: %d"), KErrNone, retVal);		
sl@0
   127
sl@0
   128
	TEST(proc.Priority()==BACK_PRI);
sl@0
   129
	if (proc.Priority()!=BACK_PRI)
sl@0
   130
		INFO_PRINTF3(_L("proc.Priority() return value - Expected: %d, Actual: %d"), BACK_PRI, proc.Priority());		
sl@0
   131
sl@0
   132
	TRequestStatus stat;
sl@0
   133
	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
sl@0
   134
	iSem2.Signal();
sl@0
   135
	User::WaitForRequest(stat);
sl@0
   136
sl@0
   137
	TEST(proc.Priority()==FORE_PRI);
sl@0
   138
		if (proc.Priority()!=FORE_PRI)
sl@0
   139
		INFO_PRINTF3(_L("proc.Priority() return value - Expected: %d, Actual: %d"), FORE_PRI, proc.Priority());		
sl@0
   140
sl@0
   141
	}
sl@0
   142
sl@0
   143
void CTProcPri::ConstructL()
sl@0
   144
	{
sl@0
   145
	User::LeaveIfError(iSem1.CreateGlobal(PROC_PRI_SEMAPHORE_NAME1,0,KOwnerType));
sl@0
   146
	iFlags|=ECreatedSem1;
sl@0
   147
	User::LeaveIfError(iSem2.CreateGlobal(PROC_PRI_SEMAPHORE_NAME2,0,KOwnerType));
sl@0
   148
	iFlags|=ECreatedSem2;
sl@0
   149
	iProcess=CProcess::NewL(CProcess::eProcessPriortyTest,iTest->iScreenNumber);
sl@0
   150
	iSem1.Wait();
sl@0
   151
	}
sl@0
   152
	
sl@0
   153
void CTProcPri::RunTestCaseL(TInt /*aCurTestCase*/)
sl@0
   154
	{
sl@0
   155
	_LIT(KTest1,"Priority Change");
sl@0
   156
	((CTProcPriStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
sl@0
   157
		
sl@0
   158
	switch(++iTest->iState)
sl@0
   159
		{
sl@0
   160
/**
sl@0
   161
sl@0
   162
  @SYMTestCaseID GRAPHICS-WSERV-0315
sl@0
   163
  
sl@0
   164
  @SYMDEF             DEF081259
sl@0
   165
 
sl@0
   166
  @SYMTestCaseDesc Test that the priority of a process or thread changes depending
sl@0
   167
  					on how the the process or thread is being used
sl@0
   168
    
sl@0
   169
  @SYMTestPriority High
sl@0
   170
 
sl@0
   171
  @SYMTestStatus Implemented
sl@0
   172
 
sl@0
   173
  @SYMTestActions Create a process or thread and use it. Check the priority of the
sl@0
   174
  					process or thread changes depending on how it is being used
sl@0
   175
  
sl@0
   176
  @SYMTestExpectedResults Prioirty of the process of thread changes depending on
sl@0
   177
  							how it is being used
sl@0
   178
 
sl@0
   179
*/
sl@0
   180
	case 1:
sl@0
   181
		((CTProcPriStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0315"));
sl@0
   182
		iTest->LogSubTest(KTest1);
sl@0
   183
		TestPriChangeL();
sl@0
   184
		break;
sl@0
   185
	case 2:
sl@0
   186
		((CTProcPriStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
sl@0
   187
		((CTProcPriStep*)iStep)->CloseTMSGraphicsStep();
sl@0
   188
		TestComplete();
sl@0
   189
		break;
sl@0
   190
		}
sl@0
   191
	((CTProcPriStep*)iStep)->RecordTestResultL();
sl@0
   192
	}
sl@0
   193
	
sl@0
   194
__WS_CONSTRUCT_STEP__(ProcPri)