os/graphics/windowing/windowserver/test/tauto/TORDINAL.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
// ORDINAL.CPP
sl@0
    15
// Test ordinal position and priority changes on windows
sl@0
    16
// 
sl@0
    17
//
sl@0
    18
sl@0
    19
/**
sl@0
    20
 @file
sl@0
    21
 @test
sl@0
    22
 @internalComponent - Internal Symbian test code
sl@0
    23
*/
sl@0
    24
sl@0
    25
#include "TORDINAL.H"
sl@0
    26
sl@0
    27
_LIT(KLogNextSibling,"NextSibling of iChild%d is not iChild%d");
sl@0
    28
_LIT(KLogNoNextSibling,"iChild%d has a NextSibling when it shouldn't");
sl@0
    29
_LIT(KLogPrevSibling,"PrevSibling of iChild%d is not iChild%d");
sl@0
    30
_LIT(KLogNoPrevSibling,"iChild%d has a PrevSibling when it shouldn't");
sl@0
    31
sl@0
    32
CTOrdinal::CTOrdinal(CTestStep* aStep):
sl@0
    33
	CTWsGraphicsBase(aStep)
sl@0
    34
	{
sl@0
    35
	}
sl@0
    36
sl@0
    37
COrdinalWindowBase::COrdinalWindowBase(CTClient *aClient, CTestBase* aTest, CTestStep* aTestStep) : iClient(aClient), iTest(aTest), iTestStep(aTestStep)
sl@0
    38
	{
sl@0
    39
	}
sl@0
    40
sl@0
    41
COrdinalWindow::COrdinalWindow(CTClient *aClient, CTestBase* aTest, CTestStep* aTestStep) : COrdinalWindowBase(aClient, aTest, aTestStep), iClientWin(aClient->iWs)
sl@0
    42
	{
sl@0
    43
	__DECLARE_NAME(_S("COrdinalWindow"));
sl@0
    44
	}
sl@0
    45
sl@0
    46
COrdinalWindowGroup::COrdinalWindowGroup(CTClient *aClient, CTestBase* aTest, CTestStep* aTestStep) : COrdinalWindowBase(aClient, aTest, aTestStep), iGroupWin(aClient->iWs)
sl@0
    47
	{
sl@0
    48
	__DECLARE_NAME(_S("COrdinalWindowGroup"));
sl@0
    49
	}
sl@0
    50
sl@0
    51
COrdinalWindowBase::~COrdinalWindowBase()
sl@0
    52
	{
sl@0
    53
	if (iWin)
sl@0
    54
		iWin->Close();
sl@0
    55
	}
sl@0
    56
sl@0
    57
void COrdinalWindowBase::Draw()
sl@0
    58
	{}
sl@0
    59
sl@0
    60
inline RWindowTreeNode* COrdinalWindowBase::WinTreeNode()
sl@0
    61
	{
sl@0
    62
	return(iWin);
sl@0
    63
	}
sl@0
    64
sl@0
    65
inline TUint32 COrdinalWindowBase::Handle()
sl@0
    66
	{
sl@0
    67
	return reinterpret_cast<TUint>(this);
sl@0
    68
	}
sl@0
    69
sl@0
    70
COrdinalWindowBase *COrdinalWindowGroup::NewL(CTClient *aClient, CTestBase* aTest, CTestStep* aTestStep)
sl@0
    71
	{
sl@0
    72
	COrdinalWindowGroup *oWin=new(ELeave) COrdinalWindowGroup(aClient, aTest, aTestStep);
sl@0
    73
	TInt err=oWin->iGroupWin.Construct((TUint32)oWin);
sl@0
    74
	if (err<0)
sl@0
    75
		{
sl@0
    76
		delete oWin;
sl@0
    77
		User::Leave(err);
sl@0
    78
		}
sl@0
    79
	oWin->iWin= &oWin->iGroupWin;
sl@0
    80
	return(oWin);
sl@0
    81
	}
sl@0
    82
sl@0
    83
