diff -r 000000000000 -r 5752a19fdefe imaging/imaginginttest/src/TestPositiveConversionNew.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imaging/imaginginttest/src/TestPositiveConversionNew.cpp Wed Aug 25 12:29:52 2010 +0300 @@ -0,0 +1,687 @@ +// 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: +// This file contains the test steps ICL positive testing for GT0210 MS3.4 File Handle APIs. +// EPOC includes +// +// + +#include +#include +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#include +#endif +#include "TestPositiveConversionNew.h" + +#include "ICLFbsSessionTest.h" + +const TInt KMaxMimeLength = 256; + +/** + * + * + * Class Constructor + * + */ +CTestPositiveConversionNew::CTestPositiveConversionNew(const TDesC& aTestName) : + CTestStepConversion(aTestName) + { + iHeapSize = 500000; + } + +/** + * + * + * NewL Method + * + */ +CTestPositiveConversionNew *CTestPositiveConversionNew::NewL(const TDesC& aTestName) + { + CTestPositiveConversionNew* self = new(ELeave) CTestPositiveConversionNew(aTestName); + return self; + } + + +/** + * + * + * do the test step + * + */ +TVerdict CTestPositiveConversionNew::DoTestStepL() + { + TVerdict currentVerdict = EPass; + + if( (iTestStepName.Compare(_L("MM-ICL-FRM-I-0701-CP")) == 0) || + (iTestStepName.Compare(_L("MM-ICL-FRM-I-0702-CP")) == 0) || + (iTestStepName.Compare(_L("MM-ICL-FRM-I-0703-CP")) == 0) || + (iTestStepName.Compare(_L("MM-ICL-FRM-I-0704-CP")) == 0) ) + { + currentVerdict = Step0701_0704_CPL(); + } + else if( (iTestStepName.Compare(_L("MM-ICL-FRM-I-0705-CP")) == 0) || + (iTestStepName.Compare(_L("MM-ICL-FRM-I-0706-CP")) == 0) || + (iTestStepName.Compare(_L("MM-ICL-FRM-I-0707-CP")) == 0) || + (iTestStepName.Compare(_L("MM-ICL-FRM-I-0708-CP")) == 0) ) + { + currentVerdict = Step0705_0708_CPL(); + } + else if ( (iTestStepName.Compare(_L("MM-ICL-FRM-I-0709-CP")) == 0) || + (iTestStepName.Compare(_L("MM-ICL-FRM-I-0710-CP")) == 0) ) + { + currentVerdict = Step0709_0710_CPL(); + } + else if ( (iTestStepName.Compare(_L("MM-ICL-FRM-I-0711-CP")) == 0) || + (iTestStepName.Compare(_L("MM-ICL-FRM-I-0712-CP")) == 0) ) + { + currentVerdict = Step0711_0712_CPL(); + } + + return currentVerdict; + } + +/** + * + * Read, decode and verify different graphic formats + * + * Step 0701_CP to 0704_CP + * + */ +TVerdict CTestPositiveConversionNew::Step0701_0704_CPL() + { + TVerdict result = EFail; + TInt theErr = KErrNone; + TInt theErr1 = KErrNone; + + // dummy Hal call for heap balance on target + if (DummyHalCall() != KErrNone) + { + return EInconclusive; + } + + //__MM_HEAP_MARK; + //[ Connect RFs ] + User::LeaveIfError(iFs.Connect()); + CleanupClosePushL(iFs); + User::LeaveIfError(iFs.ShareProtected()); + + //[ Open the Source Image File using RFile ] + TFileName theSourceFilename; + Directory(EInput, theSourceFilename); + theSourceFilename.Append(iFileNameSrc); + + INFO_PRINTF2(_L("Start : Open the file : %S by RFile"), &theSourceFilename); + TInt theRes = iFile.Open(iFs, theSourceFilename, EFileWrite); + User::LeaveIfError(theRes); + CleanupClosePushL(iFile); + INFO_PRINTF2(_L("End : Open the file : %S by RFile"), &theSourceFilename); + + //[ Connect to RFbsSession ] + CICLFbsSessionTest* fbsSession = CICLFbsSessionTest::NewLC(); + + //[ Open the File for convert, using the 'FileNewL' APIs for each test step ] + INFO_PRINTF2(_L("Start : Open the file : %S by CImageDecoder::FileNewL"), &theSourceFilename); + if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0701-CP")) == 0) + { + INFO_PRINTF1(_L("Read a JPEG,not specifying file type. Decode and verify JPEG.")); + TRAP(theRes, iImageDecoder=CImageDecoder::FileNewL(iFile, EPlay)); + } + else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0702-CP")) == 0) + { + INFO_PRINTF1(_L("Read a JPEG,specifying MIME type. Decode and verify JPEG.")); + TBuf8 mimeType; + ReadMimeTypeFromConfig(mimeType); + TRAP(theRes, iImageDecoder=CImageDecoder::FileNewL(iFile, mimeType, EPlay)); + } + else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0703-CP")) == 0) + { + INFO_PRINTF1(_L("Read a OTA, specifying image type. Decode and verify OTA.")); + TRAP(theRes, iImageDecoder=CImageDecoder::FileNewL(iFile, EPlay, CImageDecoder::EOptionNone, iImageTypeUid, KNullUid, KNullUid)); + } + else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0704-CP")) == 0) + { + INFO_PRINTF1(_L("Read a WBMP, specifying the Decoder UID. Decode and verify WBMP.")); + TRAP(theRes, iImageDecoder=CImageDecoder::FileNewL(iFile, EPlay, CImageDecoder::EOptionNone, iImageTypeUid, KNullUid, TUid::Uid(KWBMPDecoderImplementationUidValue))); + } + User::LeaveIfError(theRes); + CleanupStack::PushL(iImageDecoder); + INFO_PRINTF2(_L("End : Open the file : %S by CImageDecoder::FileNewL"), &theSourceFilename); + + //[ Call the main Decode Test Method ] + TRAP(theErr1, theErr = DecodeUsingDecoderL(iFileNameSrc)); + + //[ Delete and Close Local ImageDecoder and iFs ] + CleanupStack::Pop(); + delete iImageDecoder; + iImageDecoder = NULL; + + //[ Delete and Close RFs, RFile and FbsSession] + CleanupStack::PopAndDestroy(3); + //__MM_HEAP_MARKEND; + + if(theErr1 != KErrNone) + { + theErr = theErr1; + } + if(theErr == KErrNone) + { + result = EPass; + } + else + { + INFO_PRINTF2(_L("Error : %d"), theErr); + } + + return result; + } + +/** + * + * Encode an image from bitmap to a file + * + * Step 0705_CP to 0708_CP + * + */ +TVerdict CTestPositiveConversionNew::Step0705_0708_CPL() + { + TVerdict result = EFail ; + TInt theErr = KErrNone; + TInt theErr1 = KErrNone; + TInt theRes = KErrNone; + + //__MM_HEAP_MARK; + + //[ Connect RFs ] + User::LeaveIfError(iFs.Connect()); + CleanupClosePushL(iFs); + User::LeaveIfError(iFs.ShareProtected()); + + // [ Open the Destination File using RFile ] + TFileName theDestinationFileName; + TBuf theExtension; + + Directory(EOutput, theDestinationFileName); + theDestinationFileName.Append(iFileNameSrc.Left(iFileNameSrc.Length()-3)); + GetImageExtension(iImageTypeUid, theExtension); + theDestinationFileName.Append(theExtension); + + INFO_PRINTF2(_L("Start : Open the file : %S by RFile"), &theDestinationFileName); + User::LeaveIfError(iFile.Replace(iFs, theDestinationFileName, EFileWrite)); + CleanupClosePushL(iFile); + INFO_PRINTF2(_L("End : Open the file : %S by RFile"), &theDestinationFileName); + + //[ Connect to RFbsSession ] + CICLFbsSessionTest* fbsSession = CICLFbsSessionTest::NewLC(); + + //[ Open the File for convert, using the 'FileNewL' APIs for each test step ] + INFO_PRINTF2(_L("Start : Open the file : %S by CImageEncoder::FileNewL"), &theDestinationFileName); + if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0705-CP")) == 0) + { + INFO_PRINTF1(_L("Encode an image from bitmap to a file, not specifying the file type.")); + //Image type or encoder UID should be there, otherwise throws panic.. + TRAP(theRes, iImageEncoder=CImageEncoder::FileNewL(iFile, CImageEncoder::EOptionNone, iImageTypeUid)); + } + else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0706-CP")) == 0) + { + INFO_PRINTF1(_L("Encode an image from bitmap to a file, given the MIME Type")); + TBuf8 mimeType; + ReadMimeTypeFromConfig(mimeType); + TRAP(theRes, iImageEncoder=CImageEncoder::FileNewL(iFile, mimeType)); + } + else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0707-CP")) == 0) + { + INFO_PRINTF1(_L("Encode an image from bitmap to a file, given the Image Type")); + TRAP(theRes, iImageEncoder=CImageEncoder::FileNewL(iFile, CImageEncoder::EOptionNone, iImageTypeUid, KNullUid, KNullUid)); + } + else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0708-CP")) == 0) + { + INFO_PRINTF1(_L("Encode an image from bitmap to a file, given the Encoder UID.")); + //The Image type has to be given for Decoder Implementation + TRAP(theRes, iImageEncoder=CImageEncoder::FileNewL(iFile, CImageEncoder::EOptionNone, KNullUid, KNullUid, TUid::Uid(KJPGEncoderImplementationUidValue))); + } + User::LeaveIfError(theRes); + + INFO_PRINTF2(_L("End : Open the file : %S by CImageEncoder::FileNewL"), &theDestinationFileName); + + //[ Call the main Encode Test Method ] + EncodeUsingEncoderL(iFileNameSrc); + + //[ Delete and Close ImageEncoder ] + + delete iImageEncoder; + iImageEncoder = NULL; + + //[ Delete and Close RFs, RFile and fbsSession] + CleanupStack::PopAndDestroy(3); + + //__MM_HEAP_MARKEND; + + if(theErr1 != KErrNone) + { + theErr = theErr1; + } + if(theErr == KErrNone) + { + result = EPass; + } + else + { + INFO_PRINTF2(_L("Error : %d"), theErr); + } + + return result; + } + +/** + * + * Alloc tests to Encode an image from bitmap to a file + * + * Step 0709_CP to 0710_CP + * + */ +TVerdict CTestPositiveConversionNew::Step0709_0710_CPL() + { + //Traces + if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0709-CP")) == 0) + { + INFO_PRINTF1(_L("Alloc tests to Encode an image from bitmap to a file, specifying the MIME Type.")); + } + else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0710-CP")) == 0) + { + INFO_PRINTF1(_L("Alloc tests to Encode an image from bitmap to a file, NOT specifying the MIME Type.")); + } + + //Check for Alloc Test Support + __UHEAP_SETFAIL(RHeap::EFailNext, 1); + TAny *testAllocSupport = User::Alloc(1); + if (testAllocSupport!=NULL) + { + delete testAllocSupport; + testAllocSupport=NULL; + INFO_PRINTF1(_L("This build does not support ALLOC testing")); + return EInconclusive; + } + + //Initialise Variables + TVerdict iAllocTestStepResult=EPass; + TInt err = KErrNone; + TBool badResult = EFalse; + + //>>>>>>>>>>>>>>>>>>>>>>>>Test Method Call<<<<<<<<<<<<<<<<<<<<<<<<<< + INFO_PRINTF1(_L("Executing the Test Method call Outside the FOR LOOP.")); + TRAP(err, iAllocTestStepResult = TestStep0709_0710_CPL()); + if (err != KErrNone) + { + INFO_PRINTF2(_L("Encoding error, returned error code = %d"), err); + User::Leave(err); + } + else + { + //Check the iAllocTestStepResult + if (iAllocTestStepResult != EPass) + { + badResult = ETrue; + } + } + + TInt failCount = 1; + TBool completed = EFalse; + iAllocTestStepResult = EPass; // reinitialise + TBool reachedEnd = EFalse; // Note: declare outside loop to help with debugging + for(;;) + { + __UHEAP_SETFAIL(RHeap::EFailNext, failCount); + __MM_HEAP_MARK; + + //>>>>>>>>>>>>>>>>>>>>>>>>Test Method Call<<<<<<<<<<<<<<<<<<<<<<<<<< + INFO_PRINTF2(_L("Executing the Test Method call #%d."), failCount); + TRAP(err, iAllocTestStepResult = TestStep0709_0710_CPL()); + + completed = EFalse; + if (err == KErrNone) + { + TAny *testAlloc = User::Alloc(1); // when this fails, we passed through all allocs within test + if (testAlloc == NULL) + { + reachedEnd = ETrue; + failCount -= 1; + } + else + { + User::Free(testAlloc); + } + + //Check the iAllocTestStepResult + if (iAllocTestStepResult != EPass) + { + badResult = ETrue; + } + + completed = reachedEnd || badResult; + } + else if (err != KErrNoMemory) // bad error code + { + completed = ETrue; + badResult = EFail; + } + + __MM_HEAP_MARKEND; + __UHEAP_SETFAIL(RHeap::ENone, 0); + + if (completed) + { + break; // exit loop + } + + failCount++; + } + + //failCount -= 1; // Failcount of 1 equates to 0 successful allocs, etc + + if (err != KErrNone || badResult) + { + if (badResult) + { + INFO_PRINTF3(_L(" Bad result with %d memory allocations tested. The Error returned is %d"), failCount, err); + } + else + { + INFO_PRINTF3(_L(" Error(%d) with %d memory allocations tested\n"), err, failCount); + } + iAllocTestStepResult = EFail; + } + else + { + INFO_PRINTF2(_L(" Completed OK with %d memory allocations tested\n"), failCount); + iAllocTestStepResult = EPass; + } + return iAllocTestStepResult; + } + +/** + * + * Alloc test main test step to Encode an image from bitmap to a file + * + * Step 0709_CP to 0710_CP + * + */ +TVerdict CTestPositiveConversionNew::TestStep0709_0710_CPL() + { + TInt theRes = KErrNone; + + //__MM_HEAP_MARK; + + //[ Connect RFs ] + User::LeaveIfError(iFs.Connect()); + CleanupClosePushL(iFs); + User::LeaveIfError(iFs.ShareProtected()); + + // [ Open the Destination File using RFile ] + TFileName theDestinationFileName; + TBuf theExtension; + + Directory(EOutput, theDestinationFileName); + theDestinationFileName.Append(iFileNameSrc.Left(iFileNameSrc.Length()-3)); + GetImageExtension(iImageTypeUid, theExtension); + theDestinationFileName.Append(theExtension); + + INFO_PRINTF2(_L("Start : Open the file : %S by RFile"), &theDestinationFileName); + User::LeaveIfError(iFile.Replace(iFs, theDestinationFileName, EFileWrite)); + CleanupClosePushL(iFile); + INFO_PRINTF2(_L("End : Open the file : %S by RFile"), &theDestinationFileName); + + //[ Connect to RFbsSession ] + CICLFbsSessionTest* fbsSession = CICLFbsSessionTest::NewLC(); + + //[ Open the File for convert, using the 'FileNewL' APIs for each test step ] + INFO_PRINTF2(_L("Start : Open the file : %S by CImageEncoder::FileNewL"), &theDestinationFileName); + if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0709-CP")) == 0) + { + //INFO_PRINTF1(_L("Alloc tests to Encode an image from bitmap to a file, specifying the MIME Type.")); + TBuf8 mimeType; + ReadMimeTypeFromConfig(mimeType); + TRAP(theRes, iImageEncoder=CImageEncoder::FileNewL(iFile, mimeType)); + } + else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0710-CP")) == 0) + { + //INFO_PRINTF1(_L("Alloc tests to Encode an image from bitmap to a file, NOT specifying the MIME Type.")); + //The Image type has to be given for Decoder Implementation + TRAP(theRes, iImageEncoder=CImageEncoder::FileNewL(iFile, CImageEncoder::EOptionNone, KNullUid, KNullUid, TUid::Uid(KJPGEncoderImplementationUidValue))); + } + User::LeaveIfError(theRes); + + INFO_PRINTF2(_L("End : Open the file : %S by CImageEncoder::FileNewL"), &theDestinationFileName); + + //[ Call the main Encode Test Method ] + TRAPD(err, EncodeUsingEncoderL(iFileNameSrc)); + if (err != KErrNone) + { + delete iImageEncoder; + iImageEncoder = NULL; + + User::Leave(err); + } + + //[ Delete and Close ImageEncoder ] + + delete iImageEncoder; + iImageEncoder = NULL; + + //[ Delete and Close RFs, RFile and fbsSession] + CleanupStack::PopAndDestroy(3); + + //__MM_HEAP_MARKEND; + + return EPass; + } + + + +/** + * + * Alloc tests to Read, decode and verify JPEG. + * + * Step 0711_CP to 0712_CP + * + */ +TVerdict CTestPositiveConversionNew::Step0711_0712_CPL() + { + //Traces + if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0711-CP")) == 0) + { + INFO_PRINTF1(_L("Alloc tests to Read, decode and verify JPEG, specifying the MIME Type.")); + } + else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0712-CP")) == 0) + { + INFO_PRINTF1(_L("Alloc tests to Read, decode and verify JPEG, NOT specifying the MIME Type.")); + } + + //Check for Alloc Test Support + __UHEAP_SETFAIL(RHeap::EFailNext, 1); + TAny *testAllocSupport = User::Alloc(1); + if (testAllocSupport!=NULL) + { + delete testAllocSupport; + testAllocSupport=NULL; + INFO_PRINTF1(_L("This build does not support ALLOC testing")); + return EInconclusive; + } + + //Initialise Variables + TVerdict iAllocTestStepResult=EPass; + TInt err = KErrNone; + TBool badResult = EFalse; + + //>>>>>>>>>>>>>>>>>>>>>>>>Test Method Call<<<<<<<<<<<<<<<<<<<<<<<<<< + INFO_PRINTF1(_L("Executing the Test Method call Outside the FOR LOOP.")); + TRAP(err, iAllocTestStepResult = TestStep0711_0712_CPL()); + if (err != KErrNone) + { + INFO_PRINTF2(_L("Decoding error, returned error code = %d"), err); + User::Leave(err); + } + else + { + //Check the iAllocTestStepResult + if (iAllocTestStepResult != EPass) + { + badResult = ETrue; + } + } + + TInt failCount = 1; + TBool completed = EFalse; + iAllocTestStepResult = EPass; // reinitialise + TBool reachedEnd = EFalse; // Note: declare outside loop to help with debugging + for(;;) + { + __UHEAP_SETFAIL(RHeap::EFailNext, failCount); + //__MM_HEAP_MARK; + + //>>>>>>>>>>>>>>>>>>>>>>>>Test Method Call<<<<<<<<<<<<<<<<<<<<<<<<<< + INFO_PRINTF2(_L("Executing the Test Method call #%d."), failCount); + TRAP(err, iAllocTestStepResult = TestStep0711_0712_CPL()); + + completed = EFalse; + if (err == KErrNone) + { + TAny *testAlloc = NULL; + testAlloc = User::Alloc(1); // when this fails, we passed through all allocs within test + if (testAlloc == NULL) + { + reachedEnd = ETrue; + failCount -= 1; + } + else + { + User::Free(testAlloc); + testAlloc=NULL; + } + + //Check the iAllocTestStepResult + if (iAllocTestStepResult != EPass) + { + badResult = ETrue; + } + + completed = reachedEnd || badResult; + } + else if (err != KErrNoMemory) // bad error code + { + completed = ETrue; + badResult = EFail; + } + + //__MM_HEAP_MARKEND; + __UHEAP_SETFAIL(RHeap::ENone, 0); + + if (completed) + { + break; // exit loop + } + + failCount++; + } + + //failCount -= 1; // Failcount of 1 equates to 0 successful allocs, etc + + if (err != KErrNone || badResult) + { + if (badResult) + { + INFO_PRINTF3(_L(" Bad result with %d memory allocations tested. The Error returned is %d"), failCount, err); + } + else + { + INFO_PRINTF3(_L(" Error(%d) with %d memory allocations tested\n"), err, failCount); + } + iAllocTestStepResult = EFail; + } + else + { + INFO_PRINTF2(_L(" Completed OK with %d memory allocations tested\n"), failCount); + iAllocTestStepResult = EPass; + } + return iAllocTestStepResult; + } + +/** + * + * Alloc test main test step to Read, decode and verify JPEG. + * + * Step 0711_CP to 0712_CP + * + */ +TVerdict CTestPositiveConversionNew::TestStep0711_0712_CPL() + { + TInt theRes = KErrNone; + + // dummy Hal call for heap balance on target + //if (DummyHalCall() != KErrNone) + // return EInconclusive; + + //__MM_HEAP_MARK; + //[ Connect RFs ] + User::LeaveIfError(iFs.Connect()); + CleanupClosePushL(iFs); + User::LeaveIfError(iFs.ShareProtected()); + + //[ Open the Source Image File using RFile ] + TFileName theSourceFilename; + Directory(EInput, theSourceFilename); + theSourceFilename.Append(iFileNameSrc); + + INFO_PRINTF2(_L("Start : Open the file : %S by RFile"), &theSourceFilename); + theRes = iFile.Open(iFs, theSourceFilename, EFileWrite); + User::LeaveIfError(theRes); + CleanupClosePushL(iFile); + INFO_PRINTF2(_L("End : Open the file : %S by RFile"), &theSourceFilename); + + //[ Connect to RFbsSession ] + CICLFbsSessionTest* fbsSession = CICLFbsSessionTest::NewLC(); + + //[ Open the File for convert, using the 'FileNewL' APIs for each test step ] + INFO_PRINTF2(_L("Start : Open the file : %S by CImageDecoder::FileNewL"), &theSourceFilename); + if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0711-CP")) == 0) + { + //INFO_PRINTF1(_L("Alloc tests to Read, decode and verify JPEG, specifying the MIME Type.")); + TBuf8 mimeType; + ReadMimeTypeFromConfig(mimeType); + TRAP(theRes, iImageDecoder=CImageDecoder::FileNewL(iFile, mimeType, EPlay)); + } + else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0712-CP")) == 0) + { + //INFO_PRINTF1(_L("Alloc tests to Read, decode and verify JPEG, NOT specifying the MIME Type.")); + TRAP(theRes, iImageDecoder=CImageDecoder::FileNewL(iFile, EPlay, CImageDecoder::EOptionNone, iImageTypeUid, KNullUid, TUid::Uid(KJPGDecoderImplementationUidValue))); + } + User::LeaveIfError(theRes); + CleanupStack::PushL(iImageDecoder); + INFO_PRINTF2(_L("End : Open the file : %S by CImageDecoder::FileNewL"), &theSourceFilename); + + //[ Call the main Decode Test Method ] + User::LeaveIfError(DecodeUsingDecoderL(iFileNameSrc)); + + //[ Delete and Close Local ImageDecoder ] + CleanupStack::Pop(); + delete iImageDecoder; + iImageDecoder = NULL; + + //[ Delete and Close RFs, RFile and fbsSession] + CleanupStack::PopAndDestroy(3); + + //__MM_HEAP_MARKEND; + + return EPass; + } +