imaging/imaginginttest/src/TestImageDecoderFileSource.cpp
changeset 0 5752a19fdefe
--- /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);
+
+    }
+