sl@0: // Copyright (c) 1996-2010 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // GWHANDLE.CPP sl@0: // Test group window handle functions sl@0: // sl@0: // sl@0: sl@0: /** sl@0: @file sl@0: @test sl@0: */ sl@0: sl@0: #include "TGWHANDLE.H" sl@0: sl@0: sl@0: CTGwHandle::CTGwHandle(CTestStep* aStep): sl@0: CTWsGraphicsBase(aStep) sl@0: { sl@0: } sl@0: sl@0: void CTGwHandle::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CTGwHandle::~CTGwHandle() sl@0: { sl@0: } sl@0: sl@0: TInt CTGwHandle::NumberOfWndGroupsWithZeroPriority(TInt aScreenNumber) sl@0: { sl@0: __ASSERT_ALWAYS(aScreenNumber <= 1, User::Invariant()); sl@0: return TheClient->iWs.NumWindowGroups(aScreenNumber,0); sl@0: } sl@0: sl@0: void CTGwHandle::GetGwListL(CArrayFixFlat *aWindowHandles) sl@0: { sl@0: User::LeaveIfError(TheClient->iWs.WindowGroupList(aWindowHandles)); sl@0: } sl@0: sl@0: void CTGwHandle::GetGwListL(CArrayFixFlat *aWindowHandles, TInt aScreenNumber) sl@0: { sl@0: User::LeaveIfError(TheClient->iWs.WindowGroupList(aWindowHandles, aScreenNumber)); sl@0: } sl@0: sl@0: void CTGwHandle::GetGwListL(TInt aPriority, CArrayFixFlat *aWindowHandles) sl@0: { sl@0: User::LeaveIfError(TheClient->iWs.WindowGroupList(aPriority,aWindowHandles)); sl@0: } sl@0: sl@0: void CTGwHandle::GetGwListL(RArray* aWindowHandles) sl@0: { sl@0: User::LeaveIfError(TheClient->iWs.WindowGroupList(aWindowHandles)); sl@0: } sl@0: sl@0: void CTGwHandle::GetGwListL(TInt aPriority, RArray* aWindowHandles) sl@0: { sl@0: User::LeaveIfError(TheClient->iWs.WindowGroupList(aPriority, aWindowHandles)); sl@0: } sl@0: sl@0: void CTGwHandle::GwNamesL() sl@0: { sl@0: enum {EConnectHandle1=123456}; sl@0: enum {EWindowGroupHandle1=234567}; sl@0: enum {EWindowGroupHandle2=666666}; sl@0: // sl@0: TInt foreground; sl@0: User::LeaveIfError(foreground=TheClient->iWs.GetFocusWindowGroup()); sl@0: RWsSession ws1; sl@0: User::LeaveIfError(ws1.Connect()); sl@0: sl@0: // assign to the correct screen sl@0: CWsScreenDevice* screen = new (ELeave) CWsScreenDevice(ws1); sl@0: CleanupStack::PushL(screen); sl@0: User::LeaveIfError(screen->Construct(iTest->iScreenNumber)); sl@0: sl@0: RWindowGroup gw1(ws1); sl@0: User::LeaveIfError(gw1.Construct(EWindowGroupHandle1)); sl@0: gw1.SetOwningWindowGroup(foreground); sl@0: RWindowGroup gw2(ws1); sl@0: User::LeaveIfError(gw2.Construct(EWindowGroupHandle2)); sl@0: gw2.SetOwningWindowGroup(foreground); sl@0: // sl@0: TBuf<8> getName; sl@0: // sl@0: // Check default name is simply a null string sl@0: // sl@0: TInt retVal = gw1.Name(getName); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("gw1.Name(getName) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: TEST(getName==_L("")); sl@0: if (getName!=_L("")) sl@0: INFO_PRINTF3(_L("getName==_L() - Expected: %d, Actual: %d"), ETrue, EFalse); sl@0: // sl@0: TBuf<8> name1(_L("A_Name1")); sl@0: TBuf<8> name2(_L("A_Name2")); sl@0: // sl@0: retVal = gw1.SetName(name1); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("gw1.SetName(name1) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: retVal = gw2.SetName(name2); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("(gw2.SetName(name2) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: retVal = gw1.Name(getName); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("(gw1.Name(getName) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: TEST(getName==name1); sl@0: if (getName!=name1) sl@0: INFO_PRINTF3(_L("getName==name1 - Expected: %d, Actual: %d"), ETrue, EFalse); sl@0: // sl@0: retVal = gw2.Name(getName); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("(gw2.Name(getName) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: TEST(getName==name2); sl@0: if (getName!=name2) sl@0: INFO_PRINTF3(_L("getName==name2 - Expected: %d, Actual: %d"), ETrue, EFalse); sl@0: sl@0: // sl@0: // A few weird characters in the name should work fine sl@0: // sl@0: retVal = gw2.SetName(_L("xx*")); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("(gw2.SetName(_L(xx*)) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: retVal = gw2.Name(getName); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("(gw2.Name(getName) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: TEST(getName==_L("xx*")); sl@0: if (getName!=_L("xx*")) sl@0: INFO_PRINTF3(_L("getName==_L(xx*) - Expected: %d, Actual: %d"), ETrue, EFalse); sl@0: sl@0: // sl@0: retVal = gw2.SetName(_L(":")); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("(gw2.SetName(_L(:)) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: retVal = gw2.Name(getName); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("(gw2.Name(getName) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: TEST(getName==_L(":")); sl@0: if (getName!=_L(":")) sl@0: INFO_PRINTF3(_L("getName==_L(:) - Expected: %d, Actual: %d"), ETrue, EFalse); sl@0: sl@0: // sl@0: // Setting the name back to a null name sl@0: // sl@0: retVal = gw2.SetName(_L("")); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("gw2.SetName(_L()) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: retVal = gw2.Name(getName); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("gw2.Name(getName) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: TEST(getName==_L("")); sl@0: if (getName!=_L("")) sl@0: INFO_PRINTF3(_L("getName==_L() - Expected: %d, Actual: %d"), ETrue, EFalse); sl@0: sl@0: // sl@0: // Getting a name into a too short buffer should fill thew whole buffer from the left hand part sl@0: // of the window name and return KErrOverflow sl@0: // sl@0: gw2.SetName(name2); sl@0: TBuf<4> shortBuf; sl@0: retVal = gw2.Name(shortBuf); sl@0: TEST(retVal==KErrOverflow); sl@0: if (retVal!=KErrOverflow) sl@0: INFO_PRINTF3(_L("gw2.Name(shortBuf) return value - Expected: %d, Actual: %d"), KErrOverflow, retVal); sl@0: sl@0: TEST(shortBuf==name2.Left(4)); sl@0: if (shortBuf!=name2.Left(4)) sl@0: INFO_PRINTF3(_L("shortBuf==name2.Left(4) - Expected: %d, Actual: %d"), ETrue, EFalse); sl@0: sl@0: // sl@0: // passing a 0 length TPtr pointing to NULL should be safe, simply returning KErrOverflow sl@0: // sl@0: TPtr nullPtr(NULL,0); sl@0: retVal = gw2.Name(nullPtr); sl@0: TEST(retVal==KErrOverflow); sl@0: if (retVal!=KErrOverflow) sl@0: INFO_PRINTF3(_L("gw2.Name(nullPtr) return value - Expected: %d, Actual: %d"), KErrOverflow, retVal); sl@0: sl@0: TEST(nullPtr==_L("")); sl@0: if (nullPtr!=_L("")) sl@0: INFO_PRINTF3(_L("nullPtr==_L() - Expected: %d, Actual: %d"), ETrue, EFalse); sl@0: sl@0: // sl@0: // Getting a null name into a null descriptor sl@0: // sl@0: gw2.SetName(_L("")); sl@0: TPtr nullPtr2(NULL,0); sl@0: retVal = gw2.Name(nullPtr); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("gw2.Name(nullPtr) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: TEST(nullPtr2==_L("")); sl@0: if (nullPtr2!=_L("")) sl@0: INFO_PRINTF3(_L("nullPtr2==_L() - Expected: %d, Actual: %d"), ETrue, EFalse); sl@0: // sl@0: gw1.Close(); sl@0: gw2.Close(); sl@0: CleanupStack::PopAndDestroy(screen); sl@0: ws1.Close(); sl@0: } sl@0: sl@0: void CTGwHandle::GwIdentifierTestL() sl@0: { sl@0: enum {EWindowGroupHandle1=234567}; sl@0: enum {EWindowGroupHandle2=666666}; sl@0: enum {EWindowGroupHandle3=999}; sl@0: // sl@0: CArrayFixFlat* windowHandles=new(ELeave) CArrayFixFlat(5); sl@0: CleanupStack::PushL(windowHandles); sl@0: GetGwListL(0, windowHandles); sl@0: TInt retVal = TheClient->iWs.GetFocusWindowGroup(); sl@0: TEST(retVal==(*windowHandles)[0]); sl@0: if (retVal!=(*windowHandles)[0]) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetFocusWindowGroup() return value - Expected: %d, Actual: %d"), (*windowHandles)[0], retVal); sl@0: sl@0: // sl@0: RWsSession ws1; sl@0: User::LeaveIfError(ws1.Connect()); sl@0: CleanupClosePushL(ws1); sl@0: sl@0: // assign to the correct screen sl@0: CWsScreenDevice* screen1 = new (ELeave) CWsScreenDevice(ws1); sl@0: CleanupStack::PushL(screen1); sl@0: User::LeaveIfError(screen1->Construct(iTest->iScreenNumber)); sl@0: sl@0: RWindowGroup gw1(ws1); sl@0: User::LeaveIfError(gw1.Construct(EWindowGroupHandle1)); sl@0: gw1.SetOwningWindowGroup((*windowHandles)[0]); sl@0: RWsSession ws2; sl@0: User::LeaveIfError(ws2.Connect()); sl@0: CleanupClosePushL(ws2); sl@0: sl@0: // assign to the correct screen sl@0: CWsScreenDevice* screen2 = new (ELeave) CWsScreenDevice(ws2); sl@0: CleanupStack::PushL(screen2); sl@0: User::LeaveIfError(screen2->Construct(iTest->iScreenNumber)); sl@0: sl@0: RWindowGroup gw2(ws2); sl@0: User::LeaveIfError(gw2.Construct(EWindowGroupHandle2)); sl@0: // sl@0: GetGwListL(0, windowHandles); sl@0: // sl@0: sl@0: retVal = gw2.Identifier(); sl@0: TEST(retVal==(*windowHandles)[0]); sl@0: if (retVal!=(*windowHandles)[0]) sl@0: INFO_PRINTF3(_L("gw2.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[0], retVal); sl@0: sl@0: retVal = gw1.Identifier(); sl@0: TEST(retVal==(*windowHandles)[1]); sl@0: if (retVal!=(*windowHandles)[1]) sl@0: INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal); sl@0: sl@0: retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]); sl@0: TEST(retVal==EWindowGroupHandle2); sl@0: if (retVal!=EWindowGroupHandle2) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle2, retVal); sl@0: sl@0: retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]); sl@0: TEST(retVal==EWindowGroupHandle1); sl@0: if (retVal!=EWindowGroupHandle1) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle1, retVal); sl@0: // sl@0: retVal = TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[1]); sl@0: TEST(retVal==0); sl@0: if (retVal!=0) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[1]) return value - Expected: %d, Actual: %d"), 0, retVal); sl@0: sl@0: retVal = TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[0]); sl@0: TEST(retVal==0); sl@0: if (retVal!=0) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[0]) return value - Expected: %d, Actual: %d"), 0, retVal); sl@0: sl@0: // sl@0: TThreadId threadId; sl@0: TheClient->iWs.GetWindowGroupClientThreadId((*windowHandles)[0],threadId); sl@0: sl@0: TUint64 ret = RThread().Id(); sl@0: TEST(ret==threadId); sl@0: if (ret!=threadId) sl@0: INFO_PRINTF3(_L("RThread().Id() return value - Expected: %d, Actual: %d"), (TInt)threadId, (TInt)ret); sl@0: sl@0: TheClient->iWs.GetWindowGroupClientThreadId((*windowHandles)[1],threadId); sl@0: sl@0: TUint64 retVal2 = RThread().Id(); sl@0: TEST(retVal2==threadId); sl@0: if (retVal2!=threadId) sl@0: INFO_PRINTF3(_L("RThread().Id() return value - Expected: %d, Actual: %d"), (TInt)threadId, (TInt)retVal2); sl@0: // sl@0: retVal = gw1.OrdinalPosition(); sl@0: TEST(retVal==1); sl@0: if (retVal!=1) sl@0: INFO_PRINTF3(_L("gw1.OrdinalPosition() return value - Expected: %d, Actual: %d"), 1, retVal); sl@0: sl@0: retVal = gw2.OrdinalPosition(); sl@0: TEST(retVal==0); sl@0: if (retVal!=0) sl@0: INFO_PRINTF3(_L("gw2.OrdinalPosition() return value - Expected: %d, Actual: %d"), 0, retVal); sl@0: sl@0: retVal = TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[1],0); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[1],0) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: retVal = gw1.OrdinalPosition(); sl@0: TEST(retVal==0); sl@0: if (retVal!=0) sl@0: INFO_PRINTF3(_L("gw1.OrdinalPosition() return value - Expected: %d, Actual: %d"), 0, retVal); sl@0: sl@0: retVal = gw2.OrdinalPosition(); sl@0: TEST(retVal==1); sl@0: if (retVal!=1) sl@0: INFO_PRINTF3(_L("gw2.OrdinalPosition() return value - Expected: %d, Actual: %d"), 1, retVal); sl@0: // sl@0: retVal = TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[1],1); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[1],1) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: retVal = gw1.OrdinalPosition(); sl@0: TEST(retVal==1); sl@0: if (retVal!=1) sl@0: INFO_PRINTF3(_L("gw1.OrdinalPosition() return value - Expected: %d, Actual: %d"), 1, retVal); sl@0: sl@0: retVal = gw2.OrdinalPosition(); sl@0: TEST(retVal==0); sl@0: if (retVal!=0) sl@0: INFO_PRINTF3(_L("gw2.OrdinalPosition() return value - Expected: %d, Actual: %d"), 0, retVal); sl@0: sl@0: retVal = TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[0],1); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[0],1) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: GetGwListL(0, windowHandles); sl@0: retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]); sl@0: TEST(retVal==EWindowGroupHandle1); sl@0: if (retVal!=EWindowGroupHandle1) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle1, retVal); sl@0: sl@0: retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]); sl@0: TEST(retVal==EWindowGroupHandle2); sl@0: if (retVal!=EWindowGroupHandle2) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle2, retVal); sl@0: // sl@0: RWindowGroup gw3(ws2); sl@0: User::LeaveIfError(gw3.Construct(EWindowGroupHandle3)); sl@0: gw1.SetOrdinalPosition(0,100000); // Assume nothing else in the system is higher, else test will fail sl@0: gw3.SetOrdinalPosition(0,100000); sl@0: ws1.Flush(); sl@0: ws2.Flush(); sl@0: // sl@0: GetGwListL(100000, windowHandles); sl@0: retVal = windowHandles->Count(); sl@0: TEST(retVal==2); sl@0: if (retVal!=2) sl@0: INFO_PRINTF3(_L("windowHandles->Count() return value - Expected: %d, Actual: %d"), 2, retVal); sl@0: sl@0: retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]); sl@0: TEST(retVal==EWindowGroupHandle3); sl@0: if (retVal!=EWindowGroupHandle3) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle3, retVal); sl@0: sl@0: retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]); sl@0: TEST(retVal==EWindowGroupHandle1); sl@0: if (retVal!=EWindowGroupHandle1) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle1, retVal); sl@0: sl@0: // sl@0: retVal = TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[0]); sl@0: TEST(retVal==100000); sl@0: if (retVal!=100000) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[0]) return value - Expected: %d, Actual: %d"), 100000, retVal); sl@0: sl@0: retVal = TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[1]); sl@0: TEST(retVal==100000); sl@0: if (retVal!=100000) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupOrdinalPriority((*windowHandles)[1]) return value - Expected: %d, Actual: %d"), 100000, retVal); sl@0: // sl@0: GetGwListL(-12453, windowHandles); // Test 0 count, Assumes no window with priority sl@0: retVal = windowHandles->Count(); sl@0: TEST(retVal==0); sl@0: if (retVal!=0) sl@0: INFO_PRINTF3(_L("windowHandles->Count() return value - Expected: %d, Actual: %d"), 0, retVal); sl@0: sl@0: // sl@0: GetGwListL(windowHandles, iTest->iScreenNumber); sl@0: retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]); sl@0: TEST(retVal==EWindowGroupHandle3); sl@0: if (retVal!=EWindowGroupHandle3) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[0]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle3, retVal); sl@0: sl@0: retVal = TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]); sl@0: TEST(retVal==EWindowGroupHandle1); sl@0: if (retVal!=EWindowGroupHandle1) sl@0: INFO_PRINTF3(_L("TheClient->iWs.GetWindowGroupHandle((*windowHandles)[1]) return value - Expected: %d, Actual: %d"), EWindowGroupHandle1, retVal); sl@0: // sl@0: // Check passing bad identifiers sl@0: // sl@0: retVal = TheClient->iWs.SetWindowGroupOrdinalPosition(-1,0); sl@0: TEST(retVal==KErrNotFound); sl@0: if (retVal!=KErrNotFound) sl@0: INFO_PRINTF3(_L("TheClient->iWs.SetWindowGroupOrdinalPosition(-1,0) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal); sl@0: sl@0: retVal = TheClient->iWs.GetWindowGroupHandle(-3); sl@0: TEST(retVal==KErrNotFound); sl@0: if (retVal!=KErrNotFound) sl@0: INFO_PRINTF3(_L("TTheClient->iWs.GetWindowGroupHandle(-3) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal); sl@0: sl@0: // sl@0: gw1.Close(); sl@0: gw2.Close(); sl@0: gw3.Close(); sl@0: sl@0: CleanupStack::PopAndDestroy(5, windowHandles); sl@0: } sl@0: sl@0: void CTGwHandle::OwnerToForegroundL() sl@0: { sl@0: enum {EWindowGroupHandle1=234567}; sl@0: enum {EWindowGroupHandle2a=666666}; sl@0: enum {EWindowGroupHandle2b=666667}; sl@0: // sl@0: CArrayFixFlat *windowHandles=new(ELeave) CArrayFixFlat(5); sl@0: CleanupStack::PushL(windowHandles); sl@0: GetGwListL(0, windowHandles); sl@0: TInt oldForeground=(*windowHandles)[0]; sl@0: // sl@0: RWsSession ws1; sl@0: User::LeaveIfError(ws1.Connect()); sl@0: CleanupClosePushL(ws1); sl@0: sl@0: // assign to the correct screen sl@0: CWsScreenDevice* screen1 = new (ELeave) CWsScreenDevice(ws1); sl@0: CleanupStack::PushL(screen1); sl@0: User::LeaveIfError(screen1->Construct(iTest->iScreenNumber)); sl@0: sl@0: RWindowGroup gw1(ws1); sl@0: User::LeaveIfError(gw1.Construct(EWindowGroupHandle1)); sl@0: CleanupClosePushL(gw1); sl@0: RWsSession ws2; sl@0: User::LeaveIfError(ws2.Connect()); sl@0: CleanupClosePushL(ws2); sl@0: sl@0: // assign to the correct screen sl@0: CWsScreenDevice* screen2 = new (ELeave) CWsScreenDevice(ws2); sl@0: CleanupStack::PushL(screen2); sl@0: User::LeaveIfError(screen2->Construct(iTest->iScreenNumber)); sl@0: sl@0: RWindowGroup gw2a(ws2); sl@0: User::LeaveIfError(gw2a.Construct(EWindowGroupHandle2a)); sl@0: CleanupClosePushL(gw2a); sl@0: RWindowGroup gw2b(ws2); sl@0: User::LeaveIfError(gw2b.Construct(EWindowGroupHandle2b)); sl@0: CleanupClosePushL(gw2b); sl@0: gw1.SetOrdinalPosition(1); sl@0: // sl@0: // Turn auto flushing on as we're using multiple connections and it would be easy to forget to flush one sl@0: // sl@0: ws1.SetAutoFlush(ETrue); sl@0: ws2.SetAutoFlush(ETrue); sl@0: TheClient->iWs.SetAutoFlush(ETrue); sl@0: // sl@0: GetGwListL(0, windowHandles); sl@0: // sl@0: TInt retVal = gw2b.Identifier(); sl@0: TEST(retVal==(*windowHandles)[0]); sl@0: if (retVal!=(*windowHandles)[0]) sl@0: INFO_PRINTF3(_L("gw2b.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[0], retVal); sl@0: sl@0: retVal = gw1.Identifier(); sl@0: TEST(retVal==(*windowHandles)[1]); sl@0: if (retVal!=(*windowHandles)[1]) sl@0: INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal); sl@0: sl@0: retVal = gw2a.Identifier(); sl@0: TEST(retVal==(*windowHandles)[2]); sl@0: if (retVal!=(*windowHandles)[2]) sl@0: INFO_PRINTF3(_L("gw2a.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[2], retVal); sl@0: sl@0: retVal = oldForeground; sl@0: TEST(retVal==(*windowHandles)[3]); sl@0: if (retVal!=(*windowHandles)[3]) sl@0: INFO_PRINTF3(_L("oldForeground - Expected: %d, Actual: %d"), (*windowHandles)[3], oldForeground); sl@0: // sl@0: CleanupStack::PopAndDestroy(&gw2b); sl@0: GetGwListL(0, windowHandles); sl@0: sl@0: retVal = gw2a.Identifier(); sl@0: TEST(retVal==(*windowHandles)[0]); sl@0: if (retVal!=(*windowHandles)[0]) sl@0: INFO_PRINTF3(_L("gw2a.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[0], retVal); sl@0: // Check 2a jumped over 1 in the ordinal list sl@0: sl@0: retVal = gw1.Identifier(); sl@0: TEST(retVal==(*windowHandles)[1]); sl@0: if (retVal!=(*windowHandles)[1]) sl@0: INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal); sl@0: sl@0: retVal = oldForeground; sl@0: TEST(retVal==(*windowHandles)[2]); sl@0: if (retVal!=(*windowHandles)[2]) sl@0: INFO_PRINTF3(_L("oldForeground - Expected: %d, Actual: %d"), (*windowHandles)[2], oldForeground); sl@0: sl@0: // sl@0: User::LeaveIfError(gw2b.Construct(EWindowGroupHandle2b)); sl@0: CleanupClosePushL(gw2b); sl@0: gw2b.SetOwningWindowGroup(oldForeground); sl@0: CleanupStack::PopAndDestroy(&gw2b); sl@0: GetGwListL(0, windowHandles); sl@0: retVal = oldForeground; sl@0: TEST(retVal==(*windowHandles)[0]); sl@0: if (retVal!=(*windowHandles)[0]) sl@0: INFO_PRINTF3(_L("oldForeground - Expected: %d, Actual: %d"), (*windowHandles)[0], oldForeground); sl@0: // Check old foreground bought to foreground sl@0: sl@0: retVal = gw2a.Identifier(); sl@0: TEST(retVal==(*windowHandles)[1]); sl@0: if (retVal!=(*windowHandles)[1]) sl@0: INFO_PRINTF3(_L("gw2a.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal); sl@0: sl@0: retVal = gw1.Identifier(); sl@0: TEST(retVal==(*windowHandles)[2]); sl@0: if (retVal!=(*windowHandles)[2]) sl@0: INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[2], retVal); sl@0: sl@0: TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[0],2); sl@0: // sl@0: User::LeaveIfError(gw2b.Construct(EWindowGroupHandle2b)); sl@0: CleanupClosePushL(gw2b); sl@0: gw2b.SetOwningWindowGroup((*windowHandles)[1]); sl@0: gw2b.SetOrdinalPosition(KOrdinalPositionSwitchToOwningWindow); // Should bring 2a to foreground sl@0: GetGwListL(0, windowHandles); sl@0: sl@0: retVal = gw2a.Identifier(); sl@0: TEST(retVal==(*windowHandles)[0]); sl@0: if (retVal!=(*windowHandles)[0]) sl@0: INFO_PRINTF3(_L("gw2a.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[0], retVal); sl@0: sl@0: retVal = gw2b.Identifier(); sl@0: TEST(retVal==(*windowHandles)[1]); sl@0: if (retVal!=(*windowHandles)[1]) sl@0: INFO_PRINTF3(_L("gw2b.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal); sl@0: sl@0: retVal = gw1.Identifier(); sl@0: TEST(retVal==(*windowHandles)[2]); sl@0: if (retVal!=(*windowHandles)[2]) sl@0: INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[2], retVal); sl@0: // sl@0: CleanupStack::PopAndDestroy(&gw2b); sl@0: GetGwListL(0, windowHandles); sl@0: retVal = gw2a.Identifier(); sl@0: TEST(retVal==(*windowHandles)[0]); sl@0: if (retVal!=(*windowHandles)[0]) sl@0: INFO_PRINTF3(_L("gw2a.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[0], retVal); sl@0: sl@0: retVal = gw1.Identifier(); sl@0: TEST(retVal==(*windowHandles)[1]); sl@0: if (retVal!=(*windowHandles)[1]) sl@0: INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal); sl@0: // sl@0: CleanupStack::PopAndDestroy(&gw2a); // Should bring shell to foreground sl@0: GetGwListL(0, windowHandles); sl@0: sl@0: // check whether the shell is on sl@0: TThreadId threadId; sl@0: ws2.GetWindowGroupClientThreadId((*windowHandles)[0],threadId); sl@0: TBool shellRunning=ETrue; sl@0: sl@0: TFullName shellName; sl@0: // apply to primary screen only where SHELL is running sl@0: TFindThread findThread(iTest->iScreenNumber==KDefaultScreen?_L("WSHELL*::*"):_L("WxSHELL*::*")); sl@0: if(findThread.Next(shellName)==KErrNone) sl@0: { sl@0: RThread shell; sl@0: User::LeaveIfError(shell.Open(shellName)); sl@0: TEST(shell.Id()==threadId); sl@0: if (retVal!=(*windowHandles)[1]) sl@0: INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[1], retVal); sl@0: sl@0: shell.Close(); sl@0: } sl@0: else sl@0: { sl@0: shellRunning=EFalse; sl@0: } sl@0: sl@0: sl@0: // Check gw1 second sl@0: retVal = gw1.Identifier(); sl@0: TEST(retVal==(*windowHandles)[shellRunning ? 1 : 0]); sl@0: if (retVal!=(*windowHandles)[shellRunning ? 1 : 0]) sl@0: INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[shellRunning ? 1 : 0], retVal); sl@0: sl@0: retVal = oldForeground; sl@0: TEST(retVal==(*windowHandles)[shellRunning ? 2 : 1]); sl@0: if (retVal!=(*windowHandles)[shellRunning ? 2 : 1]) sl@0: INFO_PRINTF3(_L("gw1.Identifier() return value - Expected: %d, Actual: %d"), (*windowHandles)[shellRunning ? 2 : 1], retVal); sl@0: // and oldforeground second sl@0: sl@0: // sl@0: CleanupStack::PopAndDestroy(5, &ws1); sl@0: // sl@0: // Kick shell back into background, 'cause that's where it belongs sl@0: // sl@0: TheClient->iWs.SetWindowGroupOrdinalPosition((*windowHandles)[0],-1); sl@0: TheClient->iWs.SetAutoFlush(EFalse); sl@0: // sl@0: CleanupStack::PopAndDestroy(windowHandles); sl@0: } sl@0: sl@0: void CTGwHandle::FindWindowGroupIdentifierTestL() sl@0: { sl@0: enum {EWindowGroupHandle1=234567}; sl@0: enum {EWindowGroupHandle2=666666}; sl@0: enum {EWindowGroupHandle3=123}; sl@0: TInt foreground=TheClient->iWs.GetFocusWindowGroup(); sl@0: RWsSession ws1; sl@0: User::LeaveIfError(ws1.Connect()); sl@0: sl@0: // assign to the correct screen sl@0: CWsScreenDevice* screen = new (ELeave) CWsScreenDevice(ws1); sl@0: CleanupStack::PushL(screen); sl@0: User::LeaveIfError(screen->Construct(iTest->iScreenNumber)); sl@0: CleanupStack::Pop(screen); sl@0: sl@0: CleanupClosePushL(ws1); sl@0: // sl@0: RWindowGroup gw1(ws1); sl@0: User::LeaveIfError(gw1.Construct(EWindowGroupHandle1)); sl@0: CleanupClosePushL(gw1); sl@0: gw1.SetOwningWindowGroup(foreground); sl@0: RWindowGroup gw2(ws1); sl@0: User::LeaveIfError(gw2.Construct(EWindowGroupHandle2)); sl@0: CleanupClosePushL(gw2); sl@0: gw1.SetOwningWindowGroup(foreground); sl@0: RWindowGroup gw3(ws1); sl@0: User::LeaveIfError(gw3.Construct(EWindowGroupHandle3)); sl@0: CleanupClosePushL(gw3); sl@0: gw3.SetOwningWindowGroup(foreground); sl@0: // sl@0: TInt id1=gw1.Identifier(); sl@0: TInt id2=gw2.Identifier(); sl@0: TInt id3=gw3.Identifier(); sl@0: // sl@0: gw1.SetName(_L("qwerty123abcd")); sl@0: gw2.SetName(_L("123")); sl@0: gw3.SetName(_L("qqqabcdxxx123")); sl@0: // sl@0: TInt retVal = ws1.FindWindowGroupIdentifier(0,_L("123"),0); sl@0: TEST(retVal==id2); sl@0: if (retVal!=id2) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(123),0) return value - Expected: %d, Actual: %d"), id2, retVal); sl@0: sl@0: // sl@0: retVal = ws1.FindWindowGroupIdentifier(0,_L("*123*"),0); sl@0: TEST(retVal==id3); sl@0: if (retVal!=id3) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(*123*),0) return value - Expected: %d, Actual: %d"), id3, retVal); sl@0: sl@0: retVal = ws1.FindWindowGroupIdentifier(id3,_L("*123*"),0); sl@0: TEST(retVal==id2); sl@0: if (retVal!=id2) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id3,_L(*123*),0) return value - Expected: %d, Actual: %d"), id2, retVal); sl@0: sl@0: retVal = ws1.FindWindowGroupIdentifier(id2,_L("*123*"),0); sl@0: TEST(retVal==id1); sl@0: if (retVal!=id1) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id2,_L(*123*),0) return value - Expected: %d, Actual: %d"), id1, retVal); sl@0: sl@0: // sl@0: retVal = ws1.FindWindowGroupIdentifier(0,_L("*abcd*"),0); sl@0: TEST(retVal==id3); sl@0: if (retVal!=id3) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(*abcd*),0) return value - Expected: %d, Actual: %d"), id3, retVal); sl@0: sl@0: retVal = ws1.FindWindowGroupIdentifier(id3,_L("*abcd*"),0); sl@0: TEST(retVal==id1); sl@0: if (retVal!=id1) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id3,_L(*abcd*),0)return value - Expected: %d, Actual: %d"), id1, retVal); sl@0: // sl@0: retVal = ws1.FindWindowGroupIdentifier(0,_L("*123*"),7); sl@0: TEST(retVal==id3); sl@0: if (retVal!=id3) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(*123*),7)return value - Expected: %d, Actual: %d"), id3, retVal); sl@0: sl@0: retVal = ws1.FindWindowGroupIdentifier(id3,_L("*123*"),7); sl@0: TEST(retVal==KErrNotFound); sl@0: if (retVal!=KErrNotFound) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id3,_L(*123*),7) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal); sl@0: sl@0: retVal = ws1.FindWindowGroupIdentifier(0,_L("*abc*"),4); sl@0: TEST(retVal==id1); sl@0: if (retVal!=id1) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(*abc*),4) return value - Expected: %d, Actual: %d"), id1, retVal); sl@0: sl@0: retVal = ws1.FindWindowGroupIdentifier(id1,_L("*abc*"),4); sl@0: TEST(retVal==KErrNotFound); sl@0: if (retVal!=KErrNotFound) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id1,_L(*abc*),4) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal); sl@0: sl@0: retVal = ws1.FindWindowGroupIdentifier(0,_L("xxx*"),7); sl@0: TEST(retVal==id3); sl@0: if (retVal!=id3) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(xxx*),7) return value - Expected: %d, Actual: %d"), id3, retVal); sl@0: sl@0: retVal = ws1.FindWindowGroupIdentifier(0,_L("xxx*"),8); sl@0: TEST(retVal==KErrNotFound); sl@0: if (retVal!=KErrNotFound) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(0,_L(xxx*),8) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal); sl@0: // sl@0: retVal = ws1.FindWindowGroupIdentifier(id1,_L("12"),0); sl@0: TEST(retVal==KErrNotFound); sl@0: if (retVal!=KErrNotFound) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id1,_L(12),0) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal); sl@0: sl@0: retVal = ws1.FindWindowGroupIdentifier(id1,_L("qqq"),0); sl@0: TEST(retVal==KErrNotFound); sl@0: if (retVal!=KErrNotFound) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id1,_L(qqq),0) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal); sl@0: sl@0: retVal = ws1.FindWindowGroupIdentifier(id1,_L("abcd"),3); sl@0: TEST(retVal==KErrNotFound); sl@0: if (retVal!=KErrNotFound) sl@0: INFO_PRINTF3(_L("ws1.FindWindowGroupIdentifier(id1,_L(abcd),3) return value - Expected: %d, Actual: %d"), KErrNotFound, retVal); sl@0: // sl@0: delete screen; sl@0: CleanupStack::PopAndDestroy(4, &ws1); sl@0: } sl@0: sl@0: void CTGwHandle::DefaultOwningWindowL() sl@0: { sl@0: TInt foreground=TheClient->iWs.GetFocusWindowGroup(); sl@0: RWsSession ws1; sl@0: User::LeaveIfError(ws1.Connect()); sl@0: sl@0: // assign to the correct screen sl@0: CWsScreenDevice* screen = new (ELeave) CWsScreenDevice(ws1); sl@0: CleanupStack::PushL(screen); sl@0: User::LeaveIfError(screen->Construct(iTest->iScreenNumber)); sl@0: sl@0: // sl@0: INFO_PRINTF1(_L("DefaultOwningWindow1")); sl@0: RWindowGroup gw1(ws1); sl@0: User::LeaveIfError(gw1.Construct(1)); sl@0: gw1.SetOwningWindowGroup(foreground); sl@0: RWindowGroup gw2(ws1); sl@0: User::LeaveIfError(gw2.Construct(2)); sl@0: gw2.SetOwningWindowGroup(foreground); sl@0: RWindowGroup gw3(ws1); sl@0: User::LeaveIfError(gw3.Construct(3)); sl@0: gw3.SetOwningWindowGroup(foreground); sl@0: RWindowGroup gw4(ws1); sl@0: User::LeaveIfError(gw4.Construct(4)); sl@0: gw4.SetOwningWindowGroup(foreground); sl@0: INFO_PRINTF1(_L(" Created Group Window")); sl@0: // sl@0: TInt prevOwningGroup=ws1.GetDefaultOwningWindow(); sl@0: gw1.DefaultOwningWindow(); sl@0: TEST(gw1.Identifier()==ws1.GetDefaultOwningWindow()); sl@0: if (gw1.Identifier()!=ws1.GetDefaultOwningWindow()) sl@0: INFO_PRINTF3(_L("gw1.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1.Identifier()); sl@0: sl@0: gw2.DefaultOwningWindow(); sl@0: TEST(gw2.Identifier()==ws1.GetDefaultOwningWindow()); sl@0: if (gw2.Identifier()!=ws1.GetDefaultOwningWindow()) sl@0: INFO_PRINTF3(_L("gw2.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw2.Identifier()); sl@0: sl@0: gw2.Close(); sl@0: TEST(gw1.Identifier()==ws1.GetDefaultOwningWindow()); sl@0: if (gw1.Identifier()!=ws1.GetDefaultOwningWindow()) sl@0: INFO_PRINTF3(_L("gw1.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1.Identifier()); sl@0: sl@0: gw3.DefaultOwningWindow(); sl@0: gw4.DefaultOwningWindow(); sl@0: gw3.Close(); sl@0: TEST(gw4.Identifier()==ws1.GetDefaultOwningWindow()); sl@0: if (gw4.Identifier()!=ws1.GetDefaultOwningWindow()) sl@0: INFO_PRINTF3(_L("gw4.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw4.Identifier()); sl@0: sl@0: gw4.Close(); sl@0: TEST(gw1.Identifier()==ws1.GetDefaultOwningWindow()); sl@0: if (gw1.Identifier()!=ws1.GetDefaultOwningWindow()) sl@0: INFO_PRINTF3(_L("gw1.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1.Identifier()); sl@0: sl@0: gw1.Close(); sl@0: TEST(prevOwningGroup==ws1.GetDefaultOwningWindow()); sl@0: if (prevOwningGroup!=ws1.GetDefaultOwningWindow()) sl@0: INFO_PRINTF3(_L("prevOwningGroup==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), prevOwningGroup); sl@0: sl@0: INFO_PRINTF1(_L(" Closed Group Window")); sl@0: sl@0: User::LeaveIfError(gw1.Construct(1)); sl@0: gw1.SetOwningWindowGroup(foreground); sl@0: User::LeaveIfError(gw2.Construct(2)); sl@0: gw2.SetOwningWindowGroup(foreground); sl@0: User::LeaveIfError(gw3.Construct(3)); sl@0: gw3.SetOwningWindowGroup(foreground); sl@0: INFO_PRINTF1(_L(" ReCreated Group Window")); sl@0: gw1.DefaultOwningWindow(); sl@0: gw1.DefaultOwningWindow(); sl@0: gw1.Close(); sl@0: gw2.DefaultOwningWindow(); sl@0: gw2.DefaultOwningWindow(); sl@0: gw3.Close(); sl@0: gw2.Close(); sl@0: INFO_PRINTF1(_L(" Re-Closed Group Window")); sl@0: sl@0: User::LeaveIfError(gw1.Construct(1)); sl@0: gw1.SetOwningWindowGroup(foreground); sl@0: User::LeaveIfError(gw2.Construct(2)); sl@0: gw2.SetOwningWindowGroup(foreground); sl@0: User::LeaveIfError(gw3.Construct(3)); sl@0: gw3.SetOwningWindowGroup(foreground); sl@0: User::LeaveIfError(gw4.Construct(4)); sl@0: gw4.SetOwningWindowGroup(foreground); sl@0: INFO_PRINTF1(_L(" ReCreated Group Window Again")); sl@0: gw1.DefaultOwningWindow(); sl@0: gw2.DefaultOwningWindow(); sl@0: gw1.DefaultOwningWindow(); sl@0: gw1.Close(); sl@0: gw2.Close(); sl@0: gw3.DefaultOwningWindow(); sl@0: gw4.DefaultOwningWindow(); sl@0: gw3.DefaultOwningWindow(); sl@0: gw4.Close(); sl@0: gw3.Close(); sl@0: INFO_PRINTF1(_L(" Re-Closed Group Window Again")); sl@0: sl@0: User::LeaveIfError(gw1.Construct(1)); sl@0: gw1.DefaultOwningWindow(); sl@0: TEST(gw1.Identifier()==ws1.GetDefaultOwningWindow()); sl@0: if (gw1.Identifier()!=ws1.GetDefaultOwningWindow()) sl@0: INFO_PRINTF3(_L("gw1.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1.Identifier()); sl@0: sl@0: gw1.DefaultOwningWindow(); sl@0: TEST(gw1.Identifier()==ws1.GetDefaultOwningWindow()); sl@0: if (gw1.Identifier()!=ws1.GetDefaultOwningWindow()) sl@0: INFO_PRINTF3(_L("gw1.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1.Identifier()); sl@0: sl@0: User::LeaveIfError(gw2.Construct(2)); sl@0: TEST(gw1.Identifier()==ws1.GetDefaultOwningWindow()); sl@0: if (gw1.Identifier()!=ws1.GetDefaultOwningWindow()) sl@0: INFO_PRINTF3(_L("gw1.Identifier()==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1.Identifier()); sl@0: sl@0: gw2.Close(); sl@0: gw1.Close(); sl@0: sl@0: CleanupStack::PopAndDestroy(screen); sl@0: ws1.Close(); sl@0: } sl@0: sl@0: void CTGwHandle::DefaultOwningWindow2L() sl@0: //This test originally resulted in a crash, while the above test originally resulted in lockups. sl@0: { sl@0: RWsSession ws1; sl@0: User::LeaveIfError(ws1.Connect()); sl@0: sl@0: // assign to the correct screen sl@0: CWsScreenDevice* screen1 = new (ELeave) CWsScreenDevice(ws1); sl@0: CleanupStack::PushL(screen1); sl@0: User::LeaveIfError(screen1->Construct(iTest->iScreenNumber)); sl@0: sl@0: RWsSession ws2; sl@0: User::LeaveIfError(ws2.Connect()); sl@0: sl@0: // assign to the correct screen sl@0: CWsScreenDevice* screen2 = new (ELeave) CWsScreenDevice(ws2); sl@0: CleanupStack::PushL(screen2); sl@0: User::LeaveIfError(screen2->Construct(iTest->iScreenNumber)); sl@0: sl@0: // sl@0: RWindowGroup gw1(ws1); sl@0: User::LeaveIfError(gw1.Construct(1)); sl@0: RWindowGroup gw2(ws2); sl@0: User::LeaveIfError(gw2.Construct(2)); sl@0: RWindowGroup gw3(ws1); sl@0: User::LeaveIfError(gw3.Construct(3)); sl@0: // sl@0: const TInt gw1Id=gw1.Identifier(); sl@0: gw1.DefaultOwningWindow(); sl@0: gw2.DefaultOwningWindow(); sl@0: /*const TInt gw2Id=*/gw2.Identifier(); sl@0: gw1.DefaultOwningWindow(); sl@0: TEST(gw1Id==ws1.GetDefaultOwningWindow()); sl@0: if (gw1Id!=ws1.GetDefaultOwningWindow()) sl@0: INFO_PRINTF3(_L("gw1Id==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1Id); sl@0: sl@0: gw3.DefaultOwningWindow(); sl@0: gw3.Close(); sl@0: TEST(gw1Id==ws1.GetDefaultOwningWindow()); sl@0: if (gw1Id!=ws1.GetDefaultOwningWindow()) sl@0: INFO_PRINTF3(_L("gw1Id==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw1Id); sl@0: sl@0: gw1.Close(); sl@0: TInt gw2Id=gw2.Identifier(); sl@0: TEST(gw2Id==ws1.GetDefaultOwningWindow()); sl@0: if (gw2Id!=ws1.GetDefaultOwningWindow()) sl@0: INFO_PRINTF3(_L("gw2Id==ws1.GetDefaultOwningWindow() - Expected: %d, Actual: %d"), ws1.GetDefaultOwningWindow(), gw2Id); sl@0: sl@0: gw2.SetOrdinalPosition(0); sl@0: gw2.Close(); sl@0: ws2.Flush(); sl@0: TRawEvent rawEvent; sl@0: rawEvent.Set(TRawEvent::EKeyDown,32); sl@0: TheClient->iWs.SimulateRawEvent(rawEvent); sl@0: TheClient->iWs.Flush(); sl@0: // sl@0: CleanupStack::PopAndDestroy(2,screen1); sl@0: ws1.Close(); sl@0: ws2.Close(); sl@0: } sl@0: sl@0: #define FREQ 500 sl@0: void CTGwHandle::IdentifierWrapAroundTestL() sl@0: { sl@0: TInt report=-1; sl@0: RWsSession ws1; sl@0: User::LeaveIfError(ws1.Connect()); sl@0: sl@0: // assign to the correct screen sl@0: CWsScreenDevice* screen = new (ELeave) CWsScreenDevice(ws1); sl@0: CleanupStack::PushL(screen); sl@0: User::LeaveIfError(screen->Construct(iTest->iScreenNumber)); sl@0: sl@0: RWindowGroup gw1(ws1); sl@0: User::LeaveIfError(gw1.Construct(1)); sl@0: gw1.EnableReceiptOfFocus(EFalse); sl@0: TInt id1=gw1.Identifier(); sl@0: RWindowGroup gw2(ws1); sl@0: User::LeaveIfError(gw2.Construct(2)); sl@0: gw2.EnableReceiptOfFocus(EFalse); sl@0: TInt id2=gw2.Identifier(); sl@0: gw2.Close(); // Allow gw2 id to be re-used sl@0: TInt id3; sl@0: sl@0: do sl@0: { sl@0: RWindowGroup gw3(ws1); sl@0: User::LeaveIfError(gw3.Construct(2)); sl@0: gw3.EnableReceiptOfFocus(EFalse); sl@0: id3=gw3.Identifier(); sl@0: if ((id3/FREQ)!=(report/FREQ)) // || id3<=10) sl@0: { sl@0: report=id3; sl@0: iTest->LogMessage(id3); sl@0: } sl@0: TEST(id3!=id1); // Check id1 is not re-used as the window hasn't been freed yet sl@0: if (id3==id1) sl@0: { sl@0: _LIT(KErr,"Window Group Id Reused!"); sl@0: LOG_MESSAGE(KErr); sl@0: } sl@0: gw3.Close(); sl@0: } while(id3!=id2); sl@0: sl@0: CleanupStack::PopAndDestroy(screen); sl@0: ws1.Close(); sl@0: } sl@0: sl@0: void GwHandleDestroyWindow(TAny* aWindow) sl@0: { sl@0: static_cast(aWindow)->Destroy(); sl@0: } sl@0: sl@0: RWindowGroup* CTGwHandle::CreateWindowGroupLC(RWsSession& aWs,TUint32 aClientHandle,TInt aParentId/*=0*/) sl@0: { sl@0: RWindowGroup* gw=new(ELeave) RWindowGroup(aWs); sl@0: CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,gw)); sl@0: if (aParentId>0) sl@0: { sl@0: User::LeaveIfError(gw->ConstructChildApp(aParentId,aClientHandle,EFalse)); sl@0: } sl@0: else sl@0: { sl@0: User::LeaveIfError(gw->Construct(aClientHandle,EFalse)); sl@0: } sl@0: return gw; sl@0: } sl@0: sl@0: void CTGwHandle::CreateGroupWindowsLC(RWsSession& aWs) sl@0: { sl@0: for(TInt ii=ENumGroups-1;ii>=0;--ii) sl@0: iGroups[ii]=CreateWindowGroupLC(aWs,ii); sl@0: } sl@0: sl@0: void CTGwHandle::CreateChainedGroupWindowsLC(RWsSession& aWs,TBool aSecondChain) sl@0: { sl@0: TInt parentId=0; sl@0: for(TInt ii=ENumChained-1;ii>=0;--ii) sl@0: { sl@0: iChained[ii]=CreateWindowGroupLC(aWs,ENumGroups+ii,parentId); sl@0: parentId=iChained[ii]->Identifier(); sl@0: } sl@0: if(aSecondChain) sl@0: { sl@0: parentId =0; sl@0: for(TInt ii=ENumChained-1;ii>=0;--ii) sl@0: { sl@0: iChained2[ii]=CreateWindowGroupLC(aWs,ENumGroups+ENumGroups+ii,parentId); sl@0: parentId=iChained2[ii]->Identifier(); sl@0: } sl@0: } sl@0: } sl@0: sl@0: void CTGwHandle::MoveGroups(RWindowGroup** aGroups,TInt aGp,TInt aNum,TInt aPos,TInt aInc/*=2*/) sl@0: { sl@0: TInt ii; sl@0: for(ii=aNum;ii>0;--ii) sl@0: { sl@0: aGroups[aGp]->SetOrdinalPosition(aPos); sl@0: aGp+=(aInc>0?1:-1); sl@0: aPos+=aInc; sl@0: } sl@0: } sl@0: sl@0: void CTGwHandle::TestGroups(TInt aPos) sl@0: { sl@0: TInt retVal; sl@0: TInt ii = 0; sl@0: for(ii=0;iiOrdinalPosition(); sl@0: TEST(retVal==aPos+ii); sl@0: if (retVal!=aPos+ii) sl@0: INFO_PRINTF3(_L("iChained[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), aPos+ii, retVal); sl@0: } sl@0: sl@0: for(ii=0;iiOrdinalPosition(); sl@0: TInt ret = (iiOrdinalPosition() return value - Expected: %d, Actual: %d"), ret, retVal); sl@0: } sl@0: } sl@0: sl@0: void CTGwHandle::TestGroupsBefore(TInt aPos) sl@0: { sl@0: TInt ii; sl@0: TInt retVal; sl@0: if (aPos>0) sl@0: { sl@0: for (ii=0;iiOrdinalPosition(); sl@0: TEST(retVal==ii); sl@0: if (retVal!=ii) sl@0: INFO_PRINTF3(_L("iGroups[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), ii, retVal); sl@0: } sl@0: } sl@0: for (ii=0;iiOrdinalPosition(); sl@0: TEST(retVal==aPos+2*ii); sl@0: if (retVal!=aPos+2*ii) sl@0: INFO_PRINTF3(_L("iChained[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), aPos+2*ii, retVal); sl@0: } sl@0: for (ii=0;iiOrdinalPosition(); sl@0: TEST(retVal==aPos+1+2*ii); sl@0: if (retVal!=aPos+1+2*ii) sl@0: INFO_PRINTF3(_L("iGroups[aPos+ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), aPos+1+2*ii, retVal); sl@0: } sl@0: for (ii=aPos+ENumChained-1;iiOrdinalPosition(); sl@0: TEST(retVal==ii+ENumChained); sl@0: if (retVal!=ii+ENumChained) sl@0: INFO_PRINTF3(_L("iGroups[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), ii+ENumChained, retVal); sl@0: } sl@0: } sl@0: sl@0: void CTGwHandle::WindowGroupChaining() sl@0: { sl@0: RWsSession& ws=TheClient->iWs; sl@0: CreateGroupWindowsLC(ws); sl@0: CreateChainedGroupWindowsLC(ws); sl@0: TestGroups(0); sl@0: TInt start,target,moveGp; sl@0: for(moveGp=0;moveGpstart+1) sl@0: MoveGroups(iGroups,target-1,target-start-1,ENumChained+target-1,-1); sl@0: if (target0) sl@0: MoveGroups(iGroups,0,start,0,1); sl@0: MoveGroups(iGroups,start,ENumChained-1,start+1); sl@0: TestGroupsBefore(start); sl@0: iChained[moveGp]->SetOrdinalPosition(target+moveGp); sl@0: TestGroups(target); sl@0: } sl@0: } sl@0: iChained[0]->SetOrdinalPosition(0); sl@0: TestGroups(0); sl@0: } sl@0: CleanupStack::PopAndDestroy(ENumGroups+ENumChained,iGroups[ENumGroups-1]); sl@0: } sl@0: sl@0: void CTGwHandle::WindowGroupChaining2() sl@0: { sl@0: RWsSession& ws=TheClient->iWs; sl@0: RWindowGroup* chain1=CreateWindowGroupLC(ws,1); sl@0: chain1->SetOrdinalPosition(0,1); sl@0: RWindowGroup* chain2=CreateWindowGroupLC(ws,2,chain1->Identifier()); sl@0: TInt retVal = chain2->OrdinalPriority(); sl@0: TEST(retVal==1); sl@0: if (retVal!=1) sl@0: INFO_PRINTF3(_L("chain2->OrdinalPriority() return value - Expected: %d, Actual: %d"), 1, retVal); sl@0: sl@0: chain1->SetOrdinalPosition(0,2); sl@0: retVal = chain2->OrdinalPriority(); sl@0: TEST(retVal==2); sl@0: if (retVal!=2) sl@0: INFO_PRINTF3(_L("chain2->OrdinalPriority() return value - Expected: %d, Actual: %d"), 2, retVal); sl@0: sl@0: chain2->SetOrdinalPosition(0,3); sl@0: retVal = chain1->OrdinalPriority(); sl@0: TEST(retVal==3); sl@0: if (retVal!=3) sl@0: INFO_PRINTF3(_L("chain1->OrdinalPriority() return value - Expected: %d, Actual: %d"), 3, retVal); sl@0: sl@0: CleanupStack::PopAndDestroy(2,chain1); sl@0: sl@0: //Test that two different sessions can't chain window-groups without permisson. sl@0: //Both sessions must use the same screen. sl@0: RWsSession ws2; sl@0: User::LeaveIfError(ws2.Connect()); sl@0: CleanupClosePushL(ws2); sl@0: chain1=CreateWindowGroupLC(ws2,1); sl@0: TInt id1=chain1->Identifier(); sl@0: sl@0: RWsSession ws3; sl@0: User::LeaveIfError(ws3.Connect()); sl@0: CleanupClosePushL(ws3); sl@0: RWindowGroup chain(ws3); sl@0: sl@0: RDebug::Print(KPlatsecBegin); sl@0: retVal = chain.ConstructChildApp(id1,2); sl@0: TEST(retVal==KErrPermissionDenied); sl@0: if (retVal!=KErrPermissionDenied) sl@0: INFO_PRINTF3(_L("chain.ConstructChildApp(id1,2) return value - Expected: %d, Actual: %d"), KErrPermissionDenied, retVal); sl@0: sl@0: RDebug::Print(KPlatsecEnd); sl@0: chain1->AllowProcessToCreateChildWindowGroups(TUid::Uid(0x10205152)); //Secure ID sl@0: retVal = chain.ConstructChildApp(id1,2); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("chain.ConstructChildApp(id1,2) return value - Expected: %d, Actual: %d"), KErrNone, retVal); sl@0: sl@0: chain.Close(); sl@0: CleanupStack::PopAndDestroy(3,&ws2); sl@0: } sl@0: sl@0: void CTGwHandle::UnchainWindowGroupsL() sl@0: { sl@0: RArray* windowHandles=new(ELeave) RArray; sl@0: CleanupStack::PushL(windowHandles); sl@0: CleanupClosePushL(*windowHandles); sl@0: GetGwListL(0,windowHandles); sl@0: TInt shellWindow=windowHandles->Count(); sl@0: //Creating chained window groups. sl@0: CreateChainedGroupWindowsLC(TheClient->iWs); sl@0: GetGwListL(0,windowHandles); sl@0: //Test total window groups in the list sl@0: TInt retVal = windowHandles->Count(); sl@0: TEST(retVal==ENumChained+shellWindow); sl@0: if (retVal!=ENumChained+shellWindow) sl@0: INFO_PRINTF3(_L("windowHandles->Count() return value - Expected: %d, Actual: %d"), ENumChained+shellWindow, retVal); sl@0: //Two unchained group windows sl@0: sl@0: //Test Parent Id sl@0: TInt parentId=0; sl@0: for(TInt ii=ENumChained-1;ii>=0;ii--) sl@0: { sl@0: RWsSession::TWindowGroupChainInfo window; sl@0: window.iId=iChained[ii]->Identifier(); sl@0: TInt loc=windowHandles->Find(window); sl@0: TEST(loc!=KErrNotFound); sl@0: if (loc==KErrNotFound) sl@0: INFO_PRINTF3(_L("windowHandles->Find(window) return value - Expected: %d, Actual: %d"), KErrNotFound, loc); sl@0: sl@0: if(loc!=KErrNotFound) sl@0: { sl@0: TEST((*windowHandles)[loc].iParentId==parentId); sl@0: if ((*windowHandles)[loc].iParentId!=parentId) sl@0: INFO_PRINTF3(_L("(*windowHandles)[loc].iParentId==parentId - Expected: %d, Actual: %d"), parentId, (*windowHandles)[loc].iParentId); sl@0: sl@0: parentId=window.iId; sl@0: } sl@0: } sl@0: //Test unchaining of chained window groups sl@0: for(TInt count=ENumChained-1;count>=0;count--) sl@0: { sl@0: iChained[count]->Close(); sl@0: GetGwListL(0,windowHandles); sl@0: TEST(windowHandles->Count()== count+shellWindow); sl@0: if (windowHandles->Count()!= count+shellWindow) sl@0: INFO_PRINTF3(_L("windowHandles->Count()==count+shellWindow - Expected: %d, Actual: %d"), count+shellWindow, windowHandles->Count()); sl@0: sl@0: } sl@0: CleanupStack::PopAndDestroy(ENumChained,iChained[ENumChained-1]); sl@0: sl@0: //delete middle windowgroup of chain which should kill all the child windows sl@0: CreateChainedGroupWindowsLC(TheClient->iWs); sl@0: TInt windowPos=2; sl@0: CleanupStack::Pop(2,iChained[1]); //Pop first 2 items iChained[0] and iChained[1] sl@0: iChained[windowPos]->Close();//Close the 3rd WindowGroup in the chain.should unchain 4 and 5 window group. sl@0: CleanupStack::PopAndDestroy(iChained[windowPos]); sl@0: CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,iChained[1])); sl@0: CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,iChained[0])); sl@0: GetGwListL(0,windowHandles); sl@0: retVal = ChainedWindowCount(windowHandles); sl@0: TEST(retVal==ENumChained-windowPos-1); sl@0: if (retVal!=ENumChained-windowPos-1) sl@0: INFO_PRINTF3(_L("ChainedWindowCount(windowHandles) return value - Expected: %d, Actual: %d"), ENumChained-windowPos-1, retVal); sl@0: sl@0: // CleanupStack::PopAndDestroy(ENumChained-1,iChained[ENumChained-1]); sl@0: sl@0: windowPos=3; sl@0: CleanupStack::Pop(2,iChained[1]); sl@0: iChained[windowPos]->Close();//Close the 2nd WindowGroup in the chain. sl@0: //should unchain all . sl@0: CleanupStack::PopAndDestroy(iChained[windowPos]); sl@0: CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,iChained[1])); sl@0: CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,iChained[0])); sl@0: GetGwListL(0,windowHandles); sl@0: retVal = ChainedWindowCount(windowHandles); sl@0: TEST(retVal==ENumChained-windowPos-2); sl@0: if (retVal!=ENumChained-windowPos-2) sl@0: INFO_PRINTF3(_L("ChainedWindowCount(windowHandles) return value - Expected: %d, Actual: %d"), ENumChained-windowPos-2, retVal); sl@0: sl@0: windowPos=4; sl@0: CleanupStack::Pop(2,iChained[1]); sl@0: iChained[windowPos]->Close();//Closing parent window group in chain. There should be no chain sl@0: CleanupStack::PopAndDestroy(iChained[windowPos]); sl@0: CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,iChained[1])); sl@0: CleanupStack::PushL(TCleanupItem(&GwHandleDestroyWindow,iChained[0])); sl@0: GetGwListL(0,windowHandles); sl@0: retVal = ChainedWindowCount(windowHandles); sl@0: TEST(retVal==ENumChained-windowPos-1); sl@0: if (retVal!=ENumChained-windowPos-1) sl@0: INFO_PRINTF3(_L("ChainedWindowCount(windowHandles) return value - Expected: %d, Actual: %d"), ENumChained-windowPos-1, retVal); sl@0: sl@0: CleanupStack::PopAndDestroy(ENumChained-3,iChained[ENumChained-4]); sl@0: windowHandles->Close(); sl@0: CleanupStack::PopAndDestroy(windowHandles); // causes windowsHandles->Close() called sl@0: CleanupStack::PopAndDestroy(windowHandles); // causes delete windowsHandles called sl@0: } sl@0: sl@0: TInt CTGwHandle::ChainedWindowCount(RArray* aWindowHandles) sl@0: { sl@0: TInt wndGrpCount=0; sl@0: for(TInt ii=0;iiCount();ii++) sl@0: { sl@0: if((*aWindowHandles)[ii].iParentId!=-1) sl@0: wndGrpCount++; sl@0: } sl@0: return wndGrpCount; sl@0: } sl@0: sl@0: void CTGwHandle::TestOrdinalPositionL() sl@0: { sl@0: TInt noOfGroupWnds = NumberOfWndGroupsWithZeroPriority(iTest->iScreenNumber); sl@0: //Creating the chained window groups sl@0: CreateChainedGroupWindowsLC(TheClient->iWs); sl@0: TestOrdinalPos(0); sl@0: //Test the ordinal position of all chained windows by setting the WndPos window sl@0: //to chainPos position sl@0: for(TInt wndPos=0;wndPosSetOrdinalPosition(chainPos); sl@0: TInt dung = chainPos-wndPos; sl@0: if(dung > noOfGroupWnds) sl@0: { sl@0: dung = noOfGroupWnds; sl@0: } sl@0: dung = Max(dung, 0); sl@0: TestOrdinalPos(chainPos - wndPos > noOfGroupWnds ? noOfGroupWnds : Max(chainPos - wndPos, 0)); sl@0: } sl@0: } sl@0: //Test for negative ordinal number sl@0: iChained[0]->SetOrdinalPosition(-2); sl@0: TestOrdinalPos(noOfGroupWnds); sl@0: CleanupStack::PopAndDestroy(ENumChained,iChained[ENumChained-1]); sl@0: } sl@0: sl@0: void CTGwHandle::TestOrdinalPositionNoDebugL() sl@0: { sl@0: TInt noOfGroupWnds = NumberOfWndGroupsWithZeroPriority(iTest->iScreenNumber); sl@0: //Creating the chained window groups sl@0: CreateChainedGroupWindowsLC(TheClient->iWs); sl@0: //Test the ordinal position of all chained windows sl@0: TestOrdinalPosNoDebug(0); sl@0: //Test the ordinal position of all chained windows by setting the WndPos window sl@0: //to chainPos position sl@0: for(TInt wndPos=0;wndPosSetOrdinalPosition(chainPos); sl@0: TestOrdinalPosNoDebug(chainPos - wndPos > noOfGroupWnds ? noOfGroupWnds : Max(chainPos - wndPos, 0)); sl@0: } sl@0: } sl@0: //Test for negative ordinal number sl@0: iChained[0]->SetOrdinalPosition(-2); sl@0: TestOrdinalPosNoDebug(noOfGroupWnds); sl@0: CleanupStack::PopAndDestroy(ENumChained,iChained[ENumChained-1]); sl@0: } sl@0: sl@0: void CTGwHandle::TestOrdinalPos(TInt aPos) sl@0: { sl@0: for(TInt ii=0;iiOrdinalPosition(); sl@0: TEST(iCha==aPos++); sl@0: if (iCha!=aPos-1) sl@0: { sl@0: INFO_PRINTF3(_L("iChained[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), aPos-1, iCha); sl@0: } sl@0: } sl@0: } sl@0: sl@0: void CTGwHandle::TestOrdinalPosNoDebug(TInt aPos) sl@0: { sl@0: for(TInt ii=0;iiOrdinalPosition(); sl@0: TEST(iCha==aPos++); sl@0: if (iCha!=aPos-1) sl@0: INFO_PRINTF3(_L("iChained[ii]->OrdinalPosition() return value - Expected: %d, Actual: %d"), aPos-1, iCha); sl@0: sl@0: } sl@0: } sl@0: sl@0: void CTGwHandle:: TestclosingclientL() sl@0: { sl@0: RWsSession ws1; sl@0: User::LeaveIfError(ws1.Connect()); sl@0: CleanupClosePushL(ws1); sl@0: sl@0: // assign to the correct screen sl@0: CWsScreenDevice* screen = new (ELeave) CWsScreenDevice(ws1); sl@0: CleanupStack::PushL(screen); sl@0: User::LeaveIfError(screen->Construct(iTest->iScreenNumber)); sl@0: sl@0: // Creating first Window Group sl@0: RWindowGroup gw1(ws1); sl@0: User::LeaveIfError(gw1.Construct(ENullWsHandle)); sl@0: ws1.SetWindowGroupOrdinalPosition(gw1.Identifier(),0); sl@0: sl@0: // Creating second Window Group sl@0: RWindowGroup gw2(ws1); sl@0: User::LeaveIfError(gw2.Construct(ENullWsHandle)); sl@0: gw2.SetOwningWindowGroup(gw1.Identifier()); sl@0: gw2.SetOrdinalPosition(1); sl@0: CleanupStack::PopAndDestroy(screen); sl@0: CleanupStack::PopAndDestroy(&ws1); sl@0: } sl@0: sl@0: void CTGwHandle::TestClearingAndSettingChildGroupsL() sl@0: { sl@0: RArray windowHandles; sl@0: CleanupClosePushL(windowHandles); sl@0: //Creating a chain of 5 window groups. sl@0: CreateChainedGroupWindowsLC(TheClient->iWs); sl@0: TInt ret=KErrNone; sl@0: // Want to test clearing and setting of window groups for chain lengths of 5 down to 2 sl@0: for(TInt jj=ENumChained-1;jj>0;jj--) sl@0: { sl@0: // For each window group in the chain, test clearing and setting a child group sl@0: for(TInt ii=jj;ii>0;ii--) sl@0: { sl@0: RWsSession::TWindowGroupChainInfo window1; sl@0: window1.iId=iChained[ii]->Identifier(); sl@0: GetGwListL(0,&windowHandles); sl@0: TInt loc=windowHandles.Find(window1); sl@0: TEST(loc!=KErrNotFound); sl@0: if(loc!=KErrNotFound) sl@0: { sl@0: RWsSession::TWindowGroupChainInfo window2; sl@0: window2.iId=iChained[ii-1]->Identifier(); sl@0: loc = windowHandles.Find(window2); sl@0: TEST(loc!=KErrNotFound); sl@0: // First test that the parent of the next window in the chain is the previous in the chain sl@0: if(loc!=KErrNotFound) sl@0: { sl@0: TEST(windowHandles[loc].iParentId==window1.iId); sl@0: } sl@0: // Then clear and test that the parent of the next window in the chain sl@0: // is no longer the previous window in the chain sl@0: ret=iChained[ii]->ClearChildGroup(); sl@0: TEST(ret==KErrNone); sl@0: // Try to clear a child group when it's already cleared - should return KErrArgument sl@0: ret=iChained[ii]->ClearChildGroup(); sl@0: TEST(ret==KErrArgument); sl@0: GetGwListL(0,&windowHandles); sl@0: loc = windowHandles.Find(window2); sl@0: TEST(loc!=KErrNotFound); sl@0: // Test that it has no parent (0) or is unchained (-1) sl@0: if(loc!=KErrNotFound) sl@0: { sl@0: if(ii==1) // last in chain therefore unchained, should return -1 sl@0: TEST(windowHandles[loc].iParentId==-1); sl@0: else // otherwise should return 0 signifying in a chain but with no parent sl@0: TEST(windowHandles[loc].iParentId==0); sl@0: } sl@0: // Reset the former child group as a child to the current group sl@0: ret=iChained[ii]->SetChildGroup(window2.iId); sl@0: TEST(ret==KErrNone); sl@0: // Test that it has now got it's parent back sl@0: GetGwListL(0,&windowHandles); sl@0: loc = windowHandles.Find(window2); sl@0: TEST(loc!=KErrNotFound); sl@0: if(loc!=KErrNotFound) sl@0: { sl@0: TEST(windowHandles[loc].iParentId==window1.iId); sl@0: } sl@0: } sl@0: } sl@0: // Reduce chain length by 1 sl@0: ret=iChained[jj]->ClearChildGroup(); sl@0: TEST(ret==KErrNone); sl@0: } sl@0: // Try to clear the child group of a window that's not in a queue - returns KErrArgument sl@0: ret=iChained[0]->ClearChildGroup(); sl@0: TEST(ret==KErrArgument); sl@0: // Test calling set on a non-existent window group - fictional id, larger than what exists sl@0: ret=iChained[0]->SetChildGroup(9999); sl@0: TEST(ret==KErrArgument); sl@0: // Cleanup sl@0: CleanupStack::PopAndDestroy(ENumChained,iChained[ENumChained-1]); sl@0: CleanupStack::PopAndDestroy(&windowHandles); sl@0: } sl@0: sl@0: void CTGwHandle::TestAgainstLoopsWhenAddingChildGroupsL() sl@0: { sl@0: //Creating two chains of 5 window groups. sl@0: CreateChainedGroupWindowsLC(TheClient->iWs,ETrue); sl@0: TInt ret=KErrNone; sl@0: sl@0: //Try to append any of element of this chain to the lastone (itself included) sl@0: //All these attempts should fail (otherwise a infinite loop will be set up) sl@0: for(TInt ii=ENumChained-1;ii>=0;ii--) sl@0: { sl@0: TInt windowId = iChained[ii]->Identifier(); sl@0: // Try to append it to the last one sl@0: ret=iChained[0]->SetChildGroup(windowId); sl@0: TEST(ret==KErrArgument); sl@0: if(ret!=KErrArgument) sl@0: { sl@0: _LIT(KLog,"Error: SetChildGroup with a GpWin belonging to the same queue succeeded, return value :%d"); sl@0: LOG_MESSAGE2(KLog,ret); sl@0: } sl@0: } sl@0: //Try to append any elements belonging to another chain to the last one of this chain sl@0: //All these trials should fail (otherwise a infinite loop will be set up) sl@0: //Except for the parent of the second chain. sl@0: for(TInt ii=0;iiIdentifier(); sl@0: // Try to append it to the last one sl@0: ret=iChained[0]->SetChildGroup(windowId); sl@0: if(ii != ENumChained-1) sl@0: { sl@0: TEST(ret==KErrArgument); sl@0: if(ret!=KErrArgument) sl@0: { sl@0: _LIT(KLog,"Error: SetChildGroup with a GpWin which already has a parent succeeded, return value :%d"); sl@0: LOG_MESSAGE2(KLog,ret); sl@0: } sl@0: iChained[0]->ClearChildGroup(); sl@0: } sl@0: else sl@0: { sl@0: TEST(ret==KErrNone); sl@0: if(ret!=KErrNone) sl@0: { sl@0: _LIT(KLog,"Error: SetChildGroup with a GpWin with no parent failed, return value :%d"); sl@0: LOG_MESSAGE2(KLog,ret); sl@0: } sl@0: } sl@0: } sl@0: TInt windowId = iChained2[ENumChained-1]->Identifier(); sl@0: ret=iChained[ENumChained-1]->SetChildGroup(windowId); sl@0: TEST(ret==KErrArgument); sl@0: if(ret!=KErrArgument) sl@0: { sl@0: _LIT(KLog,"Error: SetChildGroup successful on a GpWin which already has a child, return value :%d"); sl@0: LOG_MESSAGE2(KLog,ret); sl@0: } sl@0: //Now take a window group not belonging to any queue sl@0: //just take the parent's chain and pop it sl@0: //and try to append it to itself sl@0: ret=iChained[ENumChained-1]->ClearChildGroup(); sl@0: TEST(ret==KErrNone); sl@0: ret=iChained[ENumChained-1]->SetChildGroup(iChained[ENumChained-1]->Identifier()); sl@0: TEST(ret==KErrArgument); sl@0: if(ret!=KErrArgument) sl@0: { sl@0: _LIT(KLog,"Error: Setting GpWin as a child of itself succeeded, return value :%d"); sl@0: LOG_MESSAGE2(KLog,ret); sl@0: } sl@0: CleanupStack::PopAndDestroy(ENumChained+ENumChained,iChained[ENumChained-1]); sl@0: } sl@0: void CTGwHandle::RunTestCaseL(TInt /*aCurTestCase*/) sl@0: { sl@0: _LIT(KTest0,"Window group names"); sl@0: _LIT(KTest1,"Window group identifiers"); sl@0: _LIT(KTest2,"Owner to foreground"); sl@0: _LIT(KTest3,"FindWindowGroupIdentifier test"); sl@0: _LIT(KTest4,"IdentifierWrapAround test"); sl@0: _LIT(KTest5,"DefaultOwningWindow test"); sl@0: _LIT(KTest6,"DefaultOwningWindow2 test"); sl@0: _LIT(KTest7,"Window Group Chaining"); sl@0: _LIT(KTest8,"Window Group Chaining2"); sl@0: _LIT(KTest9,"Unchaining window group"); sl@0: _LIT(KTest10,"Ordinal Postion Test"); sl@0: _LIT(KTest11,"CrashTest on closing client"); sl@0: _LIT(KTest12,"Setting and Clearing Child Groups"); sl@0: _LIT(KTest13,"No Infinite Loops in Setting Child Groups"); sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName); sl@0: switch(++iTest->iState) sl@0: { sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0316 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test setting window group names sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Set the name of a window group to different values and check the sl@0: value is set correctly sl@0: sl@0: @SYMTestExpectedResults The window group name is set correctly sl@0: sl@0: */ sl@0: case 1: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0316")); sl@0: //iState=9; break; sl@0: iTest->LogSubTest(KTest0); sl@0: GwNamesL(); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0317 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test setting window group identifiers sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Set the identifiers of a window groups. manipulate the window groups and sl@0: check the identifiers remain correct sl@0: sl@0: @SYMTestExpectedResults The identifiers are correct for each window group after sl@0: manipulation sl@0: sl@0: */ sl@0: case 2: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0317")); sl@0: iTest->LogSubTest(KTest1); sl@0: GwIdentifierTestL(); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0318 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test moving different window groups to the foreground and bringing sl@0: back the backgorund sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Create some window groups and move them in turn to the foreground before sl@0: restoring the background sl@0: sl@0: @SYMTestExpectedResults Window groups move to and from the foreground with error sl@0: sl@0: */ sl@0: case 3: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0318")); sl@0: iTest->LogSubTest(KTest2); sl@0: OwnerToForegroundL(); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0319 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test returning different window groups identifiers by searching sl@0: on the name sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Create some window groups and return their identifiers by searching on sl@0: their names sl@0: sl@0: @SYMTestExpectedResults The correct identifiers are returned for each name sl@0: sl@0: */ sl@0: case 4: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0319")); sl@0: iTest->LogSubTest(KTest3); sl@0: FindWindowGroupIdentifierTestL(); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0320 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test that a windows group identifier is not used twice sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Assign a window group identifier to one window group and check sl@0: the same identifier can not be used for a second group sl@0: sl@0: @SYMTestExpectedResults Window group identifier can not be reused sl@0: sl@0: */ sl@0: case 5: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0320")); sl@0: iTest->LogSubTest(KTest4); sl@0: IdentifierWrapAroundTestL(); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0321 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test that the default owning window for window groups is set sl@0: correctly sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Set different default owning windows for different window groups. sl@0: Check the windows have been set correctly. sl@0: sl@0: @SYMTestExpectedResults The default owning windows for the groups are set correctly sl@0: sl@0: */ sl@0: case 6: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0321")); sl@0: iTest->LogSubTest(KTest5); sl@0: DefaultOwningWindowL(); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0322 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test that the default owning window for window groups is set sl@0: correctly sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Set different default owning windows for different window groups. sl@0: Check the windows have been set correctly. sl@0: sl@0: @SYMTestExpectedResults The default owning windows for the groups are set correctly sl@0: sl@0: */ sl@0: case 7: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0322")); sl@0: iTest->LogSubTest(KTest6); sl@0: DefaultOwningWindow2L(); sl@0: TheClient->iGroup->WinTreeNode()->SetOrdinalPosition(0); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0323 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test that window groups can be chained correctly sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Create a chain of window groups and check that the chain of groups sl@0: can be manipluated correctly sl@0: sl@0: @SYMTestExpectedResults The chain can be manipulated correctly sl@0: sl@0: */ sl@0: case 8: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0323")); sl@0: iTest->LogSubTest(KTest7); sl@0: WindowGroupChaining(); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0324 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test that window groups can be chained correctly sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Create a chain of window groups and check that the chain of groups sl@0: can be manipluated correctly sl@0: sl@0: @SYMTestExpectedResults The chain can be manipulated correctly sl@0: sl@0: */ sl@0: case 9: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0324")); sl@0: iTest->LogSubTest(KTest8); sl@0: WindowGroupChaining2(); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0325 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test that window groups can be unchained correctly sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Create chains of window groups and check that the window groups can be sl@0: unchained correctly sl@0: sl@0: @SYMTestExpectedResults The chain can be unchained correctly sl@0: sl@0: */ sl@0: case 10: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0325")); sl@0: iTest->LogSubTest(KTest9); sl@0: UnchainWindowGroupsL(); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0326 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test the ordinal position of chained window groups sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Create chains of window groups and check their ordinal position is correct sl@0: for different scenarios sl@0: sl@0: @SYMTestExpectedResults Ordinal position of chained window group is correct sl@0: sl@0: */ sl@0: case 11: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0326")); sl@0: iTest->LogSubTest(KTest10); sl@0: TestOrdinalPositionL(); sl@0: break; sl@0: case 12: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0326")); sl@0: iTest->LogSubTest(KTest10); sl@0: TestOrdinalPositionNoDebugL(); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0327 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test that window groups are dealt with correctly if their client is closed sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Create window groups and then close there client. sl@0: sl@0: @SYMTestExpectedResults The window groups of the closed client are handled without error sl@0: sl@0: */ sl@0: case 13: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0327")); sl@0: iTest->LogSubTest(KTest11); sl@0: TestclosingclientL(); sl@0: break; sl@0: case 14: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0327")); sl@0: iTest->LogSubTest(KTest12); sl@0: TestClearingAndSettingChildGroupsL(); sl@0: break; sl@0: case 15: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0327")); sl@0: iTest->LogSubTest(KTest13); sl@0: TestAgainstLoopsWhenAddingChildGroupsL(); sl@0: break; sl@0: default: sl@0: ((CTGwHandleStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); sl@0: ((CTGwHandleStep*)iStep)->CloseTMSGraphicsStep(); sl@0: TestComplete(); sl@0: break; sl@0: } sl@0: ((CTGwHandleStep*)iStep)->RecordTestResultL(); sl@0: } sl@0: sl@0: __WS_CONSTRUCT_STEP__(GwHandle)