sl@0: // Copyright (c) 2007-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: // sl@0: sl@0: #include sl@0: #include sl@0: #include "ecamdirectviewfindertest.h" sl@0: #include "ECamUnitTestPluginUids.hrh" sl@0: #include "ECamUnitTestPlugin.h" sl@0: #include sl@0: sl@0: /*-------------------------------------------------------- sl@0: DirectViewFinder : RECamDirectViewFinderTest sl@0: *--------------------------------------------------------*/ sl@0: RECamDirectViewFinderTest* RECamDirectViewFinderTest::NewL(const TDesC& aTestStep) sl@0: { sl@0: RECamDirectViewFinderTest* self = new (ELeave) RECamDirectViewFinderTest(aTestStep); sl@0: return self; sl@0: } sl@0: sl@0: RECamDirectViewFinderTest::RECamDirectViewFinderTest(const TDesC& aTestStep) sl@0: { sl@0: iTestStepName.Copy(aTestStep); sl@0: } sl@0: sl@0: TVerdict RECamDirectViewFinderTest::DoTestStepL() sl@0: { sl@0: if(!iTestStepName.Compare(_L("MM-ECM-ADV-U-044-HP"))) sl@0: { sl@0: return DoTestStep_44L(); sl@0: } sl@0: else if(!iTestStepName.Compare(_L("MM-ECM-ADV-U-045-HP"))) sl@0: { sl@0: return DoTestStep_45L(); sl@0: } sl@0: return EInconclusive; sl@0: } sl@0: sl@0: TVerdict RECamDirectViewFinderTest::DoTestStep_44L() sl@0: { sl@0: sl@0: TVerdict verdict = EFail; sl@0: INFO_PRINTF1(_L("Alloc test")); sl@0: TInt i; sl@0: TInt err; sl@0: for (i = 1 ; ; i++) sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: if (i % 5 == 0) sl@0: { sl@0: INFO_PRINTF2(_L("Fail count = %d"), i); sl@0: } sl@0: sl@0: __UHEAP_SETFAIL(RHeap::EFailNext, i); sl@0: sl@0: TRAP(err, verdict = DoTestStep_Alloc_44L()); sl@0: sl@0: TAny* testAlloc = NULL; sl@0: testAlloc = User::Alloc(1); sl@0: TBool heapTestingComplete = (testAlloc == NULL) && (err==KErrNone); sl@0: User::Free(testAlloc); sl@0: sl@0: __UHEAP_RESET; sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: if ((err != KErrNoMemory && verdict == EPass ) || heapTestingComplete) sl@0: { sl@0: INFO_PRINTF4(_L("err = %d, verdict = %d, Fail count = %d"), err, verdict, i); sl@0: INFO_PRINTF1(_L("Alloc testing completed successfully")); sl@0: verdict = EPass; sl@0: break; sl@0: } sl@0: } sl@0: return verdict; sl@0: sl@0: } sl@0: sl@0: TVerdict RECamDirectViewFinderTest::DoTestStep_Alloc_44L() sl@0: { sl@0: TVerdict result = EPass; sl@0: CCamera* camera = NULL; sl@0: sl@0: MCameraObserver* observer = NULL; sl@0: TInt error = KErrNone; sl@0: CCamera::CCameraDirectViewFinder* directviewfinder = NULL; sl@0: sl@0: // using observer sl@0: __MM_HEAP_MARK; sl@0: INFO_PRINTF1(_L("Create camera using Camera::NewL() and MCameraObserver")); sl@0: sl@0: TRAP(error, camera = CCamera::NewL(*observer, 0)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: CleanupStack::PushL(camera); sl@0: INFO_PRINTF1(_L("KErrNone return from CCamera::NewL()")); sl@0: directviewfinder = static_cast (camera->CustomInterface(KECamDirectViewFinderUid)); sl@0: if (directviewfinder!= NULL) sl@0: { sl@0: CleanupStack::PushL(directviewfinder); sl@0: INFO_PRINTF1(_L("CCameraDirectViewFinder object was created")); sl@0: CleanupStack::PopAndDestroy(directviewfinder); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("CCameraDirectViewFinder object wasn't created")); sl@0: result = EFail; sl@0: CleanupStack::PopAndDestroy(camera); sl@0: User::Leave (KErrNoMemory); sl@0: } sl@0: CleanupStack::PopAndDestroy(camera); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Unexpected %d return from CCamera::NewL()"), error); sl@0: result = EFail; sl@0: User::Leave (KErrNoMemory); sl@0: } sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: // using observer 2 sl@0: MCameraObserver2* observer2 = NULL; sl@0: sl@0: __MM_HEAP_MARK; sl@0: INFO_PRINTF1(_L("Create camera using Camera::New2L() and MCameraObserver2")); sl@0: sl@0: TRAP(error, camera = CCamera::New2L(*observer2, 0,0)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: CleanupStack::PushL(camera); sl@0: INFO_PRINTF1(_L("KErrNone return from CCamera::New2L()")); sl@0: directviewfinder = static_cast (camera->CustomInterface(KECamDirectViewFinderUid)); sl@0: if (directviewfinder!= NULL) sl@0: { sl@0: CleanupStack::PushL(directviewfinder); sl@0: INFO_PRINTF1(_L("CCameraDirectViewFinder object was created")); sl@0: CleanupStack::PopAndDestroy(directviewfinder); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("CCameraDirectViewFinder object wasn't created")); sl@0: result = EFail; sl@0: CleanupStack::PopAndDestroy(camera); sl@0: User::Leave (KErrNoMemory); sl@0: } sl@0: CleanupStack::PopAndDestroy(camera); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Unexpected %d return from CCamera::New2L(): observer 2"), error); sl@0: result = EFail; sl@0: User::Leave (KErrNoMemory); sl@0: } sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: // create a directviewfinder object using New2L sl@0: __MM_HEAP_MARK; sl@0: INFO_PRINTF1(_L("Create camera using Camera::New2L() and MCameraObserver2")); sl@0: sl@0: TRAP(error, camera = CCamera::New2L(*observer2, 0,0)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: CleanupStack::PushL(camera); sl@0: INFO_PRINTF1(_L("KErrNone return from CCamera::New2L()")); sl@0: TRAP(error, directviewfinder = CCamera::CCameraDirectViewFinder::NewL(*camera)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: CleanupStack::PushL(directviewfinder); sl@0: INFO_PRINTF1(_L("CCameraDirectViewFinder object was created using NewL")); sl@0: CleanupStack::PopAndDestroy(directviewfinder); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("CCameraDirectViewFinder object was not created using NewL")); sl@0: result = EFail; sl@0: CleanupStack::PopAndDestroy(camera); sl@0: User::Leave (KErrNoMemory); sl@0: } sl@0: CleanupStack::PopAndDestroy(camera); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Unexpected %d return from CCamera::New2L(): observer 2"), error); sl@0: result = EFail; sl@0: User::Leave (KErrNoMemory); sl@0: } sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return result; sl@0: } sl@0: TVerdict RECamDirectViewFinderTest::DoTestStep_45L() sl@0: { sl@0: TVerdict result = EPass; sl@0: CCamera* camera = NULL; sl@0: sl@0: TInt error = KErrNone; sl@0: CCamera::CCameraDirectViewFinder* directviewfinder = NULL; sl@0: sl@0: // create a directviewfinder object using New2L sl@0: __MM_HEAP_MARK; sl@0: MCameraObserver2* observer2 = NULL; sl@0: INFO_PRINTF1(_L("Create camera using Camera::New2L() and MCameraObserver2")); sl@0: sl@0: TRAP(error, camera = CCamera::New2L(*observer2, 0,0)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: CleanupStack::PushL(camera); sl@0: INFO_PRINTF1(_L("KErrNone return from CCamera::New2L()")); sl@0: TRAP(error, directviewfinder = CCamera::CCameraDirectViewFinder::NewL(*camera)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: INFO_PRINTF1(_L("CCameraDirectViewFinder object was created using NewL")); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("CCameraDirectViewFinder object was not created using NewL")); sl@0: return EFail; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Unexpected %d return from CCamera::New2L(): observer 2"), error); sl@0: result = EFail; sl@0: } sl@0: sl@0: if (directviewfinder!= NULL) sl@0: { sl@0: CleanupStack::PushL(directviewfinder); sl@0: sl@0: // get the default viewfinder state sl@0: CCamera::CCameraDirectViewFinder::TViewFinderState vfstate; sl@0: vfstate = directviewfinder->ViewFinderState(); sl@0: sl@0: // the vfstate should be EViewFinderInActive sl@0: if (vfstate != CCamera::CCameraDirectViewFinder::EViewFinderInActive) sl@0: { sl@0: INFO_PRINTF1(_L("Direct Viewfinder state incorrectly set")); sl@0: return EFail; sl@0: } sl@0: sl@0: // Assumption is that meanwhile direct viewfinder has been started. This would be done by calling CCamera::StartViewFinderDirectL(). sl@0: // This function starts the direct viewfinder and hence changes the state to active. sl@0: // Also performs initial boundary checking that 'viewfinder remains inactive before its called'. So, the vfstate changes to active. sl@0: // The next step is to pause the direct viewfinder sl@0: sl@0: TRAP(error, directviewfinder->PauseViewFinderDirectL()); sl@0: sl@0: if(error==KErrNone) sl@0: { sl@0: INFO_PRINTF1(_L("View finder paused successfully")); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("direct viewfinder pause - %d"), error); sl@0: return EFail; sl@0: } sl@0: sl@0: vfstate = directviewfinder->ViewFinderState(); sl@0: sl@0: // the vfstate should be changed to EViewFinderPause sl@0: if (vfstate != CCamera::CCameraDirectViewFinder::EViewFinderPause) sl@0: { sl@0: INFO_PRINTF1(_L("Direct Viewfinder state incorrectly set after pausing")); sl@0: return EFail; sl@0: } sl@0: sl@0: // The next step is to resume the direct viewfinder sl@0: sl@0: TRAP(error, directviewfinder->ResumeViewFinderDirectL()); sl@0: sl@0: if(error==KErrNone) sl@0: { sl@0: INFO_PRINTF1(_L("View finder resumed successfully")); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("direct viewfinder resume - %d"), error); sl@0: return EFail; sl@0: } sl@0: sl@0: vfstate = directviewfinder->ViewFinderState(); sl@0: sl@0: // the vfstate should be changed to EViewFinderActive sl@0: if (vfstate != CCamera::CCameraDirectViewFinder::EViewFinderActive) sl@0: { sl@0: INFO_PRINTF1(_L("Direct Viewfinder state incorrectly set after resuming")); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(directviewfinder); sl@0: } sl@0: CleanupStack::PopAndDestroy(camera); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return result; sl@0: }