COrdinalWindowBase *COrdinalWindow::NewL(CTClient* aClient, RWindowTreeNode* aParent, CTestBase* aTest, CTestStep* aTestStep)
sl@0
    84
	{
sl@0
    85
	COrdinalWindow *oWin=new(ELeave) COrdinalWindow(aClient, aTest, aTestStep);
sl@0
    86
	TInt err=oWin->iClientWin.Construct(*aParent,(TUint32)oWin);
sl@0
    87
	if (err!=KErrNone)
sl@0
    88
		{
sl@0
    89
		delete oWin;
sl@0
    90
		User::Leave(err);
sl@0
    91
		}
sl@0
    92
	oWin->iClientWin.Activate();
sl@0
    93
	oWin->iWin= &oWin->iClientWin;
sl@0
    94
	return(oWin);
sl@0
    95
	}
sl@0
    96
sl@0
    97
TInt COrdinalWindowBase::OrdinalPosition()
sl@0
    98
	{
sl@0
    99
	return(iWin->OrdinalPosition());
sl@0
   100
	}
sl@0
   101
sl@0
   102
void COrdinalWindowBase::SetOrdinalPosition(TInt aPos)
sl@0
   103
	{
sl@0
   104
	iWin->SetOrdinalPosition(aPos);
sl@0
   105
	}
sl@0
   106
sl@0
   107
void COrdinalWindowBase::SetOrdinalPosition(TInt aPos,TInt aPri)
sl@0
   108
	{
sl@0
   109
	iWin->SetOrdinalPosition(aPos,aPri);
sl@0
   110
	}
sl@0
   111
sl@0
   112
CTOrdinal::~CTOrdinal()
sl@0
   113
	{
sl@0
   114
	delete iClient;
sl@0
   115
	}
sl@0
   116
sl@0
   117
void DZ(COrdinalWindowBase * &aX)
sl@0
   118
	{
sl@0
   119
	delete aX;
sl@0
   120
	aX=NULL;
sl@0
   121
	}
sl@0
   122
sl@0
   123
void CTOrdinal::DestroyWindows()
sl@0
   124
	{
sl@0
   125
	DZ(iParent);
sl@0
   126
	DZ(iParent2);
sl@0
   127
	DZ(iParent3);
sl@0
   128
	for(TInt child=0;child<ENumChildren;++child)
sl@0
   129
		DZ(iChild[child]);
sl@0
   130
	}
sl@0
   131
sl@0
   132
void COrdinalWindowBase::TestOP(TInt aTestPos)
sl@0
   133
	{
sl@0
   134
	iTestStep->TEST(iWin->OrdinalPosition()==aTestPos);
sl@0
   135
	}
sl@0
   136
sl@0
   137
void COrdinalWindowBase::SetAndTestOP(TInt aPos,TInt aTestPos)
sl@0
   138
	{
sl@0
   139
	iWin->SetOrdinalPosition(aPos);
sl@0
   140
	iTestStep->TEST(iWin->OrdinalPosition()==aTestPos);
sl@0
   141
	}
sl@0
   142
sl@0
   143
void COrdinalWindowBase::SetAndTestOP(TInt aPos)
sl@0
   144
	{
sl@0
   145
	SetAndTestOP(aPos, aPos);
sl@0
   146
	}
sl@0
   147
sl@0
   148
TInt COrdinalWindowBase::SetToLastAndGetOP()
sl@0
   149
	{
sl@0
   150
	iWin->SetOrdinalPosition(-1);
sl@0
   151
	return(iWin->OrdinalPosition());
sl@0
   152
	}
sl@0
   153
sl@0
   154
TInt COrdinalWindowBase::SetToLastAndGetOPPri(TInt aPri)
sl@0
   155
	{
sl@0
   156
	iWin->SetOrdinalPosition(-1, aPri);
sl@0
   157
	return(iWin->OrdinalPosition());
sl@0
   158
	}
sl@0
   159
sl@0
   160
