os/graphics/windowing/windowserver/test/tauto/TGWHANDLE.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-2010 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
// GWHANDLE.CPP
sl@0
    15
// Test group window handle functions
sl@0
    16
// 
sl@0
    17
//
sl@0
    18
sl@0
    19
/**
sl@0
    20
 @file
sl@0
    21
 @test
sl@0
    22
*/
sl@0
    23
sl@0
    24
#include "TGWHANDLE.H"
sl@0
    25
sl@0
    26
sl@0
    27
CTGwHandle::CTGwHandle(CTestStep* aStep):
sl@0
    28
	CTWsGraphicsBase(aStep)
sl@0
    29
	{
sl@0
    30
	}
sl@0
    31
sl@0
    32
void CTGwHandle::ConstructL()
sl@0
    33
	{
sl@0
    34
	}
sl@0
    35
sl@0
    36
CTGwHandle::~CTGwHandle()
sl@0
    37
	{
sl@0
    38
	}
sl@0
    39
sl@0
    40
TInt CTGwHandle::NumberOfWndGroupsWithZeroPriority(TInt aScreenNumber)
sl@0
    41
	{
sl@0
    42
	__ASSERT_ALWAYS(aScreenNumber <= 1, User::Invariant());
sl@0
    43
	return TheClient->iWs.NumWindowGroups(aScreenNumber,0);
sl@0
    44
	}
sl@0
    45
sl@0
    46
void CTGwHandle::GetGwListL(CArrayFixFlat<TInt> *aWindowHandles)
sl@0
    47
	{
sl@0
    48
	User::LeaveIfError(TheClient->iWs.WindowGroupList(aWindowHandles));
sl@0
    49
	}
sl@0
    50
sl@0
    51
void CTGwHandle::GetGwListL(CArrayFixFlat<TInt> *aWindowHandles, TInt aScreenNumber)
sl@0
    52
	{
sl@0
    53
	User::LeaveIfError(TheClient->iWs.WindowGroupList(aWindowHandles, aScreenNumber));
sl@0
    54
	}
sl@0
    55
sl@0
    56
void CTGwHandle::GetGwListL(TInt aPriority, CArrayFixFlat<TInt> *aWindowHandles)
sl@0
    57
	{
sl@0
    58
	User::LeaveIfError(TheClient->iWs.WindowGroupList(aPriority,aWindowHandles));
sl@0
    59
	}
sl@0
    60
sl@0
    61
void CTGwHandle::GetGwListL(RArray<RWsSession::TWindowGroupChainInfo>* aWindowHandles)
sl@0
    62
	{
sl@0
    63
	User::LeaveIfError(TheClient->iWs.WindowGroupList(aWindowHandles));
sl@0
    64
	}
sl@0
    65
sl@0
    66
void CTGwHandle::GetGwListL(TInt aPriority, RArray<RWsSession::TWindowGroupChainInfo>* aWindowHandles)
sl@0
    67
	{
sl@0
    68
	User::LeaveIfError(TheClient->iWs.WindowGroupList(aPriority, aWindowHandles));
sl@0
    69
	}
sl@0
    70
sl@0
    71
void CTGwHandle::GwNamesL()
sl@0
    72
	{
sl@0
    73
	enum {EConnectHandle1=123456};
sl@0
    74
	enum {EWindowGroupHandle1=234567};
sl@0
    75
	enum {EWindowGroupHandle2=666666};
sl@0
    76
//
sl@0
    77
	TInt foreground;
sl@0
    78
	User::LeaveIfError(foreground=TheClient->iWs.GetFocusWindowGroup());
sl@0
    79
	RWsSession ws1;
sl@0
    80
	User::LeaveIfError(ws1.Connect());
sl@0
    81
sl@0
    82
	// assign to the correct screen
sl@0
    83
	CWsScreenDevice* screen = new (ELeave) CWsScreenDevice(ws1);
sl@0
    84
	CleanupStack::PushL(screen);
sl@0
    85
	User::LeaveIfError(screen->Construct(iTest->iScreenNumber));
sl@0
    86
sl@0
    87
	RWindowGroup gw1(ws1);
sl@0
    88
	User::LeaveIfError(gw1.Construct(EWindowGroupHandle1));
sl@0
    89
	gw1.SetOwningWindowGroup(foreground);
sl@0
    90
	RWindowGroup gw2(ws1);
sl@0
    91
	User::LeaveIfError(gw2.Construct(EWindowGroupHandle2));
sl@0
    92
	gw2.SetOwningWindowGroup(foreground);
sl@0
    93
//
sl@0
    94
	TBuf<8> getName;
sl@0
    95
//
sl@0
    96
// Check default name is simply a null string
sl@0
    97
//
sl@0
    98
	TInt retVal = gw1.Name(getName);
sl@0
    99
	TEST(retVal==KErrNone);
sl@0
   100
	if (retVal!=KErrNone)
sl@0
   101
		INFO_PRINTF3(_L("gw1.Name(getName) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   102
sl@0
   103
	TEST(getName==_L(""));
sl@0
   104
	if (getName!=_L(""))
sl@0
   105
		INFO_PRINTF3(_L("getName==_L() - Expected: %d, Actual: %d"), ETrue, EFalse);
sl@0
   106
//
sl@0
   107
	TBuf<8> name1(_L("A_Name1"));
sl@0
   108
	TBuf<8> name2(_L("A_Name2"));
sl@0
   109
//
sl@0
   110
	retVal = gw1.SetName(name1);
sl@0
   111
	TEST(retVal==KErrNone);
sl@0
   112
	if (retVal!=KErrNone)
sl@0
   113
		INFO_PRINTF3(_L("gw1.SetName(name1) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   114
sl@0
   115
	retVal = gw2.SetName(name2);
sl@0
   116
	TEST(retVal==KErrNone);
sl@0
   117
	if (retVal!=KErrNone)
sl@0
   118
		INFO_PRINTF3(_L("(gw2.SetName(name2) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   119
sl@0
   120
	retVal = gw1.Name(getName);
sl@0
   121
	TEST(retVal==KErrNone);
sl@0
   122
	if (retVal!=KErrNone)
sl@0
   123
		INFO_PRINTF3(_L("(gw1.Name(getName) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   124
sl@0
   125
	TEST(getName==name1);
sl@0
   126
	if (getName!=name1)
sl@0
   127
		INFO_PRINTF3(_L("getName==name1 - Expected: %d, Actual: %d"), ETrue, EFalse);
sl@0
   128
//
sl@0
   129
	retVal = gw2.Name(getName);
sl@0
   130
	TEST(retVal==KErrNone);
sl@0
   131
	if (retVal!=KErrNone)
sl@0
   132
		INFO_PRINTF3(_L("(gw2.Name(getName) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   133
sl@0
   134
	TEST(getName==name2);
sl@0
   135
	if (getName!=name2)
sl@0
   136
		INFO_PRINTF3(_L("getName==name2 - Expected: %d, Actual: %d"), ETrue, EFalse);
sl@0
   137
sl@0
   138
//
sl@0
   139
// A few weird characters in the name should work fine
sl@0
   140
//
sl@0
   141
	retVal = gw2.SetName(_L("xx*"));
sl@0
   142
	TEST(retVal==KErrNone);
sl@0
   143
	if (retVal!=KErrNone)
sl@0
   144
		INFO_PRINTF3(_L("(gw2.SetName(_L(xx*)) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   145
sl@0
   146
	retVal = gw2.Name(getName);
sl@0
   147
	TEST(retVal==KErrNone);
sl@0
   148
	if (retVal!=KErrNone)
sl@0
   149
		INFO_PRINTF3(_L("(gw2.Name(getName) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   150
sl@0
   151
	TEST(getName==_L("xx*"));
sl@0
   152
	if (getName!=_L("xx*"))
sl@0
   153
		INFO_PRINTF3(_L("getName==_L(xx*) - Expected: %d, Actual: %d"), ETrue, EFalse);
sl@0
   154
sl@0
   155
//
sl@0
   156
	retVal = gw2.SetName(_L(":"));
sl@0
   157
	TEST(retVal==KErrNone);
sl@0
   158
	if (retVal!=KErrNone)
sl@0
   159
		INFO_PRINTF3(_L("(gw2.SetName(_L(:)) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   160
sl@0
   161
	retVal = gw2.Name(getName);
sl@0
   162
	TEST(retVal==KErrNone);
sl@0
   163
	if (retVal!=KErrNone)
sl@0
   164
		INFO_PRINTF3(_L("(gw2.Name(getName) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   165
sl@0
   166
	TEST(getName==_L(":"));
sl@0
   167
	if (getName!=_L(":"))
sl@0
   168
		INFO_PRINTF3(_L("getName==_L(:) - Expected: %d, Actual: %d"), ETrue, EFalse);
sl@0
   169
sl@0
   170
//
sl@0
   171
// Setting the name back to a null name
sl@0
   172
//
sl@0
   173
	retVal = gw2.SetName(_L(""));
sl@0
   174
	TEST(retVal==KErrNone);
sl@0
   175
	if (retVal!=KErrNone)
sl@0
   176
		INFO_PRINTF3(_L("gw2.SetName(_L()) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   177
sl@0
   178
	retVal = gw2.Name(getName);
sl@0
   179
	TEST(retVal==KErrNone);
sl@0
   180
	if (retVal!=KErrNone)
sl@0
   181
		INFO_PRINTF3(_L("gw2.Name(getName) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   182
sl@0
   183
	TEST(getName==_L(""));
sl@0
   184
	if (getName!=_L(""))
sl@0
   185
		INFO_PRINTF3(_L("getName==_L() - Expected: %d, Actual: %d"), ETrue, EFalse);
sl@0
   186
sl@0
   187
//
sl@0
   188
// Getting a name into a too short buffer should fill thew whole buffer from the left hand part
sl@0
   189
// of the window name and return KErrOverflow
sl@0
   190
//
sl@0
   191
	gw2.SetName(name2);
sl@0
   192
	TBuf<4> shortBuf;
sl@0
   193
	retVal = gw2.Name(shortBuf);
sl@0
   194
	TEST(retVal==KErrOverflow);
sl@0
   195
	if (retVal!=KErrOverflow)
sl@0
   196
		INFO_PRINTF3(_L("gw2.Name(shortBuf) return value - Expected: %d, Actual: %d"), KErrOverflow, retVal);
sl@0
   197
sl@0
   198
	TEST(shortBuf==name2.Left(4));
sl@0
   199
	if (shortBuf!=name2.Left(4))
sl@0
   200
		INFO_PRINTF3(_L("shortBuf==name2.Left(4) - Expected: %d, Actual: %d"), ETrue, EFalse);
sl@0
   201
sl@0
   202
//
sl@0
   203
// passing a 0 length TPtr pointing to NULL should be safe, simply returning KErrOverflow
sl@0
   204
//
sl@0
   205
	TPtr nullPtr(NULL,0);
sl@0
   206
	retVal = gw2.Name(nullPtr);
sl@0
   207
	TEST(retVal==KErrOverflow);
sl@0
   208
	if (retVal!=KErrOverflow)
sl@0
   209
		INFO_PRINTF3(_L("gw2.Name(nullPtr) return value - Expected: %d, Actual: %d"), KErrOverflow, retVal);
sl@0
   210
sl@0
   211
	TEST(nullPtr==_L(""));
sl@0
   212
	if (nullPtr!=_L(""))
sl@0
   213
		INFO_PRINTF3(_L("nullPtr==_L() - Expected: %d, Actual: %d"), ETrue, EFalse);
sl@0
   214
sl@0
   215
//
sl@0
   216
// Getting a null name into a null descriptor
sl@0
   217
//
sl@0
   218
	gw2.SetName(_L(""));
sl@0
   219
	TPtr nullPtr2(NULL,0);
sl@0
   220
	retVal = gw2.Name(nullPtr);
sl@0
   221
	TEST(retVal==KErrNone);
sl@0
   222
	if (retVal!=KErrNone)
sl@0
   223
		INFO_PRINTF3(_L("gw2.Name(nullPtr) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   224
sl@0
   225
	TEST(nullPtr2==_L(""));
sl@0
   226
	if (nullPtr2!=_L(""))
sl@0
   227
		INFO_PRINTF3(_L("nullPtr2==_L() - Expected: %d, Actual: %d"), ETrue, EFalse);
sl@0
   228
//
sl@0
   229
	gw1.Close();
sl@0
   230
	gw2.Close();
sl@0
   231
	CleanupStack::PopAndDestroy(screen);
sl@0
   232
	ws1.Close();
sl@0
   233
	}
sl@0
   234
sl@0
   235
void CTGwHandle::GwIdentifierTestL()
sl@0
   236
	{
sl@0
   237
	enum {EWindowGroupHandle1=234567};
sl@0
   238
	enum {EWindowGroupHandle2=666666};
sl@0
   239
	enum {EWindowGroupHandle3=999};
sl@0
   240
//
sl@0
   241
	CArrayFixFlat<TInt>* windowHandles=new(ELeave) CArrayFixFlat<TInt>(5);
sl@0
   242
	CleanupStack::PushL(windowHandles);
sl@0
   243
	GetGwListL(0, windowHandles);
sl@0
   244
	TInt retVal = TheClient->iWs.GetFocusWindowGroup();
sl@0
   245
	TEST(retVal==(*windowHandles)[0]);
sl@0
   246
	if (retVal!=(*windowHandles)[0])
sl@0
   247
		INFO_PRINTF3(_L("TheClient->iWs.GetFocusWindowGroup() return value - Expected: %d, Actual: %d"), (*windowHandles)[0], retVal);
sl@0
   248
sl@0
   249
//
sl@0
   250
	RWsSession ws1;
sl@0
   251
	User::LeaveIfError(ws1.Connect());
sl@0
   252
	CleanupClosePushL(ws1);
sl@0
   253
sl@0
   254
	// assign to the correct screen
sl@0
   255
	CWsScreenDevice* screen1 = new (ELeave) CWsScreenDevice(ws1);
sl@0
   256
	CleanupStack::PushL(screen1);
sl@0
   257
	User::LeaveIfError(screen1->Construct(iTest->iScreenNumber));
sl@0
   258
sl@0
   259
	RWindowGroup gw1(ws1);
sl@0
   260
	User::LeaveIfError(gw1.Construct(EWindowGroupHandle1));
sl@0
   261
	gw1.SetOwningWindowGroup((*windowHandles)[0]);
sl@0
   262
	RWsSession ws2;
sl@0
   263
	User::LeaveIfError(ws2.Connect());
sl@0
   264
	CleanupClosePushL(ws2);
sl@0
   265
sl@0
   266
	// assign to the correct screen
sl@0
   267
	CWsScreenDevice* screen2 = new (ELeave) CWsScreenDevice(ws2);
sl@0
   268
	CleanupStack::PushL(screen2);
sl@0
   269
	User::LeaveIfError(screen2->Construct(iTest->iScreenNumber));
sl@0
   270
sl@0
   271
	RWindowGroup gw2(ws2);
sl@0
   272
	User::LeaveIfError(gw2.Construct(EWindowGroupHandle2));
sl@0
   273
//
sl@0
   274
	GetGwListL(0, windowHandles);
sl@0
   275
//
sl@0
   276
sl@0
   277
	retVal = gw2.Identifier();
sl@0
   278
	TEST(retVal==(*windowHandles)[0]);
sl@0
   279
	if (retVal!=(*windowHandles)[0])
sl@0
   280
		INFO_PRINTF3(_L("gw2.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[0], retVal);
sl@0
   281
sl@0
   282
	retVal = gw1.Identifier();
sl@0
   283
	TEST(retVal==(*windowHandles)[1]);
sl@0
   284
	if (retVal!=(*windowHandles)[1])
sl@0
   285
		INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal);
sl@0
   286
sl@0
   287
	retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]);
sl@0
   288
	TEST(retVal==EWindowGroupHandle2);
sl@0
   289
	if (retVal!=EWindowGroupHandle2)
sl@0
   290
		INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle2, retVal);
sl@0
   291
sl@0
   292
	retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]);
sl@0
   293
	TEST(retVal==EWindowGroupHandle1);
sl@0
   294
	if (retVal!=EWindowGroupHandle1)
sl@0
   295
		INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle1, retVal);
sl@0
   296
//
sl@0
   297
	retVal = TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[1]);
sl@0
   298
	TEST(retVal==0);
sl@0
   299
	if (retVal!=0)
sl@0
   300
		INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[1]) return value - Expected: %d, Actual: %d"), 0, retVal);
sl@0
   301
sl@0
   302
	retVal = TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[0]);
sl@0
   303
	TEST(retVal==0);
sl@0
   304
	if (retVal!=0)
sl@0
   305
		INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[0]) return value - Expected: %d, Actual: %d"), 0, retVal);
sl@0
   306
sl@0
   307
//
sl@0
   308
	TThreadId threadId;
sl@0
   309
	TheClient->iWs.GetWindowGroupClientThreadId((*windowHandles)[0],threadId);
sl@0
   310
sl@0
   311
	TUint64 ret = RThread().Id();
sl@0
   312
	TEST(ret==threadId);
sl@0
   313
	if (ret!=threadId)
sl@0
   314
		INFO_PRINTF3(_L("RThread().Id() return value - Expected: %d, Actual: %d"), (TInt)threadId, (TInt)ret);
sl@0
   315
sl@0
   316
	TheClient->iWs.GetWindowGroupClientThreadId((*windowHandles)[1],threadId);
sl@0
   317
sl@0
   318
	TUint64 retVal2 = RThread().Id();
sl@0
   319
	TEST(retVal2==threadId);
sl@0
   320
	if (retVal2!=threadId)
sl@0
   321
		INFO_PRINTF3(_L("RThread().Id() return value - Expected: %d, Actual: %d"), (TInt)threadId, (TInt)retVal2);
sl@0
   322
//
sl@0
   323
	retVal = gw1.OrdinalPosition();
sl@0
   324
	TEST(retVal==1);
sl@0
   325
	if (retVal!=1)
sl@0
   326
		INFO_PRINTF3(_L("gw1.OrdinalPosition() return value - Expected: %d, Actual: %d"), 1, retVal);
sl@0
   327
sl@0
   328
	retVal = gw2.OrdinalPosition();
sl@0
   329
	TEST(retVal==0);
sl@0
   330
	if (retVal!=0)
sl@0
   331
		INFO_PRINTF3(_L("gw2.OrdinalPosition() return value - Expected: %d, Actual: %d"), 0, retVal);
sl@0
   332
sl@0
   333
	retVal = TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[1],0);
sl@0
   334
	TEST(retVal==KErrNone);
sl@0
   335
	if (retVal!=KErrNone)
sl@0
   336
		INFO_PRINTF3(_L("TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[1],0) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   337
sl@0
   338
	retVal = gw1.OrdinalPosition();
sl@0
   339
	TEST(retVal==0);
sl@0
   340
	if (retVal!=0)
sl@0
   341
		INFO_PRINTF3(_L("gw1.OrdinalPosition() return value - Expected: %d, Actual: %d"), 0, retVal);
sl@0
   342
sl@0
   343
	retVal = gw2.OrdinalPosition();
sl@0
   344
	TEST(retVal==1);
sl@0
   345
	if (retVal!=1)
sl@0
   346
		INFO_PRINTF3(_L("gw2.OrdinalPosition() return value - Expected: %d, Actual: %d"), 1, retVal);
sl@0
   347
//
sl@0
   348
	retVal = TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[1],1);
sl@0
   349
	TEST(retVal==KErrNone);
sl@0
   350
	if (retVal!=KErrNone)
sl@0
   351
		INFO_PRINTF3(_L("TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[1],1) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   352
sl@0
   353
	retVal = gw1.OrdinalPosition();
sl@0
   354
	TEST(retVal==1);
sl@0
   355
	if (retVal!=1)
sl@0
   356
		INFO_PRINTF3(_L("gw1.OrdinalPosition() return value - Expected: %d, Actual: %d"), 1, retVal);
sl@0
   357
sl@0
   358
	retVal = gw2.OrdinalPosition();
sl@0
   359
	TEST(retVal==0);
sl@0
   360
	if (retVal!=0)
sl@0
   361
		INFO_PRINTF3(_L("gw2.OrdinalPosition() return value - Expected: %d, Actual: %d"), 0, retVal);
sl@0
   362
sl@0
   363
	retVal = TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[0],1);
sl@0
   364
	TEST(retVal==KErrNone);
sl@0
   365
	if (retVal!=KErrNone)
sl@0
   366
		INFO_PRINTF3(_L("TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[0],1) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
   367
sl@0
   368
	GetGwListL(0, windowHandles);
sl@0
   369
	retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]);
sl@0
   370
	TEST(retVal==EWindowGroupHandle1);
sl@0
   371
	if (retVal!=EWindowGroupHandle1)
sl@0
   372
		INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle1, retVal);
sl@0
   373
sl@0
   374
	retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]);
sl@0
   375
	TEST(retVal==EWindowGroupHandle2);
sl@0
   376
	if (retVal!=EWindowGroupHandle2)
sl@0
   377
		INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle2, retVal);
sl@0
   378
//
sl@0
   379
	RWindowGroup gw3(ws2);
sl@0
   380
	User::LeaveIfError(gw3.Construct(EWindowGroupHandle3));
sl@0
   381
	gw1.SetOrdinalPosition(0,100000);	// Assume nothing else in the system is higher, else test will fail
sl@0
   382
	gw3.SetOrdinalPosition(0,100000);
sl@0
   383
	ws1.Flush();
sl@0
   384
	ws2.Flush();
sl@0
   385
//
sl@0
   386
	GetGwListL(100000, windowHandles);
sl@0
   387
	retVal = windowHandles->Count();
sl@0
   388
	TEST(retVal==2);
sl@0
   389
	if (retVal!=2)
sl@0
   390
		INFO_PRINTF3(_L("windowHandles->Count() return value - Expected: %d, Actual: %d"), 2, retVal);
sl@0
   391
sl@0
   392
	retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]);
sl@0
   393
	TEST(retVal==EWindowGroupHandle3);
sl@0
   394
	if (retVal!=EWindowGroupHandle3)
sl@0
   395
		INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle3, retVal);
sl@0
   396
sl@0
   397
	retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]);
sl@0
   398
	TEST(retVal==EWindowGroupHandle1);
sl@0
   399
	if (retVal!=EWindowGroupHandle1)
sl@0
   400
		INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle1, retVal);
sl@0
   401
sl@0
   402
//
sl@0
   403
	retVal = TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[0]);
sl@0
   404
	TEST(retVal==100000);
sl@0
   405
	if (retVal!=100000)
sl@0
   406
		INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[0]) return value - Expected: %d, Actual: %d"), 100000, retVal);
sl@0
   407
sl@0
   408
	retVal = TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[1]);
sl@0
   409
	TEST(retVal==100000);
sl@0
   410
	if (retVal!=100000)
sl@0
   411
		INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[1]) return value - Expected: %d, Actual: %d"), 100000, retVal);
sl@0
   412
//
sl@0
   413
	GetGwListL(-12453, windowHandles);	// Test 0 count, Assumes no window with priority
sl@0
   414
	retVal = windowHandles->Count();
sl@0
   415
	TEST(retVal==0);
sl@0
   416
	if (retVal!=0)
sl@0
   417
		INFO_PRINTF3(_L("windowHandles->Count() return value - Expected: %d, Actual: %d"), 0, retVal);
sl@0
   418
sl@0
   419
//
sl@0
   420
	GetGwListL(windowHandles, iTest->iScreenNumber);
sl@0
   421
	retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]);
sl@0
   422
	TEST(retVal==EWindowGroupHandle3);
sl@0
   423
	if (retVal!=EWindowGroupHandle3)
sl@0
   424
		INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle3, retVal);
