diff -r 000000000000 -r 40261b775718 imagingandcamerafws/imaginginttest/src/TestImageDecoderDRM.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imagingandcamerafws/imaginginttest/src/TestImageDecoderDRM.cpp Tue Feb 02 01:56:55 2010 +0200 @@ -0,0 +1,231 @@ +// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Integration test. +// +// + +#include + +#include "TestImageDecoderDRM.h" + +const TInt KMimeMaxLength = 256; + +_LIT(KJpegRefFile, "jfif444.mbm"); // Reference filename +_LIT(KDefaultRightsUniqueId, "ICLTestjfif444Id001"); // Unique Id of the content + +// Positive Test + +/** +* +* Ctor for CTestImageDecDrmEnableAgentUI +* +* @param const TDesC& aTestName: Name of this test step used by the script file. +* +* @return CTestImageDecDrmEnableAgentUI*: +* Constructed CTestImageDecDrmEnableAgentUI object +* +*/ +CTestImageDecDrmEnableAgentUI* CTestImageDecDrmEnableAgentUI::NewL(const TDesC& aTestName) + { + return new (ELeave) CTestImageDecDrmEnableAgentUI(aTestName); + } + +/** +* +* Test step constructor. +* Each test step initialises its own name. +* +* @param const TDesC& aTestName: Name of this test step. +* +*/ +CTestImageDecDrmEnableAgentUI::CTestImageDecDrmEnableAgentUI(const TDesC& aTestName): + CTestStepConversion(aTestName) + { + iHeapSize = 500000; + } + +/** +* +* Do the test step. +* Each test step must supply an implementation for DoTestStepL. +* +* @return TVerdict: The result of the test step. +* +*/ +TVerdict CTestImageDecDrmEnableAgentUI::DoTestStepL() + { + TVerdict result = EPass; + if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0761-HP")) == 0) + { + result = TestStep_I_0761L(); + } + + return result; + } + +/** +* +* Test Step. +* +* @return TVerdict: The result of the test step. +* +*/ +TVerdict CTestImageDecDrmEnableAgentUI::TestStep_I_0761L() + { + // Dummy Hal call for heap balance on target + if (DummyHalCall() != KErrNone) + { + return EInconclusive; + } + + __MM_HEAP_MARK; + + TInt err = KErrNone; + err = RFbsSession::Connect(); + if (err != KErrNone) + { + INFO_PRINTF2(_L("RFbsSession::Connect() failed, err = %d"), err); + return EInconclusive; + } + + // Open and decode the image + TRAP(err, OpenImageAndDecodeFromFileSourceL(iFileNameSrc, KDefaultRightsUniqueId, EView)); + + RFbsSession::Disconnect(); + + __MM_HEAP_MARKEND; + + if (err == KErrNone) + { + return EPass; + } + else + { + INFO_PRINTF2(_L("Error in opening/decoding the image : %d"), err); + return EFail; + } + } + +/** +* +* Opens the image for 'the intent' and decodes. +* +* @param const TDesC& aFileName: Name of the data file. +* @param const TDesC& aUniqueId: Unique Id of the content file. +* @param ContentAccess::TIntent aIntent: Intent for opening the content file. +* +* @leave err: Leaves with 'err'. +* +*/ +void CTestImageDecDrmEnableAgentUI::OpenImageAndDecodeFromFileSourceL( + const TDesC& aFileName, + const TDesC& aUniqueId, + ContentAccess::TIntent aIntent) + { + // Get the path + TFileName theSourceFilename; + Directory(EInput, theSourceFilename); + theSourceFilename.Append(aFileName); + + User::LeaveIfError(iFs.Connect()); + + // Get the MIME type from ini file + TBuf8 mimeType; + ReadMimeTypeFromConfig(mimeType); + + INFO_PRINTF4(_L("Opening the file %S for intent %d, having Unique Id %S."), &theSourceFilename, aIntent, &aUniqueId); + TMMFileSource fileSource(theSourceFilename, aUniqueId, aIntent); + + // Open the image and create an image decoder + TInt err = KErrNone; + CImageDecoder* imageDecoder = NULL; + TRAP(err, imageDecoder = CImageDecoder::FileNewL(iFs, fileSource, mimeType)); + + if (err != KErrNone) + { + INFO_PRINTF3(_L("Cannot open file: %S. Unexpected Error: %d"), &theSourceFilename, err); + User::Leave(err); + } + + if (imageDecoder == NULL) + { + INFO_PRINTF1(_L("ImageDecoder is NULL!")); + User::Leave(err); + } + CleanupStack::PushL(imageDecoder); + + INFO_PRINTF4(_L("The file %S for intent %d, having Unique Id %S had been opened."), &theSourceFilename, aIntent, &aUniqueId); + + INFO_PRINTF1(_L("Enabling Agent's user interface for errors and confirmation requests.")); + err = imageDecoder->SetAgentProperty(EAgentPropertyAgentUI, 1); + + if (err != KErrNone) + { + INFO_PRINTF2(_L("SetAgentProperty(EAgentPropertyAgentUI, 1) failed with %d"), err); + INFO_PRINTF1(_L("\tFailure is expected, as RTA does not support this feature.")); + INFO_PRINTF1(_L("\tContinue test.")); + } + + // Create an active listener and push it on the cleanup stack + CActiveListener* activeListener = new (ELeave) CActiveListener; + CleanupStack::PushL(activeListener); + + const TFrameInfo* theFrameInfo = &imageDecoder->FrameInfo(); + + // Create the destination bitmap + CFbsBitmap* destBitmap = new (ELeave) CFbsBitmap; + CleanupStack::PushL(destBitmap); + + // Create the destination bitmap with the specified size and display mode + User::LeaveIfError(destBitmap->Create( + theFrameInfo->iOverallSizeInPixels, + theFrameInfo->iFrameDisplayMode)); + + activeListener ->InitialiseActiveListener(); + + // Decode the image + imageDecoder->Convert(&activeListener->iStatus, *destBitmap, 0); + CActiveScheduler::Start(); + + err = activeListener->iStatus.Int(); + if (err == KErrNone) + { + INFO_PRINTF4(_L("Conversion of file %S for intent %d, having Unique Id %S was successfull!"), &theSourceFilename, aIntent, &aUniqueId); + } + else + { + INFO_PRINTF2(_L("Failed during conversion of the file: %S"), &theSourceFilename); + + // imageDecoder, activeListener, destBitmap + CleanupStack::PopAndDestroy(3, imageDecoder); + User::Leave(err); + } + + // Get the reference filename + TFileName refFilename; + TBuf extension; + Directory(EReference, refFilename); + refFilename.Append(KJpegRefFile); + + if (err == KErrNone) + { + // Check the bitmaps + INFO_PRINTF2(_L("Comparison of the decoded file having Unique Id: %S."), &aUniqueId); + err = CheckBitmapL(*destBitmap, refFilename); + } + + // imageDecoder, activeListener, destBitmap + CleanupStack::PopAndDestroy(3, imageDecoder); + User::Leave(err); + }