void COrdinalWindowBase::SetAndTestOPPri(TInt aPos,TInt aPri,TInt aTestPos)
sl@0
   161
	{
sl@0
   162
	iWin->SetOrdinalPosition(aPos,aPri);
sl@0
   163
	iTestStep->TEST(iWin->OrdinalPosition()==aTestPos);
sl@0
   164
	iTestStep->TEST(iWin->OrdinalPriority()==aPri);
sl@0
   165
	}
sl@0
   166
sl@0
   167
void COrdinalWindowBase::SetAndTestOPPri(TInt aPos,TInt aPri)
sl@0
   168
	{
sl@0
   169
	SetAndTestOPPri(aPos,aPri,aPos);
sl@0
   170
	}
sl@0
   171
sl@0
   172
inline COrdinalWindowBase* COrdinalWindowBase::NextSibling() const
sl@0
   173
	{
sl@0
   174
	return reinterpret_cast<COrdinalWindow*>(iWin->NextSibling());
sl@0
   175
	}
sl@0
   176
sl@0
   177
inline COrdinalWindowBase* COrdinalWindowBase::PrevSibling() const
sl@0
   178
	{
sl@0
   179
	return reinterpret_cast<COrdinalWindow*>(iWin->PrevSibling());
sl@0
   180
	}
sl@0
   181
sl@0
   182
void CTOrdinal::TestWindowOrderNext(TInt aBefore,TInt aAfter)
sl@0
   183
	{
sl@0
   184
	TInt retVal=(iChild[aBefore]->NextSibling()==iChild[aAfter]);
sl@0
   185
	TEST(retVal);
sl@0
   186
	if (!retVal)
sl@0
   187
		LOG_MESSAGE3(KLogNextSibling,aBefore,aAfter);
sl@0
   188
	}
sl@0
   189
sl@0
   190
void CTOrdinal::TestWindowOrderNext(TInt aLast)
sl@0
   191
	{
sl@0
   192
	TInt retVal=(iChild[aLast]->NextSibling()==0);
sl@0
   193
	TEST(retVal);
sl@0
   194
	if (!retVal)
sl@0
   195
		LOG_MESSAGE2(KLogNoNextSibling,aLast);
sl@0
   196
	}
sl@0
   197
sl@0
   198
void CTOrdinal::TestWindowOrderPrev(TInt aAfter,TInt aBefore)
sl@0
   199
	{
sl@0
   200
	TInt retVal=(iChild[aAfter]->PrevSibling()==iChild[aBefore]);
sl@0
   201
	TEST(retVal);
sl@0
   202
	if (!retVal)
sl@0
   203
		LOG_MESSAGE3(KLogPrevSibling,aAfter,aBefore);
sl@0
   204
	}
sl@0
   205
sl@0
   206
void CTOrdinal::TestWindowOrderPrev(TInt aFirst)
sl@0
   207
	{
sl@0
   208
	TInt retVal=(iChild[aFirst]->PrevSibling()==0);
sl@0
   209
	TEST(retVal);
sl@0
   210
	if (!retVal)
sl@0
   211
		LOG_MESSAGE2(KLogNoPrevSibling,aFirst);
sl@0
   212
	}
sl@0
   213
	
sl@0
   214
void CTOrdinal::OrdinalPos()
sl@0
   215
	{
sl@0
   216
	TInt last=iChild[0]->SetToLastAndGetOP();
sl@0
   217
	iChild[0]->SetAndTestOP(0);
sl@0
   218
	iChild[5]->TestOP(5);
sl@0
   219
	iChild[1]->SetAndTestOP(3);
sl@0
   220
	iChild[0]->SetAndTestOP(0);
sl@0
   221
	iChild[0]->SetAndTestOP(-1,last);
sl@0
   222
	iChild[0]->SetAndTestOP(-1000,last);
sl@0
   223
	iChild[0]->SetAndTestOP(2);
sl@0
   224
	iChild[0]->SetAndTestOP(-1000,last);
sl@0
   225
	iChild[0]->SetAndTestOP(0);
sl@0
   226
	for(TInt index=0;index<=5;index++)
sl@0
   227
		iChild[4]->SetAndTestOP(index,index);
sl@0
   228
	iChild[0]->SetAndTestOP(-1,last);
sl@0
   229
	iChild[1]->SetAndTestOP(-1,last);
sl@0
   230
	iChild[2]->SetAndTestOP(-1,last);
sl@0
   231
	iChild[3]->SetAndTestOP(-1,last);
sl@0
   232
	iChild[4]->SetAndTestOP(-1,last);
sl@0
   233
	iChild[5]->SetAndTestOP(-1,last);
sl@0
   234
	TInt child;
sl@0
   235
	for (child=0;child<ENumChildren-1;++child)
sl@0
   236
		TestWindowOrderNext(child,child+1);
sl@0
   237
	TestWindowOrderNext(5);
sl@0
   238
	}