sl@0
   425
sl@0
   426
	retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]);
sl@0
   427
	TEST(retVal==EWindowGroupHandle1);
sl@0
   428
	if (retVal!=EWindowGroupHandle1)
sl@0
   429
		INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle1, retVal);
sl@0
   430
//
sl@0
   431
// Check passing bad identifiers
sl@0
   432
//
sl@0
   433
	retVal = TheClient->iWs.SetWindowGroupOrdinalPosition(-1,0);
sl@0
   434
	TEST(retVal==KErrNotFound);
sl@0
   435
	if (retVal!=KErrNotFound)
sl@0
   436
		INFO_PRINTF3(_L("TheClient->iWs.SetWindowGroupOrdinalPosition(-1,0) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal);
sl@0
   437
sl@0
   438
	retVal = TheClient->iWs.GetWindowGroupHandle(-3);
sl@0
   439
	TEST(retVal==KErrNotFound);
sl@0
   440
	if (retVal!=KErrNotFound)
sl@0
   441
		INFO_PRINTF3(_L("TTheClient->iWs.GetWindowGroupHandle(-3) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal);
sl@0
   442
sl@0
   443
//
sl@0
   444
	gw1.Close();
sl@0
   445
	gw2.Close();
sl@0
   446
	gw3.Close();
sl@0
   447
	
sl@0
   448
	CleanupStack::PopAndDestroy(5, windowHandles);
sl@0
   449
	}
sl@0
   450
sl@0
   451
void CTGwHandle::OwnerToForegroundL()
sl@0
   452
	{
sl@0
   453
	enum {EWindowGroupHandle1=234567};
sl@0
   454
	enum {EWindowGroupHandle2a=666666};
sl@0
   455
	enum {EWindowGroupHandle2b=666667};
sl@0
   456
//
sl@0
   457
	CArrayFixFlat<TInt> *windowHandles=new(ELeave) CArrayFixFlat<TInt>(5);
sl@0
   458
	CleanupStack::PushL(windowHandles);
sl@0
   459
	GetGwListL(0, windowHandles);
sl@0
   460
	TInt oldForeground=(*windowHandles)[0];
sl@0
   461
//
sl@0
   462
	RWsSession ws1;
sl@0
   463
	User::LeaveIfError(ws1.Connect());
sl@0
   464
	CleanupClosePushL(ws1);
sl@0
   465
sl@0
   466
	// assign to the correct screen
sl@0
   467
	CWsScreenDevice* screen1 = new (ELeave) CWsScreenDevice(ws1);
sl@0
   468
	CleanupStack::PushL(screen1);
sl@0
   469
	User::LeaveIfError(screen1->Construct(iTest->iScreenNumber));
sl@0
   470
sl@0
   471
	RWindowGroup gw1(ws1);
sl@0
   472
	User::LeaveIfError(gw1.Construct(EWindowGroupHandle1));
sl@0
   473
	CleanupClosePushL(gw1);
sl@0
   474
	RWsSession ws2;
sl@0
   475
	User::LeaveIfError(ws2.Connect());
sl@0
   476
	CleanupClosePushL(ws2);
sl@0
   477
sl@0
   478
	// assign to the correct screen
sl@0
   479
	CWsScreenDevice* screen2 = new (ELeave) CWsScreenDevice(ws2);
sl@0
   480
	CleanupStack::PushL(screen2);
sl@0
   481
	User::LeaveIfError(screen2->Construct(iTest->iScreenNumber));
sl@0
   482
sl@0
   483
	RWindowGroup gw2a(ws2);
sl@0
   484
	User::LeaveIfError(gw2a.Construct(EWindowGroupHandle2a));
sl@0
   485
	CleanupClosePushL(gw2a);
sl@0
   486
	RWindowGroup gw2b(ws2);
sl@0
   487
	User::LeaveIfError(gw2b.Construct(EWindowGroupHandle2b));
sl@0
   488
	CleanupClosePushL(gw2b);
sl@0
   489
	gw1.SetOrdinalPosition(1);
sl@0
   490
//
sl@0
   491
// Turn auto flushing on as we're using multiple connections and it would be easy to forget to flush one
sl@0
   492
//
sl@0
   493
	ws1.SetAutoFlush(ETrue);
sl@0
   494
	ws2.SetAutoFlush(ETrue);
sl@0
   495
	TheClient->iWs.SetAutoFlush(ETrue);
sl@0
   496
//
sl@0
   497
	GetGwListL(0, windowHandles);
sl@0
   498
//
sl@0
   499
	TInt  retVal = gw2b.Identifier();
sl@0
   500
	TEST(retVal==(*windowHandles)[0]);
sl@0
   501
	if (retVal!=(*windowHandles)[0])
sl@0
   502
		INFO_PRINTF3(_L("gw2b.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[0], retVal);
sl@0
   503
sl@0
   504
	retVal = gw1.Identifier();
sl@0
   505
	TEST(retVal==(*windowHandles)[1]);
sl@0
   506
	if (retVal!=(*windowHandles)[1])
sl@0
   507
		INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal);
sl@0
   508
sl@0
   509
	retVal = gw2a.Identifier();
sl@0
   510
	TEST(retVal==(*windowHandles)[2]);
sl@0
   511
	if (retVal!=(*windowHandles)[2])
sl@0
   512
		INFO_PRINTF3(_L("gw2a.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[2], retVal);
sl@0
   513
sl@0
   514
	retVal = oldForeground;
sl@0
   515
	TEST(retVal==(*windowHandles)[3]);
sl@0
   516
	if (retVal!=(*windowHandles)[3])
sl@0
   517
		INFO_PRINTF3(_L("oldForeground - Expected: %d, Actual: %d"), (*windowHandles)[3], oldForeground);
sl@0
   518
//
sl@0
   519
	CleanupStack::PopAndDestroy(&gw2b);
sl@0
   520
	GetGwListL(0, windowHandles);
sl@0
   521
sl@0
   522
	retVal = gw2a.Identifier();
sl@0
   523
	TEST(retVal==(*windowHandles)[0]);
sl@0
   524
	if (retVal!=(*windowHandles)[0])
sl@0
   525
		INFO_PRINTF3(_L("gw2a.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[0], retVal);
sl@0
   526
	// Check 2a jumped over 1 in the ordinal list
sl@0
   527
sl@0
   528
	retVal = gw1.Identifier();
sl@0
   529
	TEST(retVal==(*windowHandles)[1]);
sl@0
   530
	if (retVal!=(*windowHandles)[1])
sl@0
   531
		INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal);
sl@0
   532
sl@0
   533
	retVal = oldForeground;
sl@0
   534
	TEST(retVal==(*windowHandles)[2]);
sl@0
   535
	if (retVal!=(*windowHandles)[2])
sl@0
   536
		INFO_PRINTF3(_L("oldForeground - Expected: %d, Actual: %d"), (*windowHandles)[2], oldForeground);
sl@0
   537
sl@0
   538
//
sl@0
   539
	User::LeaveIfError(gw2b.Construct(EWindowGroupHandle2b));
sl@0
   540
	CleanupClosePushL(gw2b);
sl@0
   541
	gw2b.SetOwningWindowGroup(oldForeground);
sl@0
   542
	CleanupStack::PopAndDestroy(&gw2b);
sl@0
   543
	GetGwListL(0, windowHandles);
sl@0
   544
	retVal = oldForeground;
sl@0
   545
	TEST(retVal==(*windowHandles)[0]);
sl@0
   546
	if (retVal!=(*windowHandles)[0])
sl@0
   547
		INFO_PRINTF3(_L("oldForeground - Expected: %d, Actual: %d"), (*windowHandles)[0], oldForeground);
sl@0
   548
	// Check old foreground bought to foreground
sl@0
   549
sl@0
   550
	retVal = gw2a.Identifier();
sl@0
   551
	TEST(retVal==(*windowHandles)[1]);
sl@0
   552
	if (retVal!=(*windowHandles)[1])
sl@0
   553
		INFO_PRINTF3(_L("gw2a.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal);
sl@0
   554
sl@0
   555
	retVal = gw1.Identifier();
sl@0
   556
	TEST(retVal==(*windowHandles)[2]);
sl@0
   557
	if (retVal!=(*windowHandles)[2])
sl@0
   558
		INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[2], retVal);
sl@0
   559
sl@0
   560
	TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[0],2);
sl@0
   561
//
sl@0
   562
	User::LeaveIfError(gw2b.Construct(EWindowGroupHandle2b));
sl@0
   563
	CleanupClosePushL(gw2b);
sl@0
   564
	gw2b.SetOwningWindowGroup((*windowHandles)[1]);
sl@0
   565
	gw2b.SetOrdinalPosition(KOrdinalPositionSwitchToOwningWindow);	// Should bring 2a to foreground
sl@0
   566
	GetGwListL(0, windowHandles);
sl@0
   567
sl@0
   568
	retVal = gw2a.Identifier();
sl@0
   569
	TEST(retVal==(*windowHandles)[0]);
sl@0
   570
	if (retVal!=(*windowHandles)[0])
sl@0
   571
		INFO_PRINTF3(_L("gw2a.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[0], retVal);
sl@0
   572
sl@0
   573
	retVal = gw2b.Identifier();
sl@0
   574
	TEST(retVal==(*windowHandles)[1]);
sl@0
   575
	if (retVal!=(*windowHandles)[1])
sl@0
   576
		INFO_PRINTF3(_L("gw2b.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal);
sl@0
   577
sl@0
   578
	retVal = gw1.Identifier();
sl@0
   579
	TEST(retVal==(*windowHandles)[2]);
sl@0
   580
	if (retVal!=(*windowHandles)[2])
sl@0
   581
		INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[2], retVal);
sl@0
   582
//
sl@0
   583
	CleanupStack::PopAndDestroy(&gw2b);
sl@0
   584
	GetGwListL(0, windowHandles);
sl@0
   585
	retVal = gw2a.Identifier();
sl@0
   586
	TEST(retVal==(*windowHandles)[0]);
sl@0
   587
	if (retVal!=(*windowHandles)[0])
sl@0
   588
		INFO_PRINTF3(_L("gw2a.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[0], retVal);
sl@0
   589
sl@0
   590
	retVal = gw1.Identifier();
sl@0
   591
	TEST(retVal==(*windowHandles)[1]);
sl@0
   592
	if (retVal!=(*windowHandles)[1])
sl@0
   593
		INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal);
sl@0
   594
//
sl@0
   595
	CleanupStack::PopAndDestroy(&gw2a);		// Should bring shell to foreground
sl@0
   596
	GetGwListL(0, windowHandles);
sl@0
   597
sl@0
   598
// check whether the shell is on
sl@0
   599
	TThreadId threadId;
sl@0
   600
	ws2.GetWindowGroupClientThreadId((*windowHandles)[0],threadId);
sl@0
   601
	TBool shellRunning=ETrue;
sl@0
   602
sl@0
   603
	TFullName shellName;
sl@0
   604
	// apply to primary screen only where SHELL is running
sl@0
   605
	TFindThread findThread(iTest->iScreenNumber==KDefaultScreen?_L("WSHELL*::*"):_L("WxSHELL*::*"));
sl@0
   606
	if(findThread.Next(shellName)==KErrNone)
sl@0
   607
		{
sl@0
   608
		RThread shell;
sl@0
   609
		User::LeaveIfError(shell.Open(shellName));
sl@0
   610
		TEST(shell.Id()==threadId);
sl@0
   611
		if (retVal!=(*windowHandles)[1])
sl@0
   612
		INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal);
sl@0
   613
sl@0
   614
		shell.Close();
sl@0
   615
		}
sl@0
   616
	else
sl@0
   617
		{
sl@0
   618
		shellRunning=EFalse;
sl@0
   619
		}
sl@0
   620
sl@0
   621
sl@0
   622
	// Check gw1 second
sl@0
   623
	retVal = gw1.Identifier();
sl@0
   624
	TEST(retVal==(*windowHandles)[shellRunning ? 1 : 0]);
sl@0
   625
	if (retVal!=(*windowHandles)[shellRunning ? 1 : 0])
sl@0
   626
		INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[shellRunning ? 1 : 0], retVal);
sl@0
   627
sl@0
   628
	retVal = oldForeground;
sl@0
   629
	TEST(retVal==(*windowHandles)[shellRunning ? 2 : 1]);
sl@0
   630
	if (retVal!=(*windowHandles)[shellRunning ? 2 : 1])
sl@0
   631
		INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[shellRunning ? 2 : 1], retVal);
sl@0
   632
	// and oldforeground second
sl@0
   633
sl@0
   634
//
sl@0
   635
	CleanupStack::PopAndDestroy(5, &ws1);
sl@0
   636
//
sl@0
   637
// Kick shell back into background, 'cause that's where it belongs
sl@0
   638
//
sl@0
   639
	TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[0],-1);
sl@0
   640
	TheClient->iWs.SetAutoFlush(EFalse);
sl@0
   641
//
sl@0
   642
	CleanupStack::PopAndDestroy(windowHandles);
sl@0
   643
	}
sl@0
   644
sl@0
   645
void CTGwHandle::FindWindowGroupIdentifierTestL()
sl@0
   646
	{
sl@0
   647
	enum {EWindowGroupHandle1=234567};
sl@0
   648
	enum {EWindowGroupHandle2=666666};
sl@0
   649
	enum {EWindowGroupHandle3=123};
sl@0
   650
	TInt foreground=TheClient->iWs.GetFocusWindowGroup();
sl@0
   651
	RWsSession ws1;
sl@0
   652
	User::LeaveIfError(ws1.Connect());
sl@0
   653
sl@0
   654
	// assign to the correct screen
sl@0
   655
	CWsScreenDevice* screen = new (ELeave) CWsScreenDevice(ws1);
sl@0
   656
	CleanupStack::PushL(screen);
sl@0
   657
	User::LeaveIfError(screen->Construct(iTest->iScreenNumber));
sl@0
   658
	CleanupStack::Pop(screen);
sl@0
   659
sl@0
   660
	CleanupClosePushL(ws1);
sl@0
   661
//
sl@0
   662
	RWindowGroup gw1(ws1);
sl@0
   663
	User::LeaveIfError(gw1.Construct(EWindowGroupHandle1));
sl@0
   664
	CleanupClosePushL(gw1);
sl@0
   665
	gw1.SetOwningWindowGroup(foreground);
sl@0
   666
	RWindowGroup gw2(ws1);
sl@0
   667
	User::LeaveIfError(gw2.Construct(EWindowGroupHandle2));
sl@0
   668
	CleanupClosePushL(gw2);
sl@0
   669
	gw1.SetOwningWindowGroup(foreground);
sl@0
   670
	RWindowGroup gw3(ws1);
sl@0
   671
	User::LeaveIfError(gw3.Construct(EWindowGroupHandle3));
sl@0
   672
	CleanupClosePushL(gw3);
sl@0
   673
	gw3.SetOwningWindowGroup(foreground);
sl@0
   674
//
sl@0
   675
	TInt id1=gw1.Identifier();
sl@0
   676
	TInt id2=gw2.Identifier();
sl@0
   677
	TInt id3=gw3.Identifier();
sl@0
   678
//
sl@0
   679
	gw1.SetName(_L("qwerty123abcd"));
sl@0
   680
	gw2.SetName(_L("123"));
sl@0
   681
	gw3.SetName(_L("qqqabcdxxx123"));
sl@0
   682
//
sl@0
   683
	TInt retVal = ws1.FindWindowGroupIdentifier(0,_L("123"),0);
sl@0
   684
	TEST(retVal==id2);
sl@0
   685
	if (retVal!=id2)
sl@0
   686
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(123),0) return value - Expected: %d, Actual: %d"), id2, retVal);
sl@0
   687
sl@0
   688
//
sl@0
   689
	retVal = ws1.FindWindowGroupIdentifier(0,_L("*123*"),0);
sl@0
   690
	TEST(retVal==id3);
sl@0
   691
	if (retVal!=id3)
sl@0
   692
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(*123*),0) return value - Expected: %d, Actual: %d"), id3, retVal);
sl@0
   693
sl@0
   694
	retVal = ws1.FindWindowGroupIdentifier(id3,_L("*123*"),0);
sl@0
   695
	TEST(retVal==id2);
sl@0
   696
	if (retVal!=id2)
sl@0
   697
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id3,_L(*123*),0) return value - Expected: %d, Actual: %d"), id2, retVal);
sl@0
   698
sl@0
   699
	retVal = ws1.FindWindowGroupIdentifier(id2,_L("*123*"),0);
sl@0
   700
	TEST(retVal==id1);
sl@0
   701
	if (retVal!=id1)
sl@0
   702
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id2,_L(*123*),0) return value - Expected: %d, Actual: %d"), id1, retVal);
sl@0
   703
sl@0
   704
//
sl@0
   705
	retVal = ws1.FindWindowGroupIdentifier(0,_L("*abcd*"),0);
sl@0
   706
	TEST(retVal==id3);
sl@0
   707
	if (retVal!=id3)
sl@0
   708
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(*abcd*),0) return value - Expected: %d, Actual: %d"), id3, retVal);
sl@0
   709
sl@0
   710
	retVal = ws1.FindWindowGroupIdentifier(id3,_L("*abcd*"),0);
sl@0
   711
	TEST(retVal==id1);
sl@0
   712
	if (retVal!=id1)
sl@0
   713
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id3,_L(*abcd*),0)return value - Expected: %d, Actual: %d"), id1, retVal);
sl@0
   714
//
sl@0
   715
	retVal = ws1.FindWindowGroupIdentifier(0,_L("*123*"),7);
sl@0
   716
	TEST(retVal==id3);
sl@0
   717
	if (retVal!=id3)
sl@0
   718
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(*123*),7)return value - Expected: %d, Actual: %d"), id3, retVal);
sl@0
   719
sl@0
   720
	retVal = ws1.FindWindowGroupIdentifier(id3,_L("*123*"),7);
sl@0
   721
	TEST(retVal==KErrNotFound);
sl@0
   722
	if (retVal!=KErrNotFound)
sl@0
   723
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id3,_L(*123*),7) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal);
sl@0
   724
