--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imaging/imaginginttest/src/TestImageDecoderFileSource.cpp Wed Aug 25 12:29:52 2010 +0300
@@ -0,0 +1,643 @@
+// 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 tests.
+//
+//
+
+#include <testframework.h>
+
+#include "TestImageDecoderFileSource.h"
+
+// Positive Tests
+
+/**
+*
+* Ctor for CTestImageDecFileSource
+*
+* @param The name of this test step used by the script file.
+*
+* @return CTestImageDecFileSource*:
+* Constructed CTestImageDecFileSource object
+*
+*/
+CTestImageDecFileSource *CTestImageDecFileSource::NewL(const TDesC& aTestName)
+ {
+ return new (ELeave) CTestImageDecFileSource(aTestName);
+ }
+
+/**
+*
+* Test step constructor.
+* Each test step initialises its own name.
+*
+* @param The name of this test step.
+*
+*/
+CTestImageDecFileSource::CTestImageDecFileSource(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 CTestImageDecFileSource::DoTestStepL()
+ {
+ TVerdict result = EPass;
+ if ((iTestStepName.Compare(_L("MM-ICL-FRM-I-0800-HP")) == 0) || // TMMFileSource
+ (iTestStepName.Compare(_L("MM-ICL-FRM-I-0801-HP")) == 0) ) // TMMFileSource, mimeType
+ {
+ result = TestStep_I_0800_0801L();
+ }
+
+ return result;
+ }
+
+/**
+*
+* Read and decode an image, a JPEG, from a file.
+*
+* @return TVerdict: The result of the test step.
+*
+*/
+TVerdict CTestImageDecFileSource::TestStep_I_0800_0801L()
+ {
+ // 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));
+
+ RFbsSession::Disconnect();
+
+ __MM_HEAP_MARKEND;
+
+ if (err == KErrNone)
+ {
+ return EPass;
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Error in opening/decoding the image : %d"), err);
+ return EFail;
+ }
+ }
+
+/**
+*
+* Read and decode an image, a JPEG, from a file passing FileSource.
+*
+* @param filename of the image
+*
+* @leave err: Leaves with 'err'.
+*
+*/
+void CTestImageDecFileSource::OpenImageAndDecodeFromFileSourceL(const TDesC& aFileName)
+ {
+ // Get the path
+ TFileName theSourceFilename;
+ Directory(EInput, theSourceFilename);
+ theSourceFilename.Append(aFileName);
+
+ User::LeaveIfError(iFs.Connect());
+
+ // Create TMMFileSource
+ TMMFileSource fileSource(theSourceFilename);
+
+ // Open the image and create an image decoder
+ TInt err = KErrNone;
+ if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0800-HP")) == 0)
+ {
+ INFO_PRINTF2(_L("Opening the file by passing FileSource : %S"), &theSourceFilename);
+ TRAP(err, iImageDecoder = CImageDecoder::FileNewL(iFs, fileSource));
+ }
+ else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0801-HP")) == 0)
+ {
+ INFO_PRINTF2(_L("Opening the file by passing FileSource and MIME type : %S"), &theSourceFilename);
+ TBuf8<KMaxMimeLength> mimeType;
+ ReadMimeTypeFromConfig(mimeType); // MIME type
+ TRAP(err, iImageDecoder = CImageDecoder::FileNewL(iFs, fileSource, mimeType));
+ }
+
+ if (err != KErrNone)
+ {
+ INFO_PRINTF3(_L("Cannot open file: %S. Unexpected Error: %d"), &theSourceFilename, err);
+ delete iImageDecoder;
+ iImageDecoder = NULL;
+
+ User::Leave(err);
+ }
+
+ if (iImageDecoder == NULL)
+ {
+ INFO_PRINTF1(_L("ImageDecoder is NULL!"));
+ User::Leave(err);
+ }
+
+ INFO_PRINTF2(_L("The file: %S had been opened."), &theSourceFilename);
+
+ // Create an active listener and push it on the cleanup stack
+ CActiveListener* activeListener = new (ELeave) CActiveListener;
+ CleanupStack::PushL(activeListener);
+
+ const TFrameInfo* theFrameInfo = &iImageDecoder->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
+ iImageDecoder->Convert(&activeListener->iStatus, *destBitmap, 0);
+ CActiveScheduler::Start();
+
+ err = activeListener -> iStatus.Int();
+ if (err == KErrNone)
+ {
+ INFO_PRINTF2(_L("Conversion of file %S was successfull!"), &theSourceFilename);
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Failed during conversion of the file: %S"), &theSourceFilename);
+ delete iImageDecoder;
+ iImageDecoder = NULL;
+
+ // activeListener, destBitmap
+ CleanupStack::PopAndDestroy(2, activeListener);
+
+ User::Leave(err);
+ }
+
+ TFileName theReferenceFilename;
+ TBuf<KLenBufferExtension> theExtension;
+
+ Directory(EReference, theReferenceFilename);
+ TInt theSeparatorPos = aFileName.LocateReverse('.') + 1;
+ theReferenceFilename.Append(aFileName.Left(theSeparatorPos));
+ GetImageExtension(KImageTypeMBMUid, theExtension);
+ theReferenceFilename.Append(theExtension);
+
+ if (err == KErrNone)
+ {
+ // Check the bitmaps
+ err = CheckBitmapL(*destBitmap, theReferenceFilename);
+ }
+
+ delete iImageDecoder;
+ iImageDecoder = NULL;
+
+ // activeListener, destBitmap
+ CleanupStack::PopAndDestroy(2, activeListener);
+
+ User::Leave(err);
+ }
+
+
+
+/**
+*
+* Ctor for CTestImageDecFileHandleSource
+*
+* @param The name of this test step used by the script file.
+*
+* @return CTestImageDecFileHandleSource*:
+* Constructed CTestImageDecFileHandleSource object
+*
+*/
+CTestImageDecFileHandleSource *CTestImageDecFileHandleSource::NewL(const TDesC& aTestName)
+ {
+ return new (ELeave) CTestImageDecFileHandleSource(aTestName);
+ }
+
+/**
+*
+* Test step constructor.
+* Each test step initialises its own name.
+*
+* @param The name of this test step.
+*
+*/
+CTestImageDecFileHandleSource::CTestImageDecFileHandleSource(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 CTestImageDecFileHandleSource::DoTestStepL()
+ {
+ TVerdict result = EPass;
+ if ((iTestStepName.Compare(_L("MM-ICL-FRM-I-0802-HP")) == 0) || // TMMFileHandleSource
+ (iTestStepName.Compare(_L("MM-ICL-FRM-I-0803-HP")) == 0)) // TMMFileHandleSource, mimeType
+ {
+ result = TestStep_I_0802_0803L();
+ }
+
+ return result;
+ }
+
+/**
+*
+* Read and decode an image, a JPEG, from a file passing FileHandleSource.
+*
+* @return TVerdict: The result of the test step.
+*
+*/
+TVerdict CTestImageDecFileHandleSource::TestStep_I_0802_0803L()
+ {
+ // Dummy Hal call for heap balance on target
+ if (DummyHalCall() != KErrNone)
+ {
+ return EInconclusive;
+ }
+
+ __MM_HEAP_MARK;
+
+ TInt err = KErrNone;
+ User::LeaveIfError(FbsStartup());
+ err = RFbsSession::Connect();
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("RFbsSession::Connect() failed, err = %d"), err);
+ return EInconclusive;
+ }
+
+ // Open and decode the image
+ TRAP(err, OpenImageAndDecodeFromFileHandleSourceL(iFileNameSrc));
+
+ RFbsSession::Disconnect();
+
+ __MM_HEAP_MARKEND;
+
+ if (err == KErrNone)
+ {
+ return EPass;
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Error in opening/decoding the image : %d"), err);
+ return EFail;
+ }
+ }
+
+/**
+*
+* Read and decode an image, a JPEG, from a file passing FileHandleSource.
+*
+* @param filename of the image
+*
+* @leave err: Leaves with 'err'.
+*
+*/
+void CTestImageDecFileHandleSource::OpenImageAndDecodeFromFileHandleSourceL(const TDesC& aFileName)
+ {
+ // Get the path
+ TFileName theSourceFilename;
+ Directory(EInput, theSourceFilename);
+ theSourceFilename.Append(aFileName);
+
+ User::LeaveIfError(iFs.Connect());
+
+ INFO_PRINTF2(_L("Opening the file by RFile : %S"), &theSourceFilename);
+ RFile rFile;
+ TInt res = rFile.Open(iFs, theSourceFilename, EFileWrite);
+ User::LeaveIfError(res);
+
+ // Create TMMFileHandleSource
+ TMMFileHandleSource fileHandleSource(rFile);
+
+ // Open the image and create an image decoder
+ TInt err = KErrNone;
+ if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0802-HP")) == 0)
+ {
+ INFO_PRINTF2(_L("Opening the file by passing FileHandleSource : %S"), &theSourceFilename);
+ TRAP(err, iImageDecoder = CImageDecoder::FileNewL(iFs, fileHandleSource));
+ }
+ else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0803-HP")) == 0)
+ {
+ INFO_PRINTF2(_L("Opening the file by passing FileHandleSource and MIME type : %S"), &theSourceFilename);
+ TBuf8<KMaxMimeLength> mimeType;
+ ReadMimeTypeFromConfig(mimeType); // MIME type
+ TRAP(err, iImageDecoder = CImageDecoder::FileNewL(iFs, fileHandleSource, mimeType));
+ }
+
+ if (err != KErrNone)
+ {
+ INFO_PRINTF3(_L("Cannot open file: %S. Unexpected Error: %d"), &theSourceFilename, err);
+ delete iImageDecoder;
+ iImageDecoder = NULL;
+
+ User::Leave(err);
+ }
+
+ if (iImageDecoder == NULL)
+ {
+ INFO_PRINTF1(_L("ImageDecoder is NULL!"));
+ User::Leave(err);
+ }
+
+ INFO_PRINTF2(_L("The file: %S had been opened."), &theSourceFilename);
+
+ // Create an active listener and push it on the cleanup stack
+ CActiveListener* activeListener = new (ELeave) CActiveListener;
+ CleanupStack::PushL(activeListener);
+
+ const TFrameInfo* theFrameInfo = &iImageDecoder->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
+ iImageDecoder->Convert(&activeListener->iStatus, *destBitmap, 0);
+ CActiveScheduler::Start();
+
+ err = activeListener -> iStatus.Int();
+ if (err == KErrNone)
+ {
+ INFO_PRINTF2(_L("Conversion of file %S was successfull!"), &theSourceFilename);
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Failed during conversion of the file: %S"), &theSourceFilename);
+ delete iImageDecoder;
+ iImageDecoder = NULL;
+
+ // activeListener, destBitmap
+ CleanupStack::PopAndDestroy(2, activeListener);
+
+ User::Leave(err);
+ }
+
+ TFileName theReferenceFilename;
+ TBuf<KLenBufferExtension> theExtension;
+
+ Directory(EReference, theReferenceFilename);
+ TInt theSeparatorPos = aFileName.LocateReverse('.') + 1;
+ theReferenceFilename.Append(aFileName.Left(theSeparatorPos));
+ GetImageExtension(KImageTypeMBMUid, theExtension);
+ theReferenceFilename.Append(theExtension);
+
+ if (err == KErrNone)
+ {
+ // Check the bitmaps
+ err = CheckBitmapL(*destBitmap, theReferenceFilename);
+ }
+
+ delete iImageDecoder;
+ iImageDecoder = NULL;
+
+ // activeListener, destBitmap
+ CleanupStack::PopAndDestroy(2, activeListener);
+
+ User::Leave(err);
+ }
+
+// Test to check for bitmap created using CreateExtendedBitmap
+
+CTestImageDecFileSourceExtendedBitmap *CTestImageDecFileSourceExtendedBitmap::NewL(const TDesC& aTestName)
+ {
+ return new (ELeave) CTestImageDecFileSourceExtendedBitmap(aTestName);
+ }
+
+
+
+
+/**
+*
+* Test step constructor.
+* Each test step initialises its own name.
+*
+* @param The name of this test step.
+*
+*/
+CTestImageDecFileSourceExtendedBitmap::CTestImageDecFileSourceExtendedBitmap(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 CTestImageDecFileSourceExtendedBitmap::DoTestStepL()
+ {
+ TVerdict result = EPass;
+
+ result = TestStep_I_0804L();
+
+
+ return result;
+ }
+
+/**
+*
+* Read and decode an image, a JPEG, from a file.
+*
+* @return TVerdict: The result of the test step.
+*
+*/
+TVerdict CTestImageDecFileSourceExtendedBitmap::TestStep_I_0804L()
+ {
+ // Dummy Hal call for heap balance on target
+ if (DummyHalCall() != KErrNone)
+ {
+ return EInconclusive;
+ }
+
+ __MM_HEAP_MARK;
+
+ TInt err = KErrNone;
+ User::LeaveIfError(FbsStartup());
+ 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));
+
+ RFbsSession::Disconnect();
+
+ __MM_HEAP_MARKEND;
+
+ if (err == KErrNone)
+ {
+ return EPass;
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Error in opening/decoding the image : %d"), err);
+ return EFail;
+ }
+ }
+
+
+TInt CTestImageDecFileSourceExtendedBitmap::InitExtendedBitmap(TAny* /*aData*/, TInt /*aDataSize*/)
+ {
+ return KErrNone;
+ }
+/**
+*
+* Read and decode an image, a JPEG, from a file passing FileSource.
+*
+* @param filename of the image
+*
+* @leave err: Leaves with 'err'.
+*
+*/
+void CTestImageDecFileSourceExtendedBitmap::OpenImageAndDecodeFromFileSourceL(const TDesC& aFileName)
+ {
+ // Get the path
+ TFileName theSourceFilename;
+ Directory(EInput, theSourceFilename);
+ theSourceFilename.Append(aFileName);
+
+ User::LeaveIfError(iFs.Connect());
+
+ // Create TMMFileSource
+ TMMFileSource fileSource(theSourceFilename);
+
+ // Open the image and create an image decoder
+ TInt err = KErrNone;
+
+
+ INFO_PRINTF2(_L("Opening the file by passing FileSource : %S"), &theSourceFilename);
+ TRAP(err, iImageDecoder = CImageDecoder::FileNewL(iFs, fileSource));
+
+
+ if (err != KErrNone)
+ {
+ INFO_PRINTF3(_L("Cannot open file: %S. Unexpected Error: %d"), &theSourceFilename, err);
+ delete iImageDecoder;
+ iImageDecoder = NULL;
+
+ User::Leave(err);
+ }
+
+ if (iImageDecoder == NULL)
+ {
+ INFO_PRINTF1(_L("ImageDecoder is NULL!"));
+ User::Leave(err);
+ }
+
+ INFO_PRINTF2(_L("The file: %S had been opened."), &theSourceFilename);
+
+ // Create an active listener and push it on the cleanup stack
+ CActiveListener* activeListener = new (ELeave) CActiveListener;
+ CleanupStack::PushL(activeListener);
+
+ const TFrameInfo* theFrameInfo = &iImageDecoder->FrameInfo();
+
+ // Create the destination bitmap
+ CFbsBitmap* destBitmap = new (ELeave) CFbsBitmap;
+
+ CleanupStack::PushL(destBitmap);
+
+
+ User::LeaveIfError(destBitmap->CreateExtendedBitmap(
+ theFrameInfo->iOverallSizeInPixels,
+ theFrameInfo->iFrameDisplayMode,KImageTypeJPGUid,29143,*this));
+
+ activeListener ->InitialiseActiveListener();
+
+ // Decode the image
+ iImageDecoder->Convert(&activeListener->iStatus, *destBitmap, 0);
+ CActiveScheduler::Start();
+
+ err = activeListener -> iStatus.Int();
+ if (err == KErrNone)
+ {
+ INFO_PRINTF1(_L("Expected KErrNotSupported by now. Convert did not return any error."));
+ delete iImageDecoder;
+ iImageDecoder = NULL;
+
+ // activeListener, destBitmap
+ CleanupStack::PopAndDestroy(2, activeListener);
+ User::Leave(KErrGeneral);
+ }
+ else
+ {
+ if(err== KErrNotSupported)
+ {
+ INFO_PRINTF1(_L("Got KErrNotSupported as expected"));
+ }
+ else
+ {
+ delete iImageDecoder;
+ iImageDecoder = NULL;
+
+ // activeListener, destBitmap
+ CleanupStack::PopAndDestroy(2, activeListener);
+ INFO_PRINTF1(_L("Unexpected error"));
+ User::Leave(err);
+ }
+ }
+
+
+
+ delete iImageDecoder;
+ iImageDecoder = NULL;
+
+ // activeListener, destBitmap
+ CleanupStack::PopAndDestroy(2, activeListener);
+
+ }
+