sl@0
   239
sl@0
   240
void CTOrdinal::OrdinalPriority()
sl@0
   241
	{
sl@0
   242
	TBool retVal;
sl@0
   243
	TInt last12=iChild[2]->SetToLastAndGetOPPri(12);
sl@0
   244
	iChild[2]->TestOP(last12);
sl@0
   245
	TInt lastKMax=iChild[2]->SetToLastAndGetOPPri(KMaxTInt32);
sl@0
   246
	iChild[2]->TestOP(lastKMax);
sl@0
   247
	TInt last=iChild[2]->SetToLastAndGetOPPri(0);
sl@0
   248
	iChild[2]->TestOP(last);
sl@0
   249
	iChild[2]->SetAndTestOPPri(-1,12,last12);				// One and only pri 12 window
sl@0
   250
	iChild[3]->SetAndTestOPPri(-1,KMaxTInt32,lastKMax);	// One and only pri KMaxTInt32 window
sl@0
   251
	iChild[1]->SetAndTestOPPri(0,KMaxTInt32);
sl@0
   252
	iChild[5]->SetAndTestOP(-1,last-3);
sl@0
   253
	iChild[1]->TestOP(0);
sl@0
   254
	iChild[0]->SetAndTestOPPri(0,50);
sl@0
   255
	iChild[1]->SetAndTestOPPri(0,50);
sl@0
   256
	iChild[2]->SetAndTestOPPri(0,50);
sl@0
   257
	iChild[3]->SetAndTestOPPri(0,50);
sl@0
   258
	iChild[1]->TestOP(2);
sl@0
   259
	if (iGroupTest)
sl@0
   260
		{
sl@0
   261
		retVal=(reinterpret_cast<CBase*>(iChild[0]->NextSibling())==iClient->iGroup);
sl@0
   262
		TEST(retVal);
sl@0
   263
		if (!retVal)
sl@0
   264
			{
sl@0
   265
			_LIT(KLog,"iChild0 NextSibling is not the main group window");
sl@0
   266
			LOG_MESSAGE(KLog);
sl@0
   267
			}
sl@0
   268
		retVal=(reinterpret_cast<CBase*>(iClient->iGroup->NextSibling())==iChild[4]);
sl@0
   269
		TEST(retVal);
sl@0
   270
		if (!retVal)
sl@0
   271
			{
sl@0
   272
			_LIT(KLog,"NextSibling of main group window is not iChild4");
sl@0
   273
			LOG_MESSAGE(KLog);
sl@0
   274
			}
sl@0
   275
		}
sl@0
   276
	else
sl@0
   277
		TestWindowOrderNext(0,4);
sl@0
   278
	TestWindowOrderNext(4,5);
sl@0
   279
	TestWindowOrderNext(5);
sl@0
   280
	iChild[2]->SetAndTestOPPri(5,-1,0);
sl@0
   281
	iChild[3]->SetAndTestOPPri(5,-1,1);
sl@0
   282
	TestWindowOrderNext(5,2);
sl@0
   283
	iChild[0]->SetAndTestOPPri(100000,KMinTInt32,0);
sl@0
   284
	iChild[1]->SetAndTestOPPri(200000,KMinTInt32,1);
sl@0
   285
	iChild[2]->SetAndTestOPPri(300000,KMinTInt32,2);
sl@0
   286
	iChild[5]->SetAndTestOPPri(0,0,0);
sl@0
   287
	iChild[3]->TestOP(0);
sl@0
   288
	iChild[0]->SetAndTestOPPri(0,-1);
sl@0
   289
	iChild[1]->SetAndTestOPPri(0,-1);
sl@0
   290
	iChild[2]->SetAndTestOPPri(0,-1);
sl@0
   291
	iChild[3]->SetAndTestOPPri(0,1);
sl@0
   292
	iChild[4]->SetAndTestOPPri(0,1);
sl@0
   293
	iChild[5]->SetAndTestOPPri(0,1);
sl@0
   294
	TestWindowOrderPrev(0,1);
sl@0
   295
	TestWindowOrderPrev(1,2);
sl@0
   296
	if (iGroupTest)
sl@0
   297
		{
sl@0
   298
		retVal=(reinterpret_cast<CBase*>(iChild[2]->PrevSibling())==iClient->iGroup);
sl@0
   299
		TEST(retVal);
sl@0
   300
		if (!retVal)
sl@0
   301
			{
sl@0
   302
			_LIT(KLog,"iChild2 PrevSibling is not the main group window");
sl@0
   303
			LOG_MESSAGE(KLog);
sl@0
   304
			}
sl@0
   305
		retVal=(reinterpret_cast<CBase*>(iClient->iGroup->PrevSibling())==iChild[3]);
sl@0
   306
		TEST(retVal);
sl@0
   307
		if (!retVal)
sl@0
   308
			{
sl@0
   309
			_LIT(KLog,"PrevSibling of main group window is not iChild3");
sl@0
   310
			LOG_MESSAGE(KLog);
sl@0
   311
			}
sl@0
   312
		}
sl@0
   313
	else
sl@0
   314
		TestWindowOrderPrev(2,3);
sl@0
   315
	TestWindowOrderPrev(3,4);
sl@0
   316
	TestWindowOrderPrev(4,5);
sl@0
   317
	TestWindowOrderPrev(5);
sl@0
   318
	}
sl@0
   319
sl@0
   320
void CTOrdinal::ConstructL()
sl@0
   321
	{
sl@0
   322
	iClient=new(ELeave) COrdinalClient();
sl@0
   323
	iClient->SetScreenNumber(iTest->iScreenNumber);
sl@0
   324
	iClient->ConstructL();
sl@0
   325
	}
sl@0
   326
sl@0
   327
/**
sl@0
   328
@SYMTestCaseID		GRAPHICS-WSERV-0446
sl@0
   329
sl@0
   330
@SYMCR				CR1164
sl@0
   331
sl@0
   332
@SYMTestCaseDesc	Test ClientHandle function returns right value
sl@0
   333
sl@0
   334
@SYMTestPriority	High
sl@0
   335
sl@0
   336
@SYMTestStatus		Implemented
sl@0
   337
sl@0
   338
@SYMTestActions		Call this function on windows at various times
sl@0
   339
sl@0
   340
@SYMTestExpectedResults The value set when window was created is returned
sl@0
   341
*/
sl@0
   342
void CTOrdinal::CreateWindowsL(TInt aMode)
sl@0
   343
	{
sl@0
   344
	RWindowTreeNode* parent=NULL;
sl@0
   345
	RWindowTreeNode* base=iClient->iGroup->WinTreeNode();
sl@0
   346
	TInt errors=0;
sl@0
   347
sl@0
   348
	if (base->Child()!=0)
sl@0
   349
		{
sl@0
   350
		_LIT(KErrText,"Main Group Window has children at start of test");
sl@0
   351
		LOG_MESSAGE(KErrText);
sl@0
   352
		AutoPanic(EAutoPanicGroupWinHasChild);
sl@0
   353
		}
sl@0
   354
	if (base->ClientHandle()!=reinterpret_cast<TUint32&>(iClient->iGroup))
sl@0
   355
		++errors;
sl@0
   356
	if (base->Parent()!=0)
sl@0
   357
		++errors;
sl@0
   358
	TEST(errors==0);
sl@0
   359
	if (errors>0)
sl@0
   360
		{
sl@0
   361
		_LIT(KErrText,"Handles of Main Group Window are not as expected");
sl@0
   362
		LOG_MESSAGE2(KErrText,errors);
sl@0
   363
		}
sl@0
   364
	iGroupTest=EFalse;
sl@0
   365
	switch(aMode)
sl@0
   366
		{
sl@0
   367
		case 3:
sl@0
   368
			iParent=COrdinalWindow::NewL(iClient,base,iTest,iStep);
sl@0
   369
			parent=iParent->WinTreeNode();
sl@0
   370
			CheckHandlesOnNewWindow(iClient->iGroup,iParent);
sl@0
   371
			break;
sl@0
   372
		case 1:
sl@0
   373
			parent=iClient->iGroup->WinTreeNode();
sl@0
   374
			break;
sl@0
   375
		case 2:
sl@0
   376
			iParent=COrdinalWindow::NewL(iClient,base,iTest,iStep);
sl@0
   377
			CheckHandlesOnNewWindow(iClient->iGroup,iParent);
sl@0
   378
			iParent2=COrdinalWindow::NewL(iClient,iParent->WinTreeNode(),iTest,iStep);
sl@0
   379
			CheckHandlesOnNewWindow(iParent,iParent2);
sl@0
   380
			iParent3=COrdinalWindow::NewL(iClient,iParent2->WinTreeNode(),iTest,iStep);
sl@0
   381
			parent=iParent3->WinTreeNode();
sl@0
   382
			CheckHandlesOnNewWindow(iParent2,iParent3);
sl@0
   383
			break;
sl@0
   384
		case 0:
sl@0
   385
			iGroupTest=ETrue;
sl@0
   386
			for (TInt child=ENumChildren-1;child>=0;--child)
sl@0
   387
				iChild[child]=COrdinalWindowGroup::NewL(iClient,iTest,iStep);
sl@0
   388
			CheckHandles(0);
sl@0
   389
			return;
sl@0
   390
		}
sl@0
   391
	for (TInt child=ENumChildren-1;child>=0;--child)
sl@0
   392
		{
sl@0
   393
		iChild[child]=COrdinalWindow::NewL(iClient,parent,iTest,iStep);
sl@0
   394
		if (iChild[child]->Handle()!=parent->Child())
sl@0
   395
			++errors;
sl@0
   396
		}
sl@0
   397
	TEST(errors==0);
sl@0
   398
	if (errors>0)
sl@0
   399
		{
sl@0
   400
		_LIT(KErrText,"%d windows were not the first child");
sl@0
   401
		LOG_MESSAGE2(KErrText,errors);
sl@0
   402
		}
sl@0
   403
	CheckHandles(parent->ClientHandle());
sl@0
   404
	}
sl@0
   405
sl@0
   406
void CTOrdinal::CheckHandlesOnNewWindow(CTWindowGroup* aParent,COrdinalWindowBase* aWin)
sl@0
   407
	{
sl@0
   408
	TInt errors=0;
sl@0
   409
	if (aParent->WinTreeNode()->Child()!=aWin->Handle())
sl@0
   410
		++errors;
sl@0
   411
	if (aWin->WinTreeNode()->Parent()!=reinterpret_cast<TUint32&>(aParent))
sl@0
   412
		++errors;
sl@0
   413
	CheckHandlesOnNewWindow(errors,aWin);
sl@0
   414
	}
sl@0
   415
sl@0
   416
void CTOrdinal::CheckHandlesOnNewWindow(COrdinalWindowBase* aParent,COrdinalWindowBase* aWin)
sl@0
   417
	{
sl@0
   418
	TInt errors=0;
sl@0
   419
	if (aParent->WinTreeNode()->Child()!=aWin->Handle())
sl@0
   420
		++errors;
sl@0
   421
	if (aWin->WinTreeNode()->Parent()!=aParent->Handle())
sl@0
   422
		++errors;
sl@0
   423
	CheckHandlesOnNewWindow(errors,aWin);
sl@0
   424
	}
sl@0
   425
	
sl@0
   426
void CTOrdinal::CheckHandlesOnNewWindow(TInt aErrors,COrdinalWindowBase* aWin)
sl@0
   427
	{
sl@0
   428
	RWindowTreeNode* win=aWin->WinTreeNode();
sl@0
   429
	if (win->ClientHandle()!=aWin->Handle())
sl@0
   430
		++aErrors;
sl@0
   431
	if (win->PrevSibling()!=0)
sl@0
   432
		++aErrors;
sl@0
   433
	if (win->NextSibling()!=0)
sl@0
   434
		++aErrors;
sl@0
   435
	if (win->Child()!=0)
sl@0
   436
		++aErrors;
sl@0
   437
	TEST(aErrors==0);
sl@0
   438
	if (aErrors>0)
sl@0
   439
		{
sl@0
   440
		_LIT(KErrText,"%d errors in handles of newly created window");
sl@0
   441
		LOG_MESSAGE2(KErrText,aErrors);
sl@0
   442
		}
sl@0
   443
	}
sl@0
   444
sl@0
   445
void CTOrdinal::CheckHandles(TUint aParent)
sl@0
   446
	{
sl@0
   447
	TInt errors=0;
sl@0
   448
	TInt child;
sl@0
   449
	for (child=0;child<ENumChildren;++child)
sl@0
   450
		{
sl@0
   451
		if (iChild[child]->WinTreeNode()->ClientHandle()!=iChild[child]->Handle())
sl@0
   452
			++errors;
sl@0
   453
		}
sl@0
   454
	TEST(errors==0);
sl@0
   455
	if (errors>0)
sl@0
   456
		{
sl@0
   457
		_LIT(KErrText,"%d windows gave wrong client handle");
sl@0
   458
		LOG_MESSAGE2(KErrText,errors);
sl@0
   459
		errors=0;
sl@0
   460
		}
sl@0
   461
	for (child=0;child<ENumChildren;++child)
sl@0
   462
		{
sl@0
   463
		if (iChild[child]->WinTreeNode()->Parent()!=aParent)
sl@0
   464
			++errors;
sl@0
   465
		}
sl@0
   466
	TEST(errors==0);
sl@0
   467
	if (errors>0)
sl@0
   468
		{
sl@0
   469
		_LIT(KErrText,"%d children gave wrong parent handle");
sl@0
   470
		LOG_MESSAGE2(KErrText,errors);
sl@0
   471
		errors=0;
sl@0
   472
		}
sl@0
   473
	for (child=1;child<ENumChildren;++child)
sl@0
   474
		{
sl@0
   475
		if (iChild[child-1]->WinTreeNode()->NextSibling()!=iChild[child]->Handle())
sl@0
   476
			++errors;
sl@0
   477
		}
sl@0
   478
	if (iChild[5]->WinTreeNode()->NextSibling()!=0 && !iGroupTest)
sl@0
   479
		++errors;
sl@0
   480
	TEST(errors==0);
sl@0
   481
	if (errors>0)
sl@0
   482
		{
sl@0
   483
		_LIT(KErrText,"%d windows gave wrong next sibling handle");
sl@0
   484
		LOG_MESSAGE2(KErrText,errors);
sl@0
   485
		errors=0;
sl@0
   486
		}
sl@0
   487
	if (iChild[0]->WinTreeNode()->PrevSibling()!=0 && !iGroupTest)
sl@0
   488
		++errors;
sl@0
   489
	for (child=1;child<ENumChildren;++child)
sl@0
   490
		{
sl@0
   491
		if (iChild[child]->WinTreeNode()->PrevSibling()!=iChild[child-1]->Handle())
sl@0
   492
			++errors;
sl@0
   493
		}
sl@0
   494
	TEST(errors==0);
sl@0
   495
	if (errors>0)
sl@0
   496
		{
sl@0
   497
		_LIT(KErrText,"%d windows gave wrong prev sibling handle");
sl@0
   498
		LOG_MESSAGE2(KErrText,errors);
sl@0
   499
		}
sl@0
   500
	}
sl@0
   501
sl@0
   502
COrdinalClient::COrdinalClient()
sl@0
   503
	{
sl@0
   504
	}
sl@0
   505
sl@0
   506
void COrdinalClient::ConstructL()
sl@0
   507
	{
sl@0
   508
	User::LeaveIfError(iWs.Connect());
sl@0
   509
	// change to correct screen
sl@0
   510
	//
sl@0
   511
	iScreen = new (ELeave) CWsScreenDevice(iWs);
sl@0
   512
	User::LeaveIfError(iScreen->Construct(iScreenNumber));
sl@0
   513
		
sl@0
   514
	TheClient->iGroup->WinTreeNode()->SetOrdinalPosition(0,-2000000000);
sl@0
   515
	TheClient->iWs.Flush();
sl@0
   516
	iGroup=new(ELeave) CTWindowGroup(this);
sl@0
   517
	iGroup->ConstructL();
sl@0
   518
	}
sl@0
   519
sl@0
   520
COrdinalClient::~COrdinalClient()
sl@0
   521
	{
sl@0
   522
	TheClient->iGroup->WinTreeNode()->SetOrdinalPosition(0,0);
sl@0
   523
	}
sl@0
   524
sl@0
   525
void COrdinalClient::KeyL(const TKeyEvent &,const TTime &)
sl@0
   526
	{
sl@0
   527
	}
sl@0
   528
sl@0
   529
void CTOrdinal::RunTestCaseL(TInt /*aCurTestCase*/)
sl@0
   530
	{
sl@0
   531
	_LIT(KTest1,"Ordinal 1");
sl@0
   532
	((CTOrdinalStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
sl@0
   533
	switch(++iTest->iState)
sl@0
   534
		{
sl@0
   535
/**
sl@0
   536
@SYMTestCaseID		GRAPHICS-WSERV-0217
sl@0
   537
sl@0
   538
@SYMDEF             DEF081259
sl@0
   539
sl@0
   540
@SYMTestCaseDesc    Test ordinal position and priority changes on windows
sl@0
   541
sl@0
   542
@SYMTestPriority    High
sl@0
   543
sl@0
   544
@SYMTestStatus      Implemented
sl@0
   545
sl@0
   546
@SYMTestActions     Set different ordinal positions and priorities on a
sl@0
   547
					number of windows and check they have been set
sl@0
   548
					correctly
sl@0
   549
sl@0
   550
@SYMTestExpectedResults The positions and priorities are set correctly
sl@0
   551
*/
sl@0
   552
		case 1:
sl@0
   553
			((CTOrdinalStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0217"));
sl@0
   554
			iTest->LogSubTest(KTest1);
sl@0
   555
			{
sl@0
   556
			for(TInt index=0;index<4;index++)
sl@0
   557
				{
sl@0
   558
				((CTOrdinalStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0446"));
sl@0
   559
				CreateWindowsL(index);
sl@0
   560
				((CTOrdinalStep*)iStep)->RecordTestResultL();
sl@0
   561
				OrdinalPos();
sl@0
   562
				OrdinalPriority();
sl@0
   563
				DestroyWindows();
sl@0
   564
				}
sl@0
   565
			}
sl@0
   566
			((CTOrdinalStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0217"));
sl@0
   567
			if (!iStep->TestStepResult() == EPass)
sl@0
   568
				TEST(EFalse);
sl@0
   569
			break;
sl@0
   570
		default:
sl@0
   571
			((CTOrdinalStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
sl@0
   572
			((CTOrdinalStep*)iStep)->CloseTMSGraphicsStep();
sl@0
   573
			TestComplete();
sl@0
   574
			break;
sl@0
   575
		};
sl@0
   576
	((CTOrdinalStep*)iStep)->RecordTestResultL();
sl@0
   577
	}
sl@0
   578
	
sl@0
   579
__WS_CONSTRUCT_STEP__(Ordinal)