sl@0
   725
	retVal = ws1.FindWindowGroupIdentifier(0,_L("*abc*"),4);
sl@0
   726
	TEST(retVal==id1);
sl@0
   727
	if (retVal!=id1)
sl@0
   728
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(*abc*),4) return value - Expected: %d, Actual: %d"), id1, retVal);
sl@0
   729
sl@0
   730
	retVal = ws1.FindWindowGroupIdentifier(id1,_L("*abc*"),4);
sl@0
   731
	TEST(retVal==KErrNotFound);
sl@0
   732
	if (retVal!=KErrNotFound)
sl@0
   733
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id1,_L(*abc*),4) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal);
sl@0
   734
sl@0
   735
	retVal = ws1.FindWindowGroupIdentifier(0,_L("xxx*"),7);
sl@0
   736
	TEST(retVal==id3);
sl@0
   737
	if (retVal!=id3)
sl@0
   738
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(xxx*),7) return value - Expected: %d, Actual: %d"), id3, retVal);
sl@0
   739
sl@0
   740
	retVal = ws1.FindWindowGroupIdentifier(0,_L("xxx*"),8);
sl@0
   741
	TEST(retVal==KErrNotFound);
sl@0
   742
	if (retVal!=KErrNotFound)
sl@0
   743
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(xxx*),8) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal);
sl@0
   744
//
sl@0
   745
	retVal = ws1.FindWindowGroupIdentifier(id1,_L("12"),0);
sl@0
   746
	TEST(retVal==KErrNotFound);
sl@0
   747
	if (retVal!=KErrNotFound)
sl@0
   748
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id1,_L(12),0) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal);
sl@0
   749
sl@0
   750
	retVal = ws1.FindWindowGroupIdentifier(id1,_L("qqq"),0);
sl@0
   751
	TEST(retVal==KErrNotFound);
sl@0
   752
	if (retVal!=KErrNotFound)
sl@0
   753
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id1,_L(qqq),0) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal);
sl@0
   754
sl@0
   755
	retVal = ws1.FindWindowGroupIdentifier(id1,_L("abcd"),3);
sl@0
   756
	TEST(retVal==KErrNotFound);
sl@0
   757
	if (retVal!=KErrNotFound)
sl@0
   758
		INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id1,_L(abcd),3) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal);
sl@0
   759
//
sl@0
   760
	delete screen;
sl@0
   761
	CleanupStack::PopAndDestroy(4, &ws1);
sl@0
   762
	}
sl@0
   763
sl@0
   764
void CTGwHandle::DefaultOwningWindowL()
sl@0
   765
	{
sl@0
   766
	TInt foreground=TheClient->iWs.GetFocusWindowGroup();
sl@0
   767
	RWsSession ws1;
sl@0
   768
	User::LeaveIfError(ws1.Connect());
sl@0
   769
sl@0
   770
	// assign to the correct screen
sl@0
   771
	CWsScreenDevice* screen = new (ELeave) CWsScreenDevice(ws1);
sl@0
   772
	CleanupStack::PushL(screen);
sl@0
   773
	User::LeaveIfError(screen->Construct(iTest->iScreenNumber));
sl@0
   774
sl@0
   775
//
sl@0
   776
	INFO_PRINTF1(_L("DefaultOwningWindow1"));
sl@0
   777
	RWindowGroup gw1(ws1);
sl@0
   778
	User::LeaveIfError(gw1.Construct(1));
sl@0
   779
	gw1.SetOwningWindowGroup(foreground);
sl@0
   780
	RWindowGroup gw2(ws1);
sl@0
   781
	User::LeaveIfError(gw2.Construct(2));
sl@0
   782
	gw2.SetOwningWindowGroup(foreground);
sl@0
   783
	RWindowGroup gw3(ws1);
sl@0
   784
	User::LeaveIfError(gw3.Construct(3));
sl@0
   785
	gw3.SetOwningWindowGroup(foreground);
sl@0
   786
	RWindowGroup gw4(ws1);
sl@0
   787
	User::LeaveIfError(gw4.Construct(4));
sl@0
   788
	gw4.SetOwningWindowGroup(foreground);
sl@0
   789
	INFO_PRINTF1(_L(" Created Group Window"));
sl@0
   790
//
sl@0
   791
	TInt prevOwningGroup=ws1.GetDefaultOwningWindow();
sl@0
   792
	gw1.DefaultOwningWindow();
sl@0
   793
	TEST(gw1.Identifier()==ws1.GetDefaultOwningWindow());
sl@0
   794
	if (gw1.Identifier()!=ws1.GetDefaultOwningWindow())
sl@0
   795
		INFO_PRINTF3(_L("gw1.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1.Identifier());
sl@0
   796
sl@0
   797
	gw2.DefaultOwningWindow();
sl@0
   798
	TEST(gw2.Identifier()==ws1.GetDefaultOwningWindow());
sl@0
   799
	if (gw2.Identifier()!=ws1.GetDefaultOwningWindow())
sl@0
   800
		INFO_PRINTF3(_L("gw2.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw2.Identifier());
sl@0
   801
sl@0
   802
	gw2.Close();
sl@0
   803
	TEST(gw1.Identifier()==ws1.GetDefaultOwningWindow());
sl@0
   804
	if (gw1.Identifier()!=ws1.GetDefaultOwningWindow())
sl@0
   805
		INFO_PRINTF3(_L("gw1.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1.Identifier());
sl@0
   806
sl@0
   807
	gw3.DefaultOwningWindow();
sl@0
   808
	gw4.DefaultOwningWindow();
sl@0
   809
	gw3.Close();
sl@0
   810
	TEST(gw4.Identifier()==ws1.GetDefaultOwningWindow());
sl@0
   811
	if (gw4.Identifier()!=ws1.GetDefaultOwningWindow())
sl@0
   812
		INFO_PRINTF3(_L("gw4.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw4.Identifier());
sl@0
   813
sl@0
   814
	gw4.Close();
sl@0
   815
	TEST(gw1.Identifier()==ws1.GetDefaultOwningWindow());
sl@0
   816
	if (gw1.Identifier()!=ws1.GetDefaultOwningWindow())
sl@0
   817
		INFO_PRINTF3(_L("gw1.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1.Identifier());
sl@0
   818
sl@0
   819
	gw1.Close();
sl@0
   820
	TEST(prevOwningGroup==ws1.GetDefaultOwningWindow());
sl@0
   821
	if (prevOwningGroup!=ws1.GetDefaultOwningWindow())
sl@0
   822
		INFO_PRINTF3(_L("prevOwningGroup==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), prevOwningGroup);
sl@0
   823
sl@0
   824
	INFO_PRINTF1(_L(" Closed Group Window"));
sl@0
   825
sl@0
   826
	User::LeaveIfError(gw1.Construct(1));
sl@0
   827
	gw1.SetOwningWindowGroup(foreground);
sl@0
   828
	User::LeaveIfError(gw2.Construct(2));
sl@0
   829
	gw2.SetOwningWindowGroup(foreground);
sl@0
   830
	User::LeaveIfError(gw3.Construct(3));
sl@0
   831
	gw3.SetOwningWindowGroup(foreground);
sl@0
   832
	INFO_PRINTF1(_L(" ReCreated Group Window"));
sl@0
   833
	gw1.DefaultOwningWindow();
sl@0
   834
	gw1.DefaultOwningWindow();
sl@0
   835
 	gw1.Close();
sl@0
   836
	gw2.DefaultOwningWindow();
sl@0
   837
	gw2.DefaultOwningWindow();
sl@0
   838
	gw3.Close();
sl@0
   839
	gw2.Close();
sl@0
   840
	INFO_PRINTF1(_L(" Re-Closed Group Window"));
sl@0
   841
sl@0
   842
	User::LeaveIfError(gw1.Construct(1));
sl@0
   843
	gw1.SetOwningWindowGroup(foreground);
sl@0
   844
	User::LeaveIfError(gw2.Construct(2));
sl@0
   845
	gw2.SetOwningWindowGroup(foreground);
sl@0
   846
	User::LeaveIfError(gw3.Construct(3));
sl@0
   847
	gw3.SetOwningWindowGroup(foreground);
sl@0
   848
	User::LeaveIfError(gw4.Construct(4));
sl@0
   849
	gw4.SetOwningWindowGroup(foreground);
sl@0
   850
	INFO_PRINTF1(_L(" ReCreated Group Window Again"));
sl@0
   851
	gw1.DefaultOwningWindow();
sl@0
   852
	gw2.DefaultOwningWindow();
sl@0
   853
	gw1.DefaultOwningWindow();
sl@0
   854
 	gw1.Close();
sl@0
   855
	gw2.Close();
sl@0
   856
	gw3.DefaultOwningWindow();
sl@0
   857
	gw4.DefaultOwningWindow();
sl@0
   858
	gw3.DefaultOwningWindow();
sl@0
   859
 	gw4.Close();
sl@0
   860
	gw3.Close();
sl@0
   861
	INFO_PRINTF1(_L(" Re-Closed Group Window Again"));
sl@0
   862
sl@0
   863
	User::LeaveIfError(gw1.Construct(1));
sl@0
   864
	gw1.DefaultOwningWindow();
sl@0
   865
	TEST(gw1.Identifier()==ws1.GetDefaultOwningWindow());
sl@0
   866
	if (gw1.Identifier()!=ws1.GetDefaultOwningWindow())
sl@0
   867
		INFO_PRINTF3(_L("gw1.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1.Identifier());
sl@0
   868
sl@0
   869
	gw1.DefaultOwningWindow();
sl@0
   870
	TEST(gw1.Identifier()==ws1.GetDefaultOwningWindow());
sl@0
   871
	if (gw1.Identifier()!=ws1.GetDefaultOwningWindow())
sl@0
   872
		INFO_PRINTF3(_L("gw1.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1.Identifier());
sl@0
   873
sl@0
   874
	User::LeaveIfError(gw2.Construct(2));
sl@0
   875
	TEST(gw1.Identifier()==ws1.GetDefaultOwningWindow());
sl@0
   876
	if (gw1.Identifier()!=ws1.GetDefaultOwningWindow())
sl@0
   877
		INFO_PRINTF3(_L("gw1.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1.Identifier());
sl@0
   878
sl@0
   879
	gw2.Close();
sl@0
   880
	gw1.Close();
sl@0
   881
sl@0
   882
	CleanupStack::PopAndDestroy(screen);
sl@0
   883
	ws1.Close();
sl@0
   884
	}
sl@0
   885
sl@0
   886
void CTGwHandle::DefaultOwningWindow2L()
sl@0
   887
//This test originally resulted in a crash, while the above test originally resulted in lockups.
sl@0
   888
	{
sl@0
   889
	RWsSession ws1;
sl@0
   890
	User::LeaveIfError(ws1.Connect());
sl@0
   891
sl@0
   892
	// assign to the correct screen
sl@0
   893
	CWsScreenDevice* screen1 = new (ELeave) CWsScreenDevice(ws1);
sl@0
   894
	CleanupStack::PushL(screen1);
sl@0
   895
	User::LeaveIfError(screen1->Construct(iTest->iScreenNumber));
sl@0
   896
sl@0
   897
	RWsSession ws2;
sl@0
   898
	User::LeaveIfError(ws2.Connect());
sl@0
   899
sl@0
   900
	// assign to the correct screen
sl@0
   901
	CWsScreenDevice* screen2 = new (ELeave) CWsScreenDevice(ws2);
sl@0
   902
	CleanupStack::PushL(screen2);
sl@0
   903
	User::LeaveIfError(screen2->Construct(iTest->iScreenNumber));
sl@0
   904
sl@0
   905
//
sl@0
   906
	RWindowGroup gw1(ws1);
sl@0
   907
	User::LeaveIfError(gw1.Construct(1));
sl@0
   908
	RWindowGroup gw2(ws2);
sl@0
   909
	User::LeaveIfError(gw2.Construct(2));
sl@0
   910
	RWindowGroup gw3(ws1);
sl@0
   911
	User::LeaveIfError(gw3.Construct(3));
sl@0
   912
//
sl@0
   913
	const TInt gw1Id=gw1.Identifier();
sl@0
   914
	gw1.DefaultOwningWindow();
sl@0
   915
	gw2.DefaultOwningWindow();
sl@0
   916
	/*const TInt gw2Id=*/gw2.Identifier();
sl@0
   917
	gw1.DefaultOwningWindow();
sl@0
   918
	TEST(gw1Id==ws1.GetDefaultOwningWindow());
sl@0
   919
	if (gw1Id!=ws1.GetDefaultOwningWindow())
sl@0
   920
		INFO_PRINTF3(_L("gw1Id==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1Id);
sl@0
   921
sl@0
   922
	gw3.DefaultOwningWindow();
sl@0
   923
	gw3.Close();
sl@0
   924
	TEST(gw1Id==ws1.GetDefaultOwningWindow());
sl@0
   925
	if (gw1Id!=ws1.GetDefaultOwningWindow())
sl@0
   926
		INFO_PRINTF3(_L("gw1Id==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1Id);
sl@0
   927
sl@0
   928
	gw1.Close();
sl@0
   929
	TInt gw2Id=gw2.Identifier();
sl@0
   930
	TEST(gw2Id==ws1.GetDefaultOwningWindow());
sl@0
   931
	if (gw2Id!=ws1.GetDefaultOwningWindow())
sl@0
   932
		INFO_PRINTF3(_L("gw2Id==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw2Id);
sl@0
   933
sl@0
   934
	gw2.SetOrdinalPosition(0);
sl@0
   935
	gw2.Close();
sl@0
   936
	ws2.Flush();
sl@0
   937
	TRawEvent rawEvent;
sl@0
   938
	rawEvent.Set(TRawEvent::EKeyDown,32);
sl@0
   939
	TheClient->iWs.SimulateRawEvent(rawEvent);
sl@0
   940
	TheClient->iWs.Flush();
sl@0
   941
//
sl@0
   942
	CleanupStack::PopAndDestroy(2,screen1);
sl@0
   943
	ws1.Close();
sl@0
   944
	ws2.Close();
sl@0
   945
	}
sl@0
   946
sl@0
   947
#define FREQ 500
sl@0
   948
void CTGwHandle::IdentifierWrapAroundTestL()
sl@0
   949
	{
sl@0
   950
	TInt report=-1;
sl@0
   951
	RWsSession ws1;
sl@0
   952
	User::LeaveIfError(ws1.Connect());
sl@0
   953
sl@0
   954
	// assign to the correct screen
sl@0
   955
	CWsScreenDevice* screen = new (ELeave) CWsScreenDevice(ws1);
sl@0
   956
	CleanupStack::PushL(screen);
sl@0
   957
	User::LeaveIfError(screen->Construct(iTest->iScreenNumber));
sl@0
   958
sl@0
   959
	RWindowGroup gw1(ws1);
sl@0
   960
	User::LeaveIfError(gw1.Construct(1));
sl@0
   961
	gw1.EnableReceiptOfFocus(EFalse);
sl@0
   962
	TInt id1=gw1.Identifier();
sl@0
   963
	RWindowGroup gw2(ws1);
sl@0
   964
	User::LeaveIfError(gw2.Construct(2));
sl@0
   965
	gw2.EnableReceiptOfFocus(EFalse);
sl@0
   966
	TInt id2=gw2.Identifier();
sl@0
   967
	gw2.Close();	// Allow gw2 id to be re-used
sl@0
   968
	TInt id3;
sl@0
   969
sl@0
   970
	do
sl@0
   971
		{
sl@0
   972
		RWindowGroup gw3(ws1);
sl@0
   973
		User::LeaveIfError(gw3.Construct(2));
sl@0
   974
		gw3.EnableReceiptOfFocus(EFalse);
sl@0
   975
		id3=gw3.Identifier();
sl@0
   976
		if ((id3/FREQ)!=(report/FREQ))	// || id3<=10)
sl@0
   977
			{
sl@0
   978
			report=id3;
sl@0
   979
			iTest->LogMessage(id3);
sl@0
   980
			}
sl@0
   981
		TEST(id3!=id1);	// Check id1 is not re-used as the window hasn't been freed yet
sl@0
   982
		if (id3==id1)
sl@0
   983
			{
sl@0
   984
			_LIT(KErr,"Window Group Id Reused!");
sl@0
   985
			LOG_MESSAGE(KErr);
sl@0
   986
			}
sl@0
   987
		gw3.Close();
sl@0
   988
		} while(id3!=id2);
sl@0
   989
sl@0
   990
	CleanupStack::PopAndDestroy(screen);
sl@0
   991
	ws1.Close();
sl@0
   992
	}
sl@0
   993
sl@0
   994
void GwHandleDestroyWindow(TAny* aWindow)
sl@0
   995
	{
sl@0
   996
	static_cast<RWindowTreeNode*>(aWindow)->Destroy();
sl@0
   997
	}
sl@0
   998
sl@0
   999
RWindowGroup* CTGwHandle::CreateWindowGroupLC(RWsSession& aWs,TUint32 aClientHandle,TInt aParentId/*=0*/)
sl@0
  1000
	{
sl@0
  1001
	RWindowGroup* gw=new(ELeave) RWindowGroup(aWs);
sl@0
  1002
	CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,gw));
sl@0
  1003
	if (aParentId>0)
sl@0
  1004
		{
sl@0
  1005
		User::LeaveIfError(gw->ConstructChildApp(aParentId,aClientHandle,EFalse));
sl@0
  1006
		}
sl@0
  1007
	else
sl@0
  1008
		{
sl@0
  1009
		User::LeaveIfError(gw->Construct(aClientHandle,EFalse));
sl@0
  1010
		}
sl@0
  1011
	return gw;
sl@0
  1012
	}
sl@0
  1013
sl@0
  1014
void CTGwHandle::CreateGroupWindowsLC(RWsSession& aWs)
sl@0
  1015
	{
sl@0
  1016
	for(TInt ii=ENumGroups-1;ii>=0;--ii)
sl@0
  1017
		iGroups[ii]=CreateWindowGroupLC(aWs,ii);
sl@0
  1018
	}
sl@0
  1019
sl@0
  1020
void CTGwHandle::CreateChainedGroupWindowsLC(RWsSession& aWs,TBool aSecondChain)
sl@0
  1021
	{
sl@0
  1022
	TInt parentId=0;
sl@0
  1023
	for(TInt ii=ENumChained-1;ii>=0;--ii)
sl@0
  1024
		{
sl@0
  1025
		iChained[ii]=CreateWindowGroupLC(aWs,ENumGroups+ii,parentId);
sl@0
  1026
		parentId=iChained[ii]->Identifier();
sl@0
  1027
		}
sl@0
  1028
	if(aSecondChain)
sl@0
  1029
		{
sl@0
  1030
		parentId =0;
sl@0
  1031
		for(TInt ii=ENumChained-1;ii>=0;--ii)
sl@0
  1032
			{
sl@0
  1033
			iChained2[ii]=CreateWindowGroupLC(aWs,ENumGroups+ENumGroups+ii,parentId);
sl@0
  1034
			parentId=iChained2[ii]->Identifier();
sl@0
  1035
			}
sl@0
  1036
		}
sl@0
  1037
	}
sl@0
  1038
sl@0
  1039
void CTGwHandle::MoveGroups(RWindowGroup** aGroups,TInt aGp,TInt aNum,TInt aPos,TInt aInc/*=2*/)
sl@0
  1040
	{
sl@0
  1041
	TInt ii;
sl@0
  1042
	for(ii=aNum;ii>0;--ii)
sl@0
  1043
		{
sl@0
  1044
		aGroups[aGp]->SetOrdinalPosition(aPos);
sl@0
  1045
		aGp+=(aInc>0?1:-1);
sl@0
  1046
		aPos+=aInc;
sl@0
  1047
		}
sl@0
  1048
	}
sl@0
  1049
sl@0
  1050
void CTGwHandle::TestGroups(TInt aPos)
sl@0
  1051
	{
sl@0
  1052
	TInt retVal;
sl@0
  1053
	TInt ii = 0;
sl@0
  1054
	for(ii=0;ii<ENumChained;++ii)
sl@0
  1055
		{
sl@0
  1056
		retVal = iChained[ii]->OrdinalPosition();
sl@0
  1057
		TEST(retVal==aPos+ii);
sl@0
  1058
		if (retVal!=aPos+ii)
sl@0
  1059
			INFO_PRINTF3(_L("iChained[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), aPos+ii, retVal);
sl@0
  1060
		}
sl@0
  1061
sl@0
  1062
	for(ii=0;ii<ENumGroups;++ii)
sl@0
  1063
		{
sl@0
  1064
		retVal = iGroups[ii]->OrdinalPosition();
sl@0
  1065
		TInt ret = (ii<aPos?ii:ii+ENumChained);
sl@0
  1066
		TEST(retVal==ret);
sl@0
  1067
		if (retVal!=ret)
sl@0
  1068
			INFO_PRINTF3(_L("iGroups[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), ret, retVal);
sl@0
  1069
		}
sl@0
  1070
	}
sl@0
  1071
sl@0
  1072
void CTGwHandle::TestGroupsBefore(TInt aPos)
sl@0
  1073
	{
sl@0
  1074
	TInt ii;
sl@0
  1075
	TInt retVal;
sl@0
  1076
	if (aPos>0)
sl@0
  1077
		{
sl@0
  1078
		for (ii=0;ii<aPos;++ii)
sl@0
  1079
			{
sl@0
  1080
			retVal = iGroups[ii]->OrdinalPosition();
sl@0
  1081
			TEST(retVal==ii);
sl@0
  1082
			if (retVal!=ii)
sl@0
  1083
				INFO_PRINTF3(_L("iGroups[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), ii, retVal);
sl@0
  1084
			}
sl@0
  1085
		}
sl@0
  1086
	for (ii=0;ii<ENumChained;++ii)
sl@0
  1087
		{
sl@0
  1088
		retVal = iChained[ii]->OrdinalPosition();
sl@0
  1089
		TEST(retVal==aPos+2*ii);
sl@0
  1090
		if (retVal!=aPos+2*ii)
sl@0
  1091
			INFO_PRINTF3(_L("iChained[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), aPos+2*ii, retVal);
sl@0
  1092
		}
sl@0
  1093
	for (ii=0;ii<ENumChained-1;++ii)
sl@0
  1094
		{
sl@0
  1095
		retVal = iGroups[aPos+ii]->OrdinalPosition();
sl@0
  1096
		TEST(retVal==aPos+1+2*ii);
sl@0
  1097
		if (retVal!=aPos+1+2*ii)
sl@0
  1098
			INFO_PRINTF3(_L("iGroups[aPos+ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), aPos+1+2*ii, retVal);
sl@0
  1099
		}
sl@0
  1100
	for (ii=aPos+ENumChained-1;ii<ENumGroups;++ii)
sl@0
  1101
		{
sl@0
  1102
		retVal = iGroups[ii]->OrdinalPosition();
sl@0
  1103
		TEST(retVal==ii+ENumChained);
sl@0
  1104
		if (retVal!=ii+ENumChained)
sl@0
  1105
			INFO_PRINTF3(_L("iGroups[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), ii+ENumChained, retVal);
sl@0
  1106
		}
sl@0
  1107
	}
sl@0
  1108
sl@0
  1109
void CTGwHandle::WindowGroupChaining()
sl@0
  1110
	{
sl@0
  1111
	RWsSession& ws=TheClient->iWs;
sl@0
  1112
	CreateGroupWindowsLC(ws);
sl@0
  1113
	CreateChainedGroupWindowsLC(ws);
sl@0
  1114
	TestGroups(0);
sl@0
  1115
	TInt start,target,moveGp;
sl@0
  1116
	for(moveGp=0;moveGp<ENumChained;++moveGp)
sl@0
  1117
		{
sl@0
  1118
		for(target=0;target<ENumGroups+1;++target)
sl@0
  1119
			{
sl@0
  1120
			for(start=0;start<ENumGroups-ENumChained+2;++start)
sl@0
  1121
				{
sl@0
  1122
				if (target>start+1)
sl@0
  1123
					MoveGroups(iGroups,target-1,target-start-1,ENumChained+target-1,-1);
sl@0
  1124
				if (target<start && start>0)
sl@0
  1125
					MoveGroups(iGroups,0,start,0,1);
sl@0
  1126
				MoveGroups(iGroups,start,ENumChained-1,start+1);
sl@0
  1127
				TestGroupsBefore(start);
sl@0
  1128
				iChained[moveGp]->SetOrdinalPosition(target+moveGp);
sl@0
  1129
				TestGroups(target);
sl@0
  1130
				}
sl@0
  1131
			}
sl@0
  1132
		iChained[0]->SetOrdinalPosition(0);
sl@0
  1133
		TestGroups(0);
sl@0
  1134
		}
sl@0
  1135
	CleanupStack::PopAndDestroy(ENumGroups+ENumChained,iGroups[ENumGroups-1]);
sl@0
  1136
	}
sl@0
  1137
sl@0
  1138
void CTGwHandle::WindowGroupChaining2()
sl@0
  1139
	{
sl@0
  1140
	RWsSession& ws=TheClient->iWs;
sl@0
  1141
	RWindowGroup* chain1=CreateWindowGroupLC(ws,1);
sl@0
  1142
	chain1->SetOrdinalPosition(0,1);
sl@0
  1143
	RWindowGroup* chain2=CreateWindowGroupLC(ws,2,chain1->Identifier());
sl@0
  1144
	TInt retVal = chain2->OrdinalPriority();
sl@0
  1145
	TEST(retVal==1);
sl@0
  1146
	if (retVal!=1)
sl@0
  1147
			INFO_PRINTF3(_L("chain2->OrdinalPriority() return value - Expected: %d, Actual: %d"), 1, retVal);
sl@0
  1148
sl@0
  1149
	chain1->SetOrdinalPosition(0,2);
sl@0
  1150
	retVal = chain2->OrdinalPriority();
sl@0
  1151
	TEST(retVal==2);
sl@0
  1152
	if (retVal!=2)
sl@0
  1153
			INFO_PRINTF3(_L("chain2->OrdinalPriority() return value - Expected: %d, Actual: %d"), 2, retVal);
sl@0
  1154
sl@0
  1155
	chain2->SetOrdinalPosition(0,3);
sl@0
  1156
	retVal = chain1->OrdinalPriority();
sl@0
  1157
	TEST(retVal==3);
sl@0
  1158
	if (retVal!=3)
sl@0
  1159
			INFO_PRINTF3(_L("chain1->OrdinalPriority() return value - Expected: %d, Actual: %d"), 3, retVal);
sl@0
  1160
sl@0
  1161
	CleanupStack::PopAndDestroy(2,chain1);
sl@0
  1162
	
sl@0
  1163
	//Test that two different sessions can't chain window-groups without permisson.
sl@0
  1164
	//Both sessions must use the same screen.
sl@0
  1165
	RWsSession ws2;
sl@0
  1166
	User::LeaveIfError(ws2.Connect());
sl@0
  1167
	CleanupClosePushL(ws2);
sl@0
  1168
	chain1=CreateWindowGroupLC(ws2,1);
sl@0
  1169
	TInt id1=chain1->Identifier();
sl@0
  1170
	
sl@0
  1171
	RWsSession ws3;
sl@0
  1172
	User::LeaveIfError(ws3.Connect());
sl@0
  1173
	CleanupClosePushL(ws3);
sl@0
  1174
	RWindowGroup chain(ws3);
sl@0
  1175
	
sl@0
  1176
	RDebug::Print(KPlatsecBegin);
sl@0
  1177
	retVal = chain.ConstructChildApp(id1,2);
sl@0
  1178
	TEST(retVal==KErrPermissionDenied);
sl@0
  1179
	if (retVal!=KErrPermissionDenied)
sl@0
  1180
			INFO_PRINTF3(_L("chain.ConstructChildApp(id1,2) return value - Expected: %d, Actual: %d"), KErrPermissionDenied, retVal);
sl@0
  1181
sl@0
  1182
	RDebug::Print(KPlatsecEnd);
sl@0
  1183
	chain1->AllowProcessToCreateChildWindowGroups(TUid::Uid(0x10205152));	//Secure ID
sl@0
  1184
	retVal = chain.ConstructChildApp(id1,2);
sl@0
  1185
	TEST(retVal==KErrNone);
sl@0
  1186
	if (retVal!=KErrNone)
sl@0
  1187
			INFO_PRINTF3(_L("chain.ConstructChildApp(id1,2) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
  1188
sl@0
  1189
	chain.Close();
sl@0
  1190
	CleanupStack::PopAndDestroy(3,&ws2);
sl@0
  1191
	}
sl@0
  1192
sl@0
  1193
void CTGwHandle::UnchainWindowGroupsL()
sl@0
  1194
	{
sl@0
  1195
	RArray<RWsSession::TWindowGroupChainInfo>* windowHandles=new(ELeave) RArray<RWsSession::TWindowGroupChainInfo>;
sl@0
  1196
	CleanupStack::PushL(windowHandles);
sl@0
  1197
	CleanupClosePushL(*windowHandles);
sl@0
  1198
	GetGwListL(0,windowHandles);
sl@0
  1199
	TInt shellWindow=windowHandles->Count();
sl@0
  1200
	//Creating chained window groups.
sl@0
  1201
	CreateChainedGroupWindowsLC(TheClient->iWs);
sl@0
  1202
	GetGwListL(0,windowHandles);
sl@0
  1203
	//Test total window groups in the list
sl@0
  1204
	TInt retVal = windowHandles->Count();
sl@0
  1205
	TEST(retVal==ENumChained+shellWindow);
sl@0
  1206
	if (retVal!=ENumChained+shellWindow)
sl@0
  1207
			INFO_PRINTF3(_L("windowHandles->Count() return value - Expected: %d, Actual: %d"), ENumChained+shellWindow, retVal);
sl@0
  1208
	//Two unchained group windows
sl@0
  1209
sl@0
  1210
	//Test Parent Id
sl@0
  1211
	TInt parentId=0;
sl@0
  1212
	for(TInt ii=ENumChained-1;ii>=0;ii--)
sl@0
  1213
		{
sl@0
  1214
		RWsSession::TWindowGroupChainInfo window;
sl@0
  1215
		window.iId=iChained[ii]->Identifier();
sl@0
  1216
		TInt loc=windowHandles->Find(window);
sl@0
  1217
		TEST(loc!=KErrNotFound);
sl@0
  1218
		if (loc==KErrNotFound)
sl@0
  1219
			INFO_PRINTF3(_L("windowHandles->Find(window) return value - Expected: %d, Actual: %d"), KErrNotFound, loc);
sl@0
  1220
sl@0
  1221
		if(loc!=KErrNotFound)
sl@0
  1222
			{
sl@0
  1223
			TEST((*windowHandles)[loc].iParentId==parentId);
sl@0
  1224
			if ((*windowHandles)[loc].iParentId!=parentId)
sl@0
  1225
				INFO_PRINTF3(_L("(*windowHandles)[loc].iParentId==parentId - Expected: %d, Actual: %d"), parentId, (*windowHandles)[loc].iParentId);
sl@0
  1226
sl@0
  1227
			parentId=window.iId;
sl@0
  1228
			}
sl@0
  1229
		}
sl@0
  1230
	//Test unchaining of chained window groups
sl@0
  1231
	for(TInt count=ENumChained-1;count>=0;count--)
sl@0
  1232
		{
sl@0
  1233
		iChained[count]->Close();
sl@0
  1234
		GetGwListL(0,windowHandles);
sl@0
  1235
		TEST(windowHandles->Count()== count+shellWindow);
sl@0
  1236
		if (windowHandles->Count()!= count+shellWindow)
sl@0
  1237
				INFO_PRINTF3(_L("windowHandles->Count()==count+shellWindow - Expected: %d, Actual: %d"), count+shellWindow, windowHandles->Count());
sl@0
  1238
sl@0
  1239
		}
sl@0
  1240
	CleanupStack::PopAndDestroy(ENumChained,iChained[ENumChained-1]);
sl@0
  1241
sl@0
  1242
	//delete middle windowgroup of chain which should kill all the child windows
sl@0
  1243
	CreateChainedGroupWindowsLC(TheClient->iWs);
sl@0
  1244
	TInt windowPos=2;
sl@0
  1245
	CleanupStack::Pop(2,iChained[1]);	//Pop first 2 items iChained[0] and iChained[1]
sl@0
  1246
	iChained[windowPos]->Close();//Close the 3rd WindowGroup in the chain.should unchain 4 and 5 window group.
sl@0
  1247
	CleanupStack::PopAndDestroy(iChained[windowPos]);
sl@0
  1248
	CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,iChained[1]));
sl@0
  1249
	CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,iChained[0]));
sl@0
  1250
	GetGwListL(0,windowHandles);
sl@0
  1251
	retVal = ChainedWindowCount(windowHandles);
sl@0
  1252
	TEST(retVal==ENumChained-windowPos-1);
sl@0
  1253
	if (retVal!=ENumChained-windowPos-1)
sl@0
  1254
				INFO_PRINTF3(_L("ChainedWindowCount(windowHandles) return value - Expected: %d, Actual: %d"), ENumChained-windowPos-1, retVal);
sl@0
  1255
sl@0
  1256
//	CleanupStack::PopAndDestroy(ENumChained-1,iChained[ENumChained-1]);
sl@0
  1257
sl@0
  1258
	windowPos=3;
sl@0
  1259
	CleanupStack::Pop(2,iChained[1]);
sl@0
  1260
	iChained[windowPos]->Close();//Close the 2nd WindowGroup in the chain.
sl@0
  1261
								//should unchain all .
sl@0
  1262
	CleanupStack::PopAndDestroy(iChained[windowPos]);
sl@0
  1263
	CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,iChained[1]));
sl@0
  1264
	CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,iChained[0]));
sl@0
  1265
	GetGwListL(0,windowHandles);
sl@0
  1266
	retVal = ChainedWindowCount(windowHandles);
sl@0
  1267
	TEST(retVal==ENumChained-windowPos-2);
sl@0
  1268
	if (retVal!=ENumChained-windowPos-2)
sl@0
  1269
				INFO_PRINTF3(_L("ChainedWindowCount(windowHandles) return value - Expected: %d, Actual: %d"), ENumChained-windowPos-2, retVal);
sl@0
  1270
sl@0
  1271
	windowPos=4;
sl@0
  1272
	CleanupStack::Pop(2,iChained[1]);
sl@0
  1273
	iChained[windowPos]->Close();//Closing parent window group in chain. There should be no chain
sl@0
  1274
	CleanupStack::PopAndDestroy(iChained[windowPos]);
sl@0
  1275
	CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,iChained[1]));
sl@0
  1276
	CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,iChained[0]));
sl@0
  1277
	GetGwListL(0,windowHandles);
sl@0
  1278
	retVal = ChainedWindowCount(windowHandles);
sl@0
  1279
	TEST(retVal==ENumChained-windowPos-1);
sl@0
  1280
	if (retVal!=ENumChained-windowPos-1)
sl@0
  1281
				INFO_PRINTF3(_L("ChainedWindowCount(windowHandles) return value - Expected: %d, Actual: %d"), ENumChained-windowPos-1, retVal);
sl@0
  1282
sl@0
  1283
	CleanupStack::PopAndDestroy(ENumChained-3,iChained[ENumChained-4]);
sl@0
  1284
	windowHandles->Close();
sl@0
  1285
	CleanupStack::PopAndDestroy(windowHandles); // causes windowsHandles->Close() called
sl@0
  1286
	CleanupStack::PopAndDestroy(windowHandles); // causes delete windowsHandles	called
sl@0
  1287
	}
sl@0
  1288
sl@0
  1289
TInt CTGwHandle::ChainedWindowCount(RArray<RWsSession::TWindowGroupChainInfo>* aWindowHandles)
sl@0
  1290
	{
sl@0
  1291
	TInt wndGrpCount=0;
sl@0
  1292
	for(TInt ii=0;ii<aWindowHandles->Count();ii++)
sl@0
  1293
		{
sl@0
  1294
		if((*aWindowHandles)[ii].iParentId!=-1)
sl@0
  1295
			wndGrpCount++;
sl@0
  1296
		}
sl@0
  1297
	return wndGrpCount;
sl@0
  1298
	}
sl@0
  1299
sl@0
  1300
void CTGwHandle::TestOrdinalPositionL()
sl@0
  1301
	{
sl@0
  1302
	TInt noOfGroupWnds = NumberOfWndGroupsWithZeroPriority(iTest->iScreenNumber);
sl@0
  1303
	//Creating the chained window groups
sl@0
  1304
	CreateChainedGroupWindowsLC(TheClient->iWs);
sl@0
  1305
	TestOrdinalPos(0);
sl@0
  1306
	//Test the ordinal position of all chained windows by setting the WndPos window
sl@0
  1307
	//to chainPos position
sl@0
  1308
	for(TInt wndPos=0;wndPos<ENumChained;wndPos++)
sl@0
  1309
		{
sl@0
  1310
		for(TInt chainPos=0;chainPos<15;chainPos++)
sl@0
  1311
			{
sl@0
  1312
			iChained[wndPos]->SetOrdinalPosition(chainPos);
sl@0
  1313
			TInt dung = chainPos-wndPos;
sl@0
  1314
			if(dung > noOfGroupWnds)
sl@0
  1315
				{
sl@0
  1316
				dung = noOfGroupWnds;
sl@0
  1317
				}
sl@0
  1318
			dung = Max(dung, 0);
sl@0
  1319
			TestOrdinalPos(chainPos - wndPos > noOfGroupWnds ? noOfGroupWnds : Max(chainPos - wndPos, 0));
sl@0
  1320
			}
sl@0
  1321
		}
sl@0
  1322
	//Test for negative ordinal number
sl@0
  1323
	iChained[0]->SetOrdinalPosition(-2);
sl@0
  1324
	TestOrdinalPos(noOfGroupWnds);
sl@0
  1325
	CleanupStack::PopAndDestroy(ENumChained,iChained[ENumChained-1]);
sl@0
  1326
	}
sl@0
  1327
sl@0
  1328
void CTGwHandle::TestOrdinalPositionNoDebugL()
sl@0
  1329
	{
sl@0
  1330
	TInt noOfGroupWnds = NumberOfWndGroupsWithZeroPriority(iTest->iScreenNumber);
sl@0
  1331
	//Creating the chained window groups
sl@0
  1332
	CreateChainedGroupWindowsLC(TheClient->iWs);
sl@0
  1333
	//Test the ordinal position of all chained windows
sl@0
  1334
	TestOrdinalPosNoDebug(0);
sl@0
  1335
	//Test the ordinal position of all chained windows by setting the WndPos window
sl@0
  1336
	//to chainPos position
sl@0
  1337
	for(TInt wndPos=0;wndPos<ENumChained;wndPos++)
sl@0
  1338
		{
sl@0
  1339
		for(TInt chainPos=0;chainPos<15;chainPos++)
sl@0
  1340
			{
sl@0
  1341
			iChained[wndPos]->SetOrdinalPosition(chainPos);
sl@0
  1342
			TestOrdinalPosNoDebug(chainPos - wndPos > noOfGroupWnds ? noOfGroupWnds : Max(chainPos - wndPos, 0));
sl@0
  1343
			}
sl@0
  1344
		}
sl@0
  1345
	//Test for negative ordinal number
sl@0
  1346
	iChained[0]->SetOrdinalPosition(-2);
sl@0
  1347
	TestOrdinalPosNoDebug(noOfGroupWnds);
sl@0
  1348
	CleanupStack::PopAndDestroy(ENumChained,iChained[ENumChained-1]);
sl@0
  1349
	}
sl@0
  1350
sl@0
  1351
void CTGwHandle::TestOrdinalPos(TInt aPos)
sl@0
  1352
	{
sl@0
  1353
	for(TInt ii=0;ii<ENumChained;ii++)
sl@0
  1354
		{
sl@0
  1355
		TInt iCha = iChained[ii]->OrdinalPosition();
sl@0
  1356
		TEST(iCha==aPos++);
sl@0
  1357
		if (iCha!=aPos-1)
sl@0
  1358
			{
sl@0
  1359
			INFO_PRINTF3(_L("iChained[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), aPos-1, iCha);
sl@0
  1360
			}
sl@0
  1361
		}
sl@0
  1362
	}
sl@0
  1363
sl@0
  1364
void CTGwHandle::TestOrdinalPosNoDebug(TInt aPos)
sl@0
  1365
	{
sl@0
  1366
	for(TInt ii=0;ii<ENumChained;ii++)
sl@0
  1367
		{
sl@0
  1368
		TInt iCha = iChained[ii]->OrdinalPosition();
sl@0
  1369
		TEST(iCha==aPos++);
sl@0
  1370
		if (iCha!=aPos-1)
sl@0
  1371
			INFO_PRINTF3(_L("iChained[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), aPos-1, iCha);
sl@0
  1372
sl@0
  1373
		}
sl@0
  1374
	}
sl@0
  1375
sl@0
  1376
void CTGwHandle:: TestclosingclientL()
sl@0
  1377
	{
sl@0
  1378
	RWsSession ws1;
sl@0
  1379
	User::LeaveIfError(ws1.Connect());
sl@0
  1380
	CleanupClosePushL(ws1);
sl@0
  1381
sl@0
  1382
	// assign to the correct screen
sl@0
  1383
	CWsScreenDevice* screen = new (ELeave) CWsScreenDevice(ws1);
sl@0
  1384
	CleanupStack::PushL(screen);
sl@0
  1385
	User::LeaveIfError(screen->Construct(iTest->iScreenNumber));
sl@0
  1386
sl@0
  1387
	// Creating first Window Group
sl@0
  1388
	RWindowGroup gw1(ws1);
sl@0
  1389
	User::LeaveIfError(gw1.Construct(ENullWsHandle));
sl@0
  1390
	ws1.SetWindowGroupOrdinalPosition(gw1.Identifier(),0);
sl@0
  1391
sl@0
  1392
	// Creating second Window Group
sl@0
  1393
	RWindowGroup gw2(ws1);
sl@0
  1394
	User::LeaveIfError(gw2.Construct(ENullWsHandle));
sl@0
  1395
	gw2.SetOwningWindowGroup(gw1.Identifier());
sl@0
  1396
	gw2.SetOrdinalPosition(1);
sl@0
  1397
	CleanupStack::PopAndDestroy(screen);
sl@0
  1398
	CleanupStack::PopAndDestroy(&ws1);
sl@0
  1399
	}
sl@0
  1400
sl@0
  1401
void CTGwHandle::TestClearingAndSettingChildGroupsL()
sl@0
  1402
	{
sl@0
  1403
	RArray<RWsSession::TWindowGroupChainInfo> windowHandles;
sl@0
  1404
	CleanupClosePushL(windowHandles);
sl@0
  1405
	//Creating a chain of 5 window groups.
sl@0
  1406
	CreateChainedGroupWindowsLC(TheClient->iWs);
sl@0
  1407
	TInt ret=KErrNone;
sl@0
  1408
	// Want to test clearing and setting of window groups for chain lengths of 5 down to 2
sl@0
  1409
	for(TInt jj=ENumChained-1;jj>0;jj--)
sl@0
  1410
		{
sl@0
  1411
		// For each window group in the chain, test clearing and setting a child group
sl@0
  1412
		for(TInt ii=jj;ii>0;ii--)
sl@0
  1413
			{
sl@0
  1414
			RWsSession::TWindowGroupChainInfo window1;
sl@0
  1415
			window1.iId=iChained[ii]->Identifier();
sl@0
  1416
			GetGwListL(0,&windowHandles);
sl@0
  1417
			TInt loc=windowHandles.Find(window1);
sl@0
  1418
			TEST(loc!=KErrNotFound);
sl@0
  1419
			if(loc!=KErrNotFound)
sl@0
  1420
				{
sl@0
  1421
				RWsSession::TWindowGroupChainInfo window2;
sl@0
  1422
				window2.iId=iChained[ii-1]->Identifier();
sl@0
  1423
				loc = windowHandles.Find(window2);
sl@0
  1424
				TEST(loc!=KErrNotFound);
sl@0
  1425
				// First test that the parent of the next window in the chain is the previous in the chain
sl@0
  1426
				if(loc!=KErrNotFound)
sl@0
  1427
					{
sl@0
  1428
					TEST(windowHandles[loc].iParentId==window1.iId);
sl@0
  1429
					}
sl@0
  1430
				// Then clear and test that the parent of the next window in the chain
sl@0
  1431
				// is no longer the previous window in the chain
sl@0
  1432
				ret=iChained[ii]->ClearChildGroup();
sl@0
  1433
				TEST(ret==KErrNone);
sl@0
  1434
				// Try to clear a child group when it's already cleared - should return KErrArgument
sl@0
  1435
				ret=iChained[ii]->ClearChildGroup();
sl@0
  1436
				TEST(ret==KErrArgument);
sl@0
  1437
				GetGwListL(0,&windowHandles);
sl@0
  1438
				loc = windowHandles.Find(window2);
sl@0
  1439
				TEST(loc!=KErrNotFound);
sl@0
  1440
				// Test that it has no parent (0) or is unchained (-1)
sl@0
  1441
				if(loc!=KErrNotFound)
sl@0
  1442
					{
sl@0
  1443
					if(ii==1) // last in chain therefore unchained, should return -1
sl@0
  1444
						TEST(windowHandles[loc].iParentId==-1);
sl@0
  1445
					else // otherwise should return 0 signifying in a chain but with no parent
sl@0
  1446
						TEST(windowHandles[loc].iParentId==0);
sl@0
  1447
					}
sl@0
  1448
				// Reset the former child group as a child to the current group
sl@0
  1449
				ret=iChained[ii]->SetChildGroup(window2.iId);
sl@0
  1450
				TEST(ret==KErrNone);
sl@0
  1451
				// Test that it has now got it's parent back
sl@0
  1452
				GetGwListL(0,&windowHandles);
sl@0
  1453
				loc = windowHandles.Find(window2);
sl@0
  1454
				TEST(loc!=KErrNotFound);
sl@0
  1455
				if(loc!=KErrNotFound)
sl@0
  1456
					{
sl@0
  1457
					TEST(windowHandles[loc].iParentId==window1.iId);
sl@0
  1458
					}
sl@0
  1459
				}
sl@0
  1460
			}
sl@0
  1461
			// Reduce chain length by 1
sl@0
  1462
			ret=iChained[jj]->ClearChildGroup();
sl@0
  1463
			TEST(ret==KErrNone);
sl@0
  1464
		}
sl@0
  1465
	// Try to clear the child group of a window that's not in a queue - returns KErrArgument
sl@0
  1466
	ret=iChained[0]->ClearChildGroup();
sl@0
  1467
	TEST(ret==KErrArgument);
sl@0
  1468
	// Test calling set on a non-existent window group - fictional id, larger than what exists
sl@0
  1469
	ret=iChained[0]->SetChildGroup(9999);
sl@0
  1470
	TEST(ret==KErrArgument);
sl@0
  1471
	// Cleanup
sl@0
  1472
	CleanupStack::PopAndDestroy(ENumChained,iChained[ENumChained-1]);
sl@0
  1473
	CleanupStack::PopAndDestroy(&windowHandles);
sl@0
  1474
	}
sl@0
  1475
sl@0
  1476
void CTGwHandle::TestAgainstLoopsWhenAddingChildGroupsL()
sl@0
  1477
	{
sl@0
  1478
	//Creating two chains of 5 window groups.
sl@0
  1479
	CreateChainedGroupWindowsLC(TheClient->iWs,ETrue);
sl@0
  1480
	TInt ret=KErrNone;
sl@0
  1481
	
sl@0
  1482
	//Try to append any of element of this chain to the lastone (itself included)
sl@0
  1483
	//All these attempts should fail (otherwise a infinite loop will be set up)
sl@0
  1484
	for(TInt ii=ENumChained-1;ii>=0;ii--)
sl@0
  1485
		{
sl@0
  1486
		TInt windowId = iChained[ii]->Identifier();
sl@0
  1487
		// Try to append it to the last one
sl@0
  1488
		ret=iChained[0]->SetChildGroup(windowId);
sl@0
  1489
		TEST(ret==KErrArgument);
sl@0
  1490
		if(ret!=KErrArgument)
sl@0
  1491
			{
sl@0
  1492
			_LIT(KLog,"Error: SetChildGroup with a GpWin belonging to the same queue succeeded, return value :%d");
sl@0
  1493
			LOG_MESSAGE2(KLog,ret);
sl@0
  1494
			}
sl@0
  1495
		}
sl@0
  1496
	//Try to append any elements belonging to another chain to the last one of this chain
sl@0
  1497
	//All these trials should fail (otherwise a infinite loop will be set up)
sl@0
  1498
	//Except for the parent of the second chain.
sl@0
  1499
	for(TInt ii=0;ii<ENumChained;ii++)
sl@0
  1500
		{
sl@0
  1501
		TInt windowId = iChained2[ii]->Identifier();
sl@0
  1502
		// Try to append it to the last one
sl@0
  1503
		ret=iChained[0]->SetChildGroup(windowId);
sl@0
  1504
		if(ii != ENumChained-1)
sl@0
  1505
			{
sl@0
  1506
			TEST(ret==KErrArgument);
sl@0
  1507
			if(ret!=KErrArgument)
sl@0
  1508
				{
sl@0
  1509
				_LIT(KLog,"Error: SetChildGroup with a GpWin which already has a parent succeeded, return value :%d");
sl@0
  1510
				LOG_MESSAGE2(KLog,ret);
sl@0
  1511
				}
sl@0
  1512
			iChained[0]->ClearChildGroup();
sl@0
  1513
			}
sl@0
  1514
		else
sl@0
  1515
			{
sl@0
  1516
			TEST(ret==KErrNone);
sl@0
  1517
			if(ret!=KErrNone)
sl@0
  1518
				{
sl@0
  1519
				_LIT(KLog,"Error: SetChildGroup with a GpWin with no parent failed, return value :%d");
sl@0
  1520
				LOG_MESSAGE2(KLog,ret);
sl@0
  1521
				}
sl@0
  1522
			}
sl@0
  1523
		}
sl@0
  1524
	TInt windowId = iChained2[ENumChained-1]->Identifier();
sl@0
  1525
	ret=iChained[ENumChained-1]->SetChildGroup(windowId);
sl@0
  1526
	TEST(ret==KErrArgument);
sl@0
  1527
	if(ret!=KErrArgument)
sl@0
  1528
		{
sl@0
  1529
		_LIT(KLog,"Error: SetChildGroup successful on a GpWin which already has a child, return value :%d");
sl@0
  1530
		LOG_MESSAGE2(KLog,ret);
sl@0
  1531
		}
sl@0
  1532
	//Now take a window group not belonging to any queue
sl@0
  1533
	//just take the parent's chain and pop it 
sl@0
  1534
	//and try to append it to itself
sl@0
  1535
	ret=iChained[ENumChained-1]->ClearChildGroup();
sl@0
  1536
	TEST(ret==KErrNone);
sl@0
  1537
	ret=iChained[ENumChained-1]->SetChildGroup(iChained[ENumChained-1]->Identifier());
sl@0
  1538
	TEST(ret==KErrArgument);
sl@0
  1539
	if(ret!=KErrArgument)
sl@0
  1540
		{
sl@0
  1541
		_LIT(KLog,"Error: Setting GpWin as a child of itself succeeded, return value :%d");
sl@0
  1542
		LOG_MESSAGE2(KLog,ret);
sl@0
  1543
		}
sl@0
  1544
    CleanupStack::PopAndDestroy(ENumChained+ENumChained,iChained[ENumChained-1]);
sl@0
  1545
	}
sl@0
  1546
void CTGwHandle::RunTestCaseL(TInt /*aCurTestCase*/)
sl@0
  1547
	{
sl@0
  1548
	_LIT(KTest0,"Window group names");
sl@0
  1549
	_LIT(KTest1,"Window group identifiers");
sl@0
  1550
	_LIT(KTest2,"Owner to foreground");
sl@0
  1551
	_LIT(KTest3,"FindWindowGroupIdentifier test");
sl@0
  1552
	_LIT(KTest4,"IdentifierWrapAround test");
sl@0
  1553
	_LIT(KTest5,"DefaultOwningWindow test");
sl@0
  1554
	_LIT(KTest6,"DefaultOwningWindow2 test");
sl@0
  1555
	_LIT(KTest7,"Window Group Chaining");
sl@0
  1556
	_LIT(KTest8,"Window Group Chaining2");
sl@0
  1557
	_LIT(KTest9,"Unchaining window group");
sl@0
  1558
	_LIT(KTest10,"Ordinal Postion Test");
sl@0
  1559
	_LIT(KTest11,"CrashTest on closing client");
sl@0
  1560
	_LIT(KTest12,"Setting and Clearing Child Groups");
sl@0
  1561
	_LIT(KTest13,"No Infinite Loops in Setting Child Groups");
sl@0
  1562
	((CTGwHandleStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
sl@0
  1563
	switch(++iTest->iState)
sl@0
  1564
		{
sl@0
  1565
/**
sl@0
  1566
sl@0
  1567
  @SYMTestCaseID GRAPHICS-WSERV-0316
sl@0
  1568
sl@0
  1569
  @SYMDEF             DEF081259
sl@0
  1570
sl@0
  1571
  @SYMTestCaseDesc Test setting window group names
sl@0
  1572
sl@0
  1573
  @SYMTestPriority High
sl@0
  1574
sl@0
  1575
  @SYMTestStatus Implemented
sl@0
  1576
sl@0
  1577
  @SYMTestActions Set the name of a window group to different values and check the
sl@0
  1578
  					value is set correctly
sl@0
  1579
sl@0
  1580
  @SYMTestExpectedResults The window group name is set correctly
sl@0
  1581
sl@0
  1582
*/
sl@0
  1583
		case 1:
sl@0
  1584
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0316"));
sl@0
  1585
			//iState=9; break;
sl@0
  1586
			iTest->LogSubTest(KTest0);
sl@0
  1587
			GwNamesL();
sl@0
  1588
			break;
sl@0
  1589
/**
sl@0
  1590
sl@0
  1591
  @SYMTestCaseID GRAPHICS-WSERV-0317
sl@0
  1592
sl@0
  1593
  @SYMDEF             DEF081259
sl@0
  1594
sl@0
  1595
  @SYMTestCaseDesc Test setting window group identifiers
sl@0
  1596
sl@0
  1597
  @SYMTestPriority High
sl@0
  1598
sl@0
  1599
  @SYMTestStatus Implemented
sl@0
  1600
sl@0
  1601
  @SYMTestActions Set the identifiers of a window groups. manipulate the window groups and
sl@0
  1602
  					check the identifiers remain correct
sl@0
  1603
sl@0
  1604
  @SYMTestExpectedResults The identifiers are correct for each window group after
sl@0
  1605
  							manipulation
sl@0
  1606
sl@0
  1607
*/
sl@0
  1608
		case 2:
sl@0
  1609
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0317"));
sl@0
  1610
			iTest->LogSubTest(KTest1);
sl@0
  1611
			GwIdentifierTestL();
sl@0
  1612
			break;
sl@0
  1613
/**
sl@0
  1614
sl@0
  1615
  @SYMTestCaseID GRAPHICS-WSERV-0318
sl@0
  1616
sl@0
  1617
  @SYMDEF             DEF081259
sl@0
  1618
sl@0
  1619
  @SYMTestCaseDesc Test moving different window groups to the foreground and bringing
sl@0
  1620
  					back the backgorund
sl@0
  1621
sl@0
  1622
  @SYMTestPriority High
sl@0
  1623
sl@0
  1624
  @SYMTestStatus Implemented
sl@0
  1625
sl@0
  1626
  @SYMTestActions Create some window groups and move them in turn to the foreground before
sl@0
  1627
  					restoring the background
sl@0
  1628
sl@0
  1629
  @SYMTestExpectedResults Window groups move to and from the foreground with error
sl@0
  1630
sl@0
  1631
*/
sl@0
  1632
		case 3:
sl@0
  1633
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0318"));
sl@0
  1634
			iTest->LogSubTest(KTest2);
sl@0
  1635
			OwnerToForegroundL();
sl@0
  1636
			break;
sl@0
  1637
/**
sl@0
  1638
sl@0
  1639
  @SYMTestCaseID GRAPHICS-WSERV-0319
sl@0
  1640
sl@0
  1641
  @SYMDEF             DEF081259
sl@0
  1642
sl@0
  1643
  @SYMTestCaseDesc Test returning different window groups identifiers by searching
sl@0
  1644
  					on the name
sl@0
  1645
sl@0
  1646
  @SYMTestPriority High
sl@0
  1647
sl@0
  1648
  @SYMTestStatus Implemented
sl@0
  1649
sl@0
  1650
  @SYMTestActions Create some window groups and return their identifiers by searching on
sl@0
  1651
  					their names
sl@0
  1652
sl@0
  1653
  @SYMTestExpectedResults The correct identifiers are returned for each name
sl@0
  1654
sl@0
  1655
*/
sl@0
  1656
		case 4:
sl@0
  1657
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0319"));
sl@0
  1658
			iTest->LogSubTest(KTest3);
sl@0
  1659
			FindWindowGroupIdentifierTestL();
sl@0
  1660
			break;
sl@0
  1661
/**
sl@0
  1662
sl@0
  1663
  @SYMTestCaseID GRAPHICS-WSERV-0320
sl@0
  1664
sl@0
  1665
  @SYMDEF             DEF081259
sl@0
  1666
sl@0
  1667
  @SYMTestCaseDesc Test that a windows group identifier is not used twice
sl@0
  1668
sl@0
  1669
  @SYMTestPriority High
sl@0
  1670
sl@0
  1671
  @SYMTestStatus Implemented
sl@0
  1672
sl@0
  1673
  @SYMTestActions Assign a window group identifier to one window group and check
sl@0
  1674
  					the same identifier can not be used for a second group
sl@0
  1675
sl@0
  1676
  @SYMTestExpectedResults Window group identifier can not be reused
sl@0
  1677
sl@0
  1678
*/
sl@0
  1679
		case 5:
sl@0
  1680
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0320"));
sl@0
  1681
			iTest->LogSubTest(KTest4);
sl@0
  1682
			IdentifierWrapAroundTestL();
sl@0
  1683
			break;
sl@0
  1684
/**
sl@0
  1685
sl@0
  1686
  @SYMTestCaseID GRAPHICS-WSERV-0321
sl@0
  1687
sl@0
  1688
  @SYMDEF             DEF081259
sl@0
  1689
sl@0
  1690
  @SYMTestCaseDesc Test that the default owning window for window groups is set
sl@0
  1691
  					correctly
sl@0
  1692
sl@0
  1693
  @SYMTestPriority High
sl@0
  1694
sl@0
  1695
  @SYMTestStatus Implemented
sl@0
  1696
sl@0
  1697
  @SYMTestActions Set different default owning windows for different window groups.
sl@0
  1698
  					Check the windows have been set correctly.
sl@0
  1699
sl@0
  1700
  @SYMTestExpectedResults The default owning windows for the groups are set correctly
sl@0
  1701
sl@0
  1702
*/
sl@0
  1703
		case 6:
sl@0
  1704
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0321"));
sl@0
  1705
			iTest->LogSubTest(KTest5);
sl@0
  1706
			DefaultOwningWindowL();
sl@0
  1707
			break;
sl@0
  1708
/**
sl@0
  1709
sl@0
  1710
  @SYMTestCaseID GRAPHICS-WSERV-0322
sl@0
  1711
sl@0
  1712
  @SYMDEF             DEF081259
sl@0
  1713
sl@0
  1714
  @SYMTestCaseDesc Test that the default owning window for window groups is set
sl@0
  1715
  					correctly
sl@0
  1716
sl@0
  1717
  @SYMTestPriority High
sl@0
  1718
sl@0
  1719
  @SYMTestStatus Implemented
sl@0
  1720
sl@0
  1721
  @SYMTestActions Set different default owning windows for different window groups.
sl@0
  1722
  					Check the windows have been set correctly.
sl@0
  1723
sl@0
  1724
  @SYMTestExpectedResults The default owning windows for the groups are set correctly
sl@0
  1725
sl@0
  1726
*/
sl@0
  1727
		case 7:
sl@0
  1728
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0322"));
sl@0
  1729
			iTest->LogSubTest(KTest6);
sl@0
  1730
			DefaultOwningWindow2L();
sl@0
  1731
			TheClient->iGroup->WinTreeNode()->SetOrdinalPosition(0);
sl@0
  1732
			break;
sl@0
  1733
/**
sl@0
  1734
sl@0
  1735
  @SYMTestCaseID GRAPHICS-WSERV-0323
sl@0
  1736
sl@0
  1737
  @SYMDEF             DEF081259
sl@0
  1738
sl@0
  1739
  @SYMTestCaseDesc Test that window groups can be chained correctly
sl@0
  1740
sl@0
  1741
  @SYMTestPriority High
sl@0
  1742
sl@0
  1743
  @SYMTestStatus Implemented
sl@0
  1744
sl@0
  1745
  @SYMTestActions Create a chain of window groups and check that the chain of groups
sl@0
  1746
  					can be manipluated correctly
sl@0
  1747
sl@0
  1748
  @SYMTestExpectedResults The chain can be manipulated correctly
sl@0
  1749
sl@0
  1750
*/
sl@0
  1751
		case 8:
sl@0
  1752
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0323"));
sl@0
  1753
			iTest->LogSubTest(KTest7);
sl@0
  1754
			WindowGroupChaining();
sl@0
  1755
			break;
sl@0
  1756
/**
sl@0
  1757
sl@0
  1758
  @SYMTestCaseID GRAPHICS-WSERV-0324
sl@0
  1759
sl@0
  1760
  @SYMDEF             DEF081259
sl@0
  1761
sl@0
  1762
  @SYMTestCaseDesc Test that window groups can be chained correctly
sl@0
  1763
sl@0
  1764
  @SYMTestPriority High
sl@0
  1765
sl@0
  1766
  @SYMTestStatus Implemented
sl@0
  1767
sl@0
  1768
  @SYMTestActions Create a chain of window groups and check that the chain of groups
sl@0
  1769
  					can be manipluated correctly
sl@0
  1770
sl@0
  1771
  @SYMTestExpectedResults The chain can be manipulated correctly
sl@0
  1772
sl@0
  1773
*/
sl@0
  1774
		case 9:
sl@0
  1775
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0324"));
sl@0
  1776
			iTest->LogSubTest(KTest8);
sl@0
  1777
			WindowGroupChaining2();
sl@0
  1778
			break;
sl@0
  1779
/**
sl@0
  1780
sl@0
  1781
  @SYMTestCaseID GRAPHICS-WSERV-0325
sl@0
  1782
sl@0
  1783
  @SYMDEF             DEF081259
sl@0
  1784
sl@0
  1785
  @SYMTestCaseDesc Test that window groups can be unchained correctly
sl@0
  1786
sl@0
  1787
  @SYMTestPriority High
sl@0
  1788
sl@0
  1789
  @SYMTestStatus Implemented
sl@0
  1790
sl@0
  1791
  @SYMTestActions Create chains of window groups and check that the window groups can be
sl@0
  1792
  					unchained correctly
sl@0
  1793
sl@0
  1794
  @SYMTestExpectedResults The chain can be unchained correctly
sl@0
  1795
sl@0
  1796
*/
sl@0
  1797
		case 10:
sl@0
  1798
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0325"));
sl@0
  1799
			iTest->LogSubTest(KTest9);
sl@0
  1800
			UnchainWindowGroupsL();
sl@0
  1801
			break;
sl@0
  1802
/**
sl@0
  1803
sl@0
  1804
  @SYMTestCaseID GRAPHICS-WSERV-0326
sl@0
  1805
sl@0
  1806
  @SYMDEF             DEF081259
sl@0
  1807
sl@0
  1808
  @SYMTestCaseDesc Test the ordinal position of chained window groups
sl@0
  1809
sl@0
  1810
  @SYMTestPriority High
sl@0
  1811
sl@0
  1812
  @SYMTestStatus Implemented
sl@0
  1813
sl@0
  1814
  @SYMTestActions Create chains of window groups and check their ordinal position is correct
sl@0
  1815
  					for different scenarios
sl@0
  1816
sl@0
  1817
  @SYMTestExpectedResults Ordinal position of chained window group is correct
sl@0
  1818
sl@0
  1819
*/
sl@0
  1820
		case 11:
sl@0
  1821
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0326"));
sl@0
  1822
			iTest->LogSubTest(KTest10);
sl@0
  1823
			TestOrdinalPositionL();
sl@0
  1824
			break;
sl@0
  1825
		case 12:
sl@0
  1826
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0326"));
sl@0
  1827
			iTest->LogSubTest(KTest10);
sl@0
  1828
			TestOrdinalPositionNoDebugL();
sl@0
  1829
			break;
sl@0
  1830
/**
sl@0
  1831
sl@0
  1832
  @SYMTestCaseID GRAPHICS-WSERV-0327
sl@0
  1833
sl@0
  1834
  @SYMDEF             DEF081259
sl@0
  1835
sl@0
  1836
  @SYMTestCaseDesc Test that window groups are dealt with correctly if their client is closed
sl@0
  1837
sl@0
  1838
  @SYMTestPriority High
sl@0
  1839
sl@0
  1840
  @SYMTestStatus Implemented
sl@0
  1841
sl@0
  1842
  @SYMTestActions Create window groups and then close there client.
sl@0
  1843
sl@0
  1844
  @SYMTestExpectedResults The window groups of the closed client are handled without error
sl@0
  1845
sl@0
  1846
*/
sl@0
  1847
		case 13:
sl@0
  1848
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0327"));
sl@0
  1849
			iTest->LogSubTest(KTest11);
sl@0
  1850
			TestclosingclientL();
sl@0
  1851
			break;
sl@0
  1852
		case 14:
sl@0
  1853
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0327"));
sl@0
  1854
			iTest->LogSubTest(KTest12);
sl@0
  1855
			TestClearingAndSettingChildGroupsL();
sl@0
  1856
			break;
sl@0
  1857
		case 15:
sl@0
  1858
			((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0327"));
sl@0
  1859
			iTest->LogSubTest(KTest13);
sl@0
  1860
			TestAgainstLoopsWhenAddingChildGroupsL();
sl@0
  1861
			break;
sl@0
  1862
		default:
sl@0
  1863
			((CTGwHandleStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
sl@0
  1864
			((CTGwHandleStep*)iStep)->CloseTMSGraphicsStep();
sl@0
  1865
			TestComplete();
sl@0
  1866
			break;
sl@0
  1867
		}
sl@0
  1868
	((CTGwHandleStep*)iStep)->RecordTestResultL();
sl@0
  1869
	}
sl@0
  1870
sl@0
  1871
__WS_CONSTRUCT_STEP__(GwHandle)