sl@0: // Copyright (c) 1996-2009 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: // Test the window server bitmap class sl@0: // Test the window server bitmap class sl@0: // sl@0: // sl@0: sl@0: /** sl@0: @file sl@0: @test sl@0: @internalComponent - Internal Symbian test code sl@0: */ sl@0: sl@0: #include "TBITMAP.H" sl@0: sl@0: // sl@0: sl@0: CTBitmap::CTBitmap(CTestStep* aStep): sl@0: CTWsGraphicsBase(aStep) sl@0: { sl@0: } sl@0: sl@0: CTBitmap::~CTBitmap() sl@0: { sl@0: delete iBitmap1; sl@0: delete iBitmap2; sl@0: } sl@0: sl@0: void CTBitmap::ConstructL() sl@0: { sl@0: } sl@0: sl@0: void CTBitmap::BasicTestsL() sl@0: { sl@0: iBitmap1=new(ELeave) CWsBitmap(TheClient->iWs); sl@0: iBitmap2=new(ELeave) CWsBitmap(TheClient->iWs); sl@0: User::LeaveIfError(iBitmap1->Create(TSize(20,10),EGray4)); sl@0: // Re-create should close previous Create sl@0: User::LeaveIfError(iBitmap1->Create(TSize(20,10),EGray4)); sl@0: User::LeaveIfError(iBitmap2->Duplicate(iBitmap1->Handle())); sl@0: TEST(iBitmap1->SizeInPixels()==iBitmap2->SizeInPixels()); sl@0: sl@0: TInt err=iBitmap2->Load(_L("NOTEXIST.XXX"),0); sl@0: TEST(err==KErrNotFound || err==KErrPathNotFound); sl@0: if (err!=KErrNotFound && err!=KErrPathNotFound) sl@0: INFO_PRINTF4(_L("Bitmap2->Load(_L(NOTEXIST.XXX),0) return value - Expected: %d or %d , Actual: %d"), KErrNotFound, KErrPathNotFound, err); sl@0: sl@0: TInt retVal = iBitmap2->Handle(); sl@0: TEST(retVal==0); sl@0: if (retVal!=0) sl@0: INFO_PRINTF3(_L("iBitmap2->Handle() return value - Expected: %d , Actual: %d"), 0, retVal); sl@0: sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: fs.SetNotifyUser(EFalse); sl@0: TInt ret=fs.MkDir(SAVE_BITMAP_NAME); sl@0: if (ret!=KErrNone && ret!=KErrAlreadyExists && ret!=KErrPathNotFound) sl@0: User::Leave(ret); sl@0: fs.Close(); sl@0: // sl@0: retVal = iBitmap1->Save(SAVE_BITMAP_NAME); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("iBitmap1->Save(SAVE_BITMAP_NAME) return value - Expected: %d , Actual: %d"), KErrNone, retVal); sl@0: sl@0: retVal = iBitmap2->Load(SAVE_BITMAP_NAME,0); sl@0: TEST(retVal==KErrNone); sl@0: if (retVal!=KErrNone) sl@0: INFO_PRINTF3(_L("iBitmap2->Load(SAVE_BITMAP_NAME,0) return value - Expected: %d , Actual: %d"), KErrNone, retVal); sl@0: sl@0: TEST(iBitmap1->SizeInPixels()==iBitmap2->SizeInPixels()); sl@0: } sl@0: sl@0: sl@0: void CTBitmap::TestFixForPDEF098889L() sl@0: { sl@0: TRequestStatus status; sl@0: TThreadParams params; sl@0: params.iScreenNr = TheClient->iWs.GetFocusScreen(); sl@0: sl@0: RThread thread1; sl@0: params.iFunction = Function1PDEF098889L; sl@0: TEST(thread1.Create(_L("PDEF098889_1"), ThreadFunction, 0x1000, NULL, ¶ms)==KErrNone); sl@0: thread1.Logon(status); sl@0: thread1.Resume(); sl@0: User::WaitForRequest(status); sl@0: TEST(status==KErrNone); sl@0: TEST(thread1.ExitType()==EExitKill); sl@0: thread1.Close(); sl@0: sl@0: RThread thread2; sl@0: params.iFunction = Function2PDEF098889L; sl@0: TEST(thread2.Create(_L("PDEF098889_2"), ThreadFunction, 0x1000, NULL, ¶ms)==KErrNone); sl@0: thread2.Logon(status); sl@0: thread2.Resume(); sl@0: User::WaitForRequest(status); sl@0: TEST(status==KErrNone); sl@0: TEST(thread2.ExitType()==EExitKill); sl@0: thread2.Close(); sl@0: } sl@0: sl@0: TInt CTBitmap::ThreadFunction(TAny* aParams) sl@0: { sl@0: CTrapCleanup *trap = CTrapCleanup::New(); sl@0: __ASSERT_ALWAYS(trap, User::Invariant()); sl@0: RWsSession session; sl@0: TInt err = session.Connect(); sl@0: if (err == KErrNone) sl@0: { sl@0: CWsScreenDevice *device = new CWsScreenDevice(session); sl@0: if (device) sl@0: { sl@0: err = device->Construct(static_cast(aParams)->iScreenNr); sl@0: if (err == KErrNone) sl@0: { sl@0: TRAP(err, static_cast(aParams)->iFunction(session, *device)); sl@0: } sl@0: delete device; sl@0: } sl@0: else sl@0: err = KErrNoMemory; sl@0: session.Close(); sl@0: } sl@0: delete trap; sl@0: return err; sl@0: } sl@0: sl@0: void CTBitmap::Function1PDEF098889L(RWsSession& aSession, CWsScreenDevice& aDevice) sl@0: { sl@0: CWindowGc *gc; sl@0: User::LeaveIfError(aDevice.CreateContext(gc)); sl@0: CleanupStack::PushL(gc); sl@0: RWindowGroup group(aSession); sl@0: User::LeaveIfError(group.Construct(1, EFalse)); sl@0: CWsBitmap *bitmap = new(ELeave) CWsBitmap(aSession); sl@0: CleanupStack::PushL(bitmap); sl@0: User::LeaveIfError(bitmap->Create(TSize(32, 32), EGray256)); sl@0: RWindow window(aSession); sl@0: User::LeaveIfError(window.Construct(group, 2)); sl@0: window.SetExtent(TPoint(0,0), TSize(32, 32)); sl@0: User::LeaveIfError(window.SetRequiredDisplayMode(EColor64K)); sl@0: window.Activate(); sl@0: window.BeginRedraw(); sl@0: gc->Activate(window); sl@0: gc->BitBlt(TPoint(0, 0), bitmap); sl@0: gc->Deactivate(); sl@0: window.EndRedraw(); sl@0: CleanupStack::PopAndDestroy(bitmap); sl@0: aSession.Flush(); sl@0: CleanupStack::PopAndDestroy(gc); sl@0: } sl@0: sl@0: void CTBitmap::Function2PDEF098889L(RWsSession& aSession, CWsScreenDevice& /*aDevice*/) sl@0: { sl@0: RWindowGroup group(aSession); sl@0: User::LeaveIfError(group.Construct(1, EFalse)); sl@0: CWsBitmap *bitmap = new(ELeave) CWsBitmap(aSession); sl@0: CleanupStack::PushL(bitmap); sl@0: User::LeaveIfError(bitmap->Create(TSize(32, 32), EGray256)); sl@0: RWindow window(aSession); sl@0: User::LeaveIfError(window.Construct(group, 2)); sl@0: window.SetExtent(TPoint(0,0), TSize(32, 32)); sl@0: User::LeaveIfError(window.SetRequiredDisplayMode(EColor64K)); sl@0: User::LeaveIfError(window.SetTransparencyWsBitmap(*bitmap)); sl@0: window.Activate(); sl@0: CleanupStack::PopAndDestroy(bitmap); sl@0: aSession.Flush(); sl@0: } sl@0: sl@0: void CTBitmap::RunTestCaseL(TInt /*aCurTestCase*/) sl@0: { sl@0: ((CTBitmapStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName); sl@0: switch(++iTest->iState) sl@0: { sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0201 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test basic bitmap functionality sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Test that bitmaps can be loaded, copied and saved sl@0: correctly sl@0: sl@0: @SYMTestExpectedResults The bitmaps are manipulated withotu error sl@0: */ sl@0: case 1: sl@0: ((CTBitmapStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0201")); sl@0: iTest->LogSubTest(_L("Bitmap1")); sl@0: BasicTestsL(); sl@0: break; sl@0: case 2: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0532 sl@0: */ sl@0: ((CTBitmapStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0532")); sl@0: if (TransparencySupportedL()==KErrNotSupported) sl@0: return; sl@0: iTest->LogSubTest(_L("Test fix for PDEF098889")); sl@0: TestFixForPDEF098889L(); sl@0: break; sl@0: default: sl@0: ((CTBitmapStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); sl@0: ((CTBitmapStep*)iStep)->CloseTMSGraphicsStep(); sl@0: TestComplete(); sl@0: break; sl@0: } sl@0: ((CTBitmapStep*)iStep)->RecordTestResultL(); sl@0: } sl@0: sl@0: __WS_CONSTRUCT_STEP__(Bitmap)