sl@0: // Copyright (c) 2002-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: // The test specification for these tests can be found in: sl@0: // V:\Dev\GT\GT 0137 Multimedia Codec - Msrvr\Testing\Unit Test Specifications\ sl@0: // Typhoon\SGL.GT0137.134 Rev1.00 MMF SRSSNK Unit Test Specification.xls sl@0: // Changes made to the test harness as a result of the DevSound WP AudioInput/Output sl@0: // modifications have been marked with DevSound WP Change along with an explanation sl@0: // of why the code changed sl@0: // Main changes caused by: sl@0: // 7.0s test seemed to assume the Prime could come after the thread logon sl@0: // this assumption is invalid, but happened to work on the 7.0s audio I/O as sl@0: // the prime did very little sl@0: // assumed Prime does very little including no memory allocation sl@0: // assmued that once the active scheduler started no further memory sl@0: // was allocated and hence no callbacks if an OOM condition occured during play sl@0: // assumed test could drive Empty/FillBufferL calls and could own and set sl@0: // buffers - in 8.0s buffers are ultimately owned by HwDevice not test app sl@0: // so cannot make multiple calls to Empty/FillBuffer sl@0: // assumed audio output could only accept pcm16 - not true on 8.0 sl@0: // sl@0: // sl@0: sl@0: // EPOC includes sl@0: #include sl@0: #include sl@0: sl@0: using namespace ContentAccess; sl@0: sl@0: // Test system includes sl@0: #include "TSU_MMF_SRSSNK.h" sl@0: #include "TSU_MMF_SRSSNKSuite.h" sl@0: sl@0: //INC085391 sl@0: #include "mmfclientutility.h" sl@0: sl@0: // __REQUIREDFORDEBUG macro gets rid of warnings in release builds sl@0: #if defined(_DEBUG) sl@0: #define __REQUIREDFORDEBUG(X) X sl@0: #else sl@0: #define __REQUIREDFORDEBUG(X) sl@0: #endif sl@0: sl@0: const TInt KStartFileFailAt = 8; // start at zero when RFile::Duplicate() problem is fixed sl@0: sl@0: _LIT8(KEmptyFourCCCode, " "); sl@0: sl@0: _LIT(KTest101FileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile1.dat"); sl@0: sl@0: MDataSource* CreateFileSourceL(TSourceType aSourceType, RFs& aFs, const TDesC& aFileName) sl@0: { sl@0: ASSERT(aSourceType == ESourceTypeFile || aSourceType == ESourceTypeFileHandle); sl@0: sl@0: MDataSource* source; sl@0: sl@0: if (aSourceType == ESourceTypeFile) sl@0: { sl@0: TMMFFileConfig configFile; sl@0: configFile().iPath = aFileName; sl@0: source = MDataSource::NewSourceL(KUidMmfFileSource, configFile); sl@0: } sl@0: else sl@0: { sl@0: User::LeaveIfError(aFs.ShareProtected()); sl@0: TMMFFileHandleConfig configFile; sl@0: RFile file; sl@0: User::LeaveIfError(file.Open(aFs, aFileName, EFileRead|EFileShareReadersOnly)); sl@0: CleanupClosePushL(file); sl@0: configFile().iFile = &file; sl@0: source = MDataSource::NewSourceL(KUidMmfFileSource, configFile); sl@0: CleanupStack::PopAndDestroy(&file); sl@0: sl@0: } sl@0: return source; sl@0: } sl@0: sl@0: MDataSource* CreateFileHandleSourceL(RFs& aFs, const TDesC& aFileName) sl@0: { sl@0: User::LeaveIfError(aFs.ShareProtected()); sl@0: RFile file; sl@0: User::LeaveIfError(file.Open(aFs, aFileName, EFileRead|EFileShareReadersOnly)); sl@0: CleanupClosePushL(file); sl@0: CMMFileSourceSink* fileSourceSink = CMMFileSourceSink::NewLC(KMMFileHandleSourceUid, file); sl@0: MDataSource* source = MDataSource::NewSourceL(KUidMmfFileSource, fileSourceSink->SourceSinkData()); sl@0: CleanupStack::PopAndDestroy(2, &file); //fileSourceSink sl@0: sl@0: return source; sl@0: } sl@0: sl@0: MDataSink* CreateFileSinkL(TSinkType aSinkType, RFs& aFs, const TDesC& aFileName) sl@0: { sl@0: MDataSink* sink; sl@0: sl@0: if (aSinkType == ESinkTypeFile) sl@0: { sl@0: TMMFFileConfig configFile; sl@0: configFile().iPath = aFileName; sl@0: sink = MDataSink::NewSinkL(KUidMmfFileSink, configFile); sl@0: } sl@0: else sl@0: { sl@0: User::LeaveIfError(aFs.ShareProtected()); sl@0: RFile file; sl@0: TMMFFileHandleConfig fileConfig(&file); sl@0: TInt err = file.Open(aFs, aFileName, EFileWrite|EFileRead|EFileShareAny); sl@0: if (err == KErrNotFound) sl@0: { sl@0: User::LeaveIfError(file.Create(aFs, aFileName, EFileWrite|EFileRead|EFileShareAny)); sl@0: } sl@0: else sl@0: { sl@0: User::LeaveIfError(err); sl@0: } sl@0: CleanupClosePushL(file); sl@0: sink = MDataSink::NewSinkL(KUidMmfFileSink, fileConfig); sl@0: CleanupStack::PopAndDestroy(&file); sl@0: sl@0: } sl@0: return sink; sl@0: } sl@0: sl@0: sl@0: sl@0: void TTestStep::DoTestPreambleL() sl@0: { sl@0: } sl@0: sl@0: TVerdict TTestStep::DoTestPostambleL(TBool /*aCheck*/) sl@0: { sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TTestStep::DoNegativeTestPostambleL() sl@0: { sl@0: return DoTestPostambleL(EFalse); sl@0: } sl@0: sl@0: MDataSource* TTestStep::CreateSourceL(TSourceType aSourceType, HBufC8* aDes) sl@0: { sl@0: MDataSource* source = NULL; sl@0: switch(aSourceType) sl@0: { sl@0: case ESourceTypeDes: sl@0: { sl@0: TPtr8 dataPtr(aDes->Des()); sl@0: // Initialise config data. sl@0: TMMFDescriptorConfig configDes; sl@0: configDes().iDes = &dataPtr; sl@0: configDes().iDesThreadId = RThread().Id(); sl@0: source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes); sl@0: } sl@0: break; sl@0: case ESourceTypeFile: sl@0: { sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest101FileName; sl@0: source = MDataSource::NewSourceL(KUidMmfFileSource, configDes); sl@0: } sl@0: break; sl@0: sl@0: case ESourceTypeFileHandle: sl@0: { sl@0: TMMFFileHandleConfig fileConfig; sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: RFile file; sl@0: User::LeaveIfError(file.Open(fs, KTest101FileName, EFileRead|EFileShareReadersOnly)); sl@0: CleanupClosePushL(file); sl@0: fileConfig().iFile = &file; sl@0: source = MDataSource::NewSourceL(KUidMmfFileSource, fileConfig); sl@0: CleanupStack::PopAndDestroy(2, &fs); sl@0: } sl@0: break; sl@0: sl@0: case ESourceTypeAudio: sl@0: { sl@0: TBuf8<1> configDes; sl@0: source = MDataSource::NewSourceL(KUidMmfAudioInput, configDes); sl@0: sl@0: //DevSound WP - needs resetting as of OOM occurs buffer may not be filled ok sl@0: static_cast(iSink)->ResetBufferFilledOk(); sl@0: } sl@0: break; sl@0: default: sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: return source; sl@0: } sl@0: sl@0: sl@0: void TReadBufferTestStep::RandomiseBuffer() sl@0: { sl@0: if ((iBuffer->Type() == KUidMmfTransferBuffer) || sl@0: (iBuffer->Type() == KUidMmfDescriptorBuffer)) sl@0: { sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: sl@0: // Re-randomise data buffer. sl@0: TDes8& dataDes = buffer->Data(); sl@0: TUint8* dataPtr = CONST_CAST(TUint8*, dataDes.Ptr()); sl@0: TInt bufferMaxLength = dataDes.MaxLength(); sl@0: for (TInt i = 0 ; iBufferSize(); sl@0: CMMFDescriptorBuffer* buffer = STATIC_CAST(CMMFDescriptorBuffer*, iBuffer); sl@0: sl@0: const TUint8* sourcePtr = iSourceDes.Ptr(); sl@0: return Mem::Compare(sourcePtr+iPosition, readLength, buffer->Data().Ptr(), readLength); sl@0: } sl@0: sl@0: sl@0: void TWriteBufferTestStep::RandomiseBuffer() sl@0: { sl@0: if ((iBuffer->Type() == KUidMmfTransferBuffer) || sl@0: (iBuffer->Type() == KUidMmfDescriptorBuffer)) sl@0: { sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: sl@0: // Re-randomise data buffer. sl@0: TDes8& dataDes = buffer->Data(); sl@0: TUint8* dataPtr = CONST_CAST(TUint8*, dataDes.Ptr()); sl@0: TInt bufferMaxLength = dataDes.MaxLength(); sl@0: for (TInt i = 0 ; iDes(); sl@0: User::LeaveIfError(destinationFile.Read(destinationDes)); sl@0: sl@0: // Check that the file data matches. sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: CleanupStack::PopAndDestroy(destinationHBuf); sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: sl@0: return err; sl@0: } sl@0: sl@0: void TWriteBufferToFileTestStep::DoTestPreambleL() sl@0: { sl@0: if (iSink != NULL) sl@0: iSink->SinkPrimeL(); sl@0: } sl@0: sl@0: // sl@0: // Tests that use ECom to create sources/sinks should call sl@0: // REcomSession::FinalClose in the PostambleL. sl@0: // sl@0: TVerdict TFileTestStep::DoTestPostambleL(TBool /*aCheck*/) sl@0: { sl@0: REComSession::FinalClose(); sl@0: return EPass; sl@0: } sl@0: sl@0: // TNewSourceTestStep sl@0: // Attempt to create a new data source, using the supplied Uid and config data. sl@0: // Delete the source after creation (test for memory leak in construction) sl@0: TVerdict TNewSourceTestStep::DoTestStepL() sl@0: { sl@0: MDataSource* source = MDataSource::NewSourceL(iUid, *iConfigDes); sl@0: sl@0: delete source; sl@0: return EPass; sl@0: } sl@0: sl@0: // TSourceTypeTestStep sl@0: // Check that the data source type and data type codes are initialised correctly. sl@0: TVerdict TSourceTypeTestStep::DoTestStepL() sl@0: { sl@0: TUid dataSourceType = iSource->DataSourceType(); sl@0: if (dataSourceType != iUid) sl@0: return EFail; sl@0: sl@0: TMediaId mediaId; sl@0: TFourCC fourCC = iSource->SourceDataTypeCode(mediaId); sl@0: if (fourCC != iFourCC) sl@0: return EFail; sl@0: sl@0: fourCC = 0x4E554C4C; // 'LLUN' sl@0: TInt err = iSource->SetSourceDataTypeCode(fourCC, mediaId); sl@0: if (iCanSetSourceDataType) sl@0: { sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (iSource->SourceDataTypeCode(mediaId) != fourCC) sl@0: return EFail; sl@0: sl@0: User::LeaveIfError(iSource->SetSourceDataTypeCode(iFourCC, mediaId)); sl@0: } sl@0: else sl@0: { sl@0: if (err != KErrNotSupported) sl@0: { sl@0: if (err == KErrNone) sl@0: return EFail; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: if (iSource->SourceDataTypeCode(mediaId) != iFourCC) sl@0: return EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: // TCanCreateSourceBufferTestStep sl@0: // Test that MDataSource::CanCreateSourceBuffer returns the expected value. (either ETrue or EFalse) sl@0: TVerdict TCanCreateSourceBufferTestStep::DoTestStepL() sl@0: { sl@0: return (iSource->CanCreateSourceBuffer() == iCanCreateSourceBuffer) ? EPass : EFail; sl@0: } sl@0: sl@0: // TSourceSampleConvertTestStep sl@0: // Test that MDataSource::SourceSampleConvert returns the expected value. (either ETrue or EFalse) sl@0: TVerdict TSourceSampleConvertTestStep::DoTestStepL() sl@0: { sl@0: return (iSource->SourceSampleConvert() == iSourceSampleConvert) ? EPass : EFail; sl@0: } sl@0: sl@0: TInt TCreateSourceBuffer1TestStep::SendEventToClient(const TMMFEvent& aEvent) sl@0: { sl@0: // This callback won't get called for this test sl@0: // DevSoundWP - yes it will sl@0: if (aEvent.iErrorCode == KErrNoMemory) sl@0: CActiveScheduler::Stop(); sl@0: // ASSERT(aEvent.iErrorCode == KErrNone); sl@0: return 0; sl@0: } sl@0: sl@0: sl@0: TVerdict TCreateSourceBuffer1TestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: TBool ref; sl@0: MDataSource* source = NULL; sl@0: HBufC8* dataDes = NULL; sl@0: sl@0: sl@0: if (iSourceType == ESourceTypeDes) sl@0: { sl@0: dataDes = HBufC8::NewLC(KTestDataSize); sl@0: } sl@0: sl@0: source = CreateSourceL(iSourceType, dataDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFBuffer* nullBuffer = source->CreateSourceBufferL(mediaId, ref); sl@0: sl@0: TInt err = source->SourceThreadLogon(*this); sl@0: User::LeaveIfError(err); sl@0: TBool loggedOn = ETrue; sl@0: sl@0: source->NegotiateSourceL(*iSink); sl@0: sl@0: //DevSound WP - Must Prime before calling FillBufferL sl@0: source->SourcePrimeL(); sl@0: sl@0: //DevSound WP - Audio Input effectively drives flow in v8.0 sl@0: //so just make first call to FillBufferL and then call active scheduler sl@0: source->FillBufferL(nullBuffer, iSink, mediaId); // first call inits DevSound sl@0: //source->FillBufferL(nullBuffer, iSink, mediaId); // second call starts recording sl@0: sl@0: CActiveScheduler::Start(); // wait for BufferFilledL callback sl@0: sl@0: CMMFBuffer* buffer = static_cast(iSink)->MmfBuffer(); sl@0: sl@0: TVerdict result = EPass; sl@0: if ((buffer) && (static_cast(iSink)->BufferFilledOk())) sl@0: { sl@0: if (ref != iExpectedRef) sl@0: result = EFail; sl@0: sl@0: if (buffer->Type() != iExpectedType) sl@0: result = EFail; sl@0: sl@0: sl@0: // if (buffer->Status() != EAvailable) sl@0: // result = EFail; sl@0: sl@0: sl@0: sl@0: sl@0: buffer = NULL; sl@0: sl@0: //DevSound WP done this source->SourcePrimeL(); sl@0: source->SourcePlayL(); sl@0: source->SourcePauseL(); sl@0: source->SourceStopL(); sl@0: } sl@0: sl@0: sl@0: TMMFPrioritySettings prioritySettings; sl@0: source->SetSourcePrioritySettings(prioritySettings); sl@0: if (loggedOn) sl@0: source->SourceThreadLogoff(); sl@0: sl@0: // if (buffer != NULL) DevSound WP it's not your buffer to delete sl@0: // result = EFail; // buffer not deleted sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: if (dataDes) sl@0: CleanupStack::PopAndDestroy(dataDes); sl@0: sl@0: return result; sl@0: } sl@0: sl@0: TInt TCreateSourceBuffer2TestStep::SendEventToClient(const TMMFEvent& aEvent) sl@0: { sl@0: // This callback won't get called for this test sl@0: //DevSound WP - this callback can get called as an OOM condition can occur sl@0: //on the alloc tests after the active scheduler has started sl@0: //ASSERT(aEvent.iErrorCode == KErrNone); sl@0: // DevSoundWP - if it is OOM need to stop active scheduler sl@0: if (aEvent.iErrorCode == KErrNoMemory) sl@0: CActiveScheduler::Stop(); sl@0: return 0; sl@0: } sl@0: sl@0: TVerdict TCreateSourceBuffer2TestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: TBool ref; sl@0: MDataSource* source = NULL; sl@0: HBufC8* dataDes = NULL; sl@0: sl@0: if (iSourceType == ESourceTypeDes) sl@0: { sl@0: dataDes = HBufC8::NewLC(KTestDataSize); sl@0: } sl@0: sl@0: source = CreateSourceL(iSourceType, dataDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFBuffer* nullBuffer = source->CreateSourceBufferL(mediaId, *iSinkBuffer, ref); sl@0: sl@0: TInt err = source->SourceThreadLogon(*this); sl@0: User::LeaveIfError(err); sl@0: TBool loggedOn = ETrue; sl@0: sl@0: source->NegotiateSourceL(*iSink); sl@0: sl@0: //DevSound WP - Must Prime before calling FillBufferL sl@0: source->SourcePrimeL(); sl@0: sl@0: //DevSound WP - Audio Input effectively drives flow in v8.0 sl@0: //so just make first call to FillBufferL and then call active scheduler sl@0: source->FillBufferL(nullBuffer, iSink, mediaId); // first call inits DevSound sl@0: //source->FillBufferL(nullBuffer, iSink, mediaId); // second call starts recording sl@0: sl@0: CActiveScheduler::Start(); // wait for BufferFilledL callback sl@0: sl@0: CMMFBuffer* buffer = static_cast(iSink)->MmfBuffer(); sl@0: sl@0: TVerdict result = EPass; sl@0: //DevSound WP if (buffer) sl@0: //an OOM can occur during AS in which case buffer is not valid sl@0: if ((buffer) && (static_cast(iSink)->BufferFilledOk())) sl@0: { sl@0: if (ref != iExpectedRef) sl@0: result = EFail; sl@0: sl@0: if (buffer->Type() != iExpectedType) sl@0: result = EFail; sl@0: sl@0: sl@0: buffer = NULL; sl@0: sl@0: source->SourcePlayL(); sl@0: source->SourcePauseL(); sl@0: source->SourceStopL(); sl@0: } sl@0: sl@0: TMMFPrioritySettings prioritySettings; sl@0: source->SetSourcePrioritySettings(prioritySettings); sl@0: if (loggedOn) sl@0: source->SourceThreadLogoff(); sl@0: sl@0: //DevSound WP buffer not null if OOM sl@0: //if (buffer != NULL) sl@0: //result = EFail; // buffer not deleted sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: if (dataDes) sl@0: CleanupStack::PopAndDestroy(dataDes); sl@0: sl@0: return result; sl@0: } sl@0: sl@0: TVerdict TSourceThreadLogonTestStep::DoTestStepL() sl@0: { sl@0: User::LeaveIfError(iSource->SourceThreadLogon(*iEventHandler)); sl@0: sl@0: iSource->SourceThreadLogoff(); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TNegotiateSourceTestStep::DoTestStepL() sl@0: { sl@0: iSource->NegotiateSourceL(*iSink); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFillBufferTestStep::DoTestStepL() sl@0: { sl@0: RandomiseBuffer(); sl@0: sl@0: TMediaId mediaId; sl@0: TRAPD(err, iSource->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt readLength = buffer->BufferSize(); sl@0: if (readLength != iReadLength) sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: iPosition += readLength; sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: TVerdict TFillLastBufferTestStep::DoTestStepL() sl@0: { sl@0: // Create big buffer. sl@0: CMMFDescriptorBuffer* bigBuffer = CMMFDescriptorBuffer::NewL(KTestOverDataSize); sl@0: CleanupStack::PushL(bigBuffer); sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Randomise the valid buffer. sl@0: iBuffer = validBuffer; sl@0: RandomiseBuffer(); sl@0: sl@0: // Create a descriptor source. sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: MDataSource* source = MDataSource::NewSourceL(iSourceUid, iConfigDes); sl@0: CleanupDeletePushL(source); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: iPosition = 0; sl@0: TMediaId mediaId; sl@0: TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: User::Leave(err); sl@0: } sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EFail; sl@0: } sl@0: sl@0: if (iBuffer->LastBuffer()) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EFail; sl@0: } sl@0: sl@0: // Randomise the big buffer. sl@0: iBuffer = bigBuffer; sl@0: RandomiseBuffer(); sl@0: sl@0: TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EFail; sl@0: } sl@0: sl@0: if (!iBuffer->LastBuffer()) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition += KTestBufferSize; sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: // Test last buffer with request size. sl@0: source = STATIC_CAST(CMMFClip*, MDataSource::NewSourceL(iSourceUid, iConfigDes)); sl@0: CleanupDeletePushL(source); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: TBool lastBuffer; sl@0: validBuffer->SetRequestSizeL(KTestReadSize); sl@0: sl@0: iPosition = 0; sl@0: iBuffer = validBuffer; sl@0: do sl@0: { sl@0: RandomiseBuffer(); sl@0: TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EFail; sl@0: } sl@0: sl@0: lastBuffer = (KTestDataSize-iPosition)LastBuffer() != lastBuffer) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition+= validBuffer->BufferSize(); sl@0: } sl@0: while (validBuffer->BufferSize() != 0); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TReadLastBufferTestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource); sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Randomise the valid buffer. sl@0: iBuffer = validBuffer; sl@0: RandomiseBuffer(); sl@0: sl@0: // Test last buffer without request size. sl@0: iPosition = 0; sl@0: TRAPD(err, clip->ReadBufferL(KTestBufferSize, iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (iBuffer->LastBuffer() || (iBuffer->BufferSize() < TUint(KTestBufferSize))) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = KTestDataSize-10; sl@0: TRAP(err, clip->ReadBufferL(KTestReadSize, iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (!validBuffer->LastBuffer() || (iBuffer->BufferSize() != 10)) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: sl@0: validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Randomise the valid buffer. sl@0: iBuffer = validBuffer; sl@0: RandomiseBuffer(); sl@0: sl@0: // Test last buffer with request size. sl@0: validBuffer->SetRequestSizeL(KTestReadSize); sl@0: sl@0: iPosition = 0; sl@0: TRAP(err, clip->ReadBufferL(KTestReadSize, iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (iBuffer->LastBuffer() || (iBuffer->BufferSize() < TUint(KTestReadSize))) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = KTestDataSize - 10; sl@0: TRAP(err, clip->ReadBufferL(KTestReadSize, iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (!iBuffer->LastBuffer() || (iBuffer->BufferSize() != 10)) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TReadLastBuffer2TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource); sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Randomise the valid buffer. sl@0: iBuffer = validBuffer; sl@0: RandomiseBuffer(); sl@0: sl@0: // Test last buffer without request size. sl@0: iPosition = 0; sl@0: TRAPD(err, clip->ReadBufferL(iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (iBuffer->LastBuffer() || (iBuffer->BufferSize() != TUint(KTestBufferSize))) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = KTestDataSize-10; sl@0: TRAP(err, clip->ReadBufferL(iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (!validBuffer->LastBuffer() || (iBuffer->BufferSize() != 10)) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: sl@0: validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Randomise the valid buffer. sl@0: iBuffer = validBuffer; sl@0: RandomiseBuffer(); sl@0: sl@0: // Test last buffer with request size. sl@0: validBuffer->SetRequestSizeL(KTestReadSize); sl@0: sl@0: iPosition = 0; sl@0: TRAP(err, clip->ReadBufferL(iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (iBuffer->LastBuffer() || (iBuffer->BufferSize() != TUint(KTestReadSize))) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = KTestDataSize - 10; sl@0: TRAP(err, clip->ReadBufferL(iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: if (!iBuffer->LastBuffer() || (iBuffer->BufferSize() != 10)) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TReadLastBuffer3TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource); sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Randomise the valid buffer. sl@0: iBuffer = validBuffer; sl@0: RandomiseBuffer(); sl@0: sl@0: // Test last buffer without request size. sl@0: iPosition = 0; sl@0: clip->ReadBufferL(iBuffer, iPosition); sl@0: sl@0: if (iBuffer->LastBuffer() || (iBuffer->BufferSize() != TUint(KTestBufferSize))) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: TInt err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = KTestDataSize-10; sl@0: clip->ReadBufferL(iBuffer, iPosition); sl@0: sl@0: if (!validBuffer->LastBuffer() || (iBuffer->BufferSize() != 10)) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: sl@0: validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Randomise the valid buffer. sl@0: iBuffer = validBuffer; sl@0: RandomiseBuffer(); sl@0: sl@0: // Test last buffer with request size. sl@0: validBuffer->SetRequestSizeL(KTestReadSize); sl@0: sl@0: iPosition = 0; sl@0: clip->ReadBufferL(iBuffer, iPosition); sl@0: sl@0: if (iBuffer->LastBuffer() || (iBuffer->BufferSize() != TUint(KTestReadSize))) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = KTestDataSize - 10; sl@0: clip->ReadBufferL(iBuffer, iPosition); sl@0: sl@0: if (!iBuffer->LastBuffer() || (iBuffer->BufferSize() != 10)) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: err = CheckBuffer(); sl@0: if (err) sl@0: { sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: return EPass; sl@0: } sl@0: sl@0: sl@0: TVerdict TNewSinkTestStep::DoTestStepL() sl@0: { sl@0: MDataSink* sink = MDataSink::NewSinkL(iUid, *iConfigDes); sl@0: delete sink; sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TSinkTypeTestStep::DoTestStepL() sl@0: { sl@0: TUid dataSinkType = iSink->DataSinkType(); sl@0: if (dataSinkType != iUid) sl@0: return EFail; sl@0: sl@0: TMediaId mediaId; sl@0: TFourCC fourCC = iSink->SinkDataTypeCode(mediaId); sl@0: if (fourCC != iFourCC) sl@0: return EFail; sl@0: sl@0: fourCC = 0x4E554C4C; // 'LLUN' sl@0: TInt err = iSink->SetSinkDataTypeCode(fourCC, mediaId); sl@0: if (iCanSetSinkDataType) sl@0: { sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (iSink->SinkDataTypeCode(mediaId) != fourCC) sl@0: return EFail; sl@0: sl@0: User::LeaveIfError(iSink->SetSinkDataTypeCode(iFourCC, mediaId)); sl@0: } sl@0: else sl@0: { sl@0: if (err != KErrNotSupported) sl@0: { sl@0: if (err == KErrNone) sl@0: return EFail; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: if (iSink->SinkDataTypeCode(mediaId) != iFourCC) sl@0: return EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TCanCreateSinkBufferTestStep::DoTestStepL() sl@0: { sl@0: return (iSink->CanCreateSinkBuffer() == iCanCreateSinkBuffer) ? EPass : EFail; sl@0: } sl@0: sl@0: TVerdict TCreateSinkBufferTestStep0::DoTestStepL() sl@0: { sl@0: TVerdict result = EPass; sl@0: TMediaId mediaId; sl@0: TBool ref; sl@0: sl@0: // Create sink buffer sl@0: CMMFBuffer* nullBuffer = iSink->CreateSinkBufferL(mediaId, ref); sl@0: User::LeaveIfError( iSink->SinkThreadLogon(*(static_cast(iSource))) ); sl@0: TBool loggedOn = ETrue; sl@0: sl@0: iSink->EmptyBufferL(nullBuffer, iSource, mediaId); sl@0: sl@0: CMMFBuffer* buffer = static_cast(iSource)->MmfBuffer(); sl@0: sl@0: if (ref != iExpectedRef) sl@0: result = EFail; sl@0: sl@0: if (!buffer) sl@0: { sl@0: RDebug::Print(_L("*** TCreateSinkBufferTestStep: iSink->CreateSinkBufferL returned NULL")); sl@0: result = EFail; sl@0: } sl@0: sl@0: if (result != EFail) sl@0: { sl@0: if (buffer->Type() != iExpectedType) sl@0: result = EFail; sl@0: sl@0: if (buffer->Status() != EAvailable) sl@0: result = EFail; sl@0: sl@0: if (buffer->Type() == KUidMmfDescriptorBuffer) sl@0: { sl@0: CMMFDataBuffer* dataBuffer = STATIC_CAST(CMMFDataBuffer*, buffer); sl@0: TDes8& data = dataBuffer->Data(); sl@0: sl@0: if (data.MaxLength() != iExpectedMaxLength) sl@0: result = EFail; sl@0: } sl@0: sl@0: buffer = NULL; sl@0: } sl@0: sl@0: if (loggedOn) sl@0: iSink->SinkThreadLogoff(); sl@0: sl@0: if (buffer != NULL) sl@0: result = EFail; // buffer not deleted sl@0: sl@0: return result; sl@0: } sl@0: sl@0: sl@0: TVerdict TCreateSinkBufferTestStep::DoTestPostambleL(TBool /*aCheck*/) sl@0: { sl@0: REComSession::FinalClose(); sl@0: return EPass; sl@0: } sl@0: sl@0: sl@0: TVerdict TCreateSinkBufferTestStep1::DoTestStepL() sl@0: { sl@0: TVerdict result = EPass; sl@0: TMediaId mediaId; sl@0: TBool ref; sl@0: sl@0: TBuf8<1> dummyConfigDes; sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, dummyConfigDes); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: //DevSound WP can't call prime before login sink->SinkPrimeL(); sl@0: sl@0: // Create sink buffer sl@0: CMMFBuffer* nullBuffer = sink->CreateSinkBufferL(mediaId, ref); sl@0: User::LeaveIfError( sink->SinkThreadLogon(*(static_cast(iSource))) ); sl@0: TCleanupItem threadLogOff(DoDataSinkThreadLogoff, sink); sl@0: CleanupStack::PushL(threadLogOff); sl@0: sl@0: //DevSound WP sink->SinkPrimeL(); this should go after negotiate sl@0: TCleanupItem sinkStop(DoDataSinkStop, sink); sl@0: CleanupStack::PushL(sinkStop); sl@0: if (!iSource) sl@0: User::Leave(KErrNoMemory); sl@0: if (iFormat) sl@0: sink->NegotiateL(*iFormat); sl@0: else sl@0: sink->NegotiateL(*iSource); sl@0: sink->SinkPrimeL();//DevSound WP moved from above sl@0: sink->SinkPlayL(); sl@0: sink->EmptyBufferL(nullBuffer, iSource, mediaId); sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFBuffer* buffer = static_cast(iSource)->MmfBuffer(); sl@0: sl@0: if (ref != iExpectedRef) sl@0: result = EFail; sl@0: sl@0: if (!buffer) sl@0: { sl@0: RDebug::Print(_L("*** TCreateSinkBufferTestStep: sink->CreateSinkBufferL returned NULL")); sl@0: result = EFail; sl@0: } sl@0: sl@0: if (result != EFail) sl@0: { sl@0: if (buffer->Type() != iExpectedType) sl@0: result = EFail; sl@0: sl@0: // DevSound WP buffers are owned and controller by sl@0: // HwPlugins test should not make assumptions sl@0: // if (buffer->Status() != EAvailable) sl@0: // result = EFail; sl@0: sl@0: if (buffer->Type() == KUidMmfDescriptorBuffer) sl@0: { sl@0: /* sl@0: DevSound WP buffers are owned and controller by sl@0: HwPlugins test should not make assumptions sl@0: CMMFDataBuffer* dataBuffer = STATIC_CAST(CMMFDataBuffer*, buffer); sl@0: TDes8& data = dataBuffer->Data(); sl@0: sl@0: if (data.MaxLength() != iExpectedMaxLength) sl@0: result = EFail; sl@0: */ sl@0: } sl@0: sl@0: buffer = NULL; sl@0: } sl@0: sl@0: // Re-test after logging on. (iNeedsSWConversion = ETrue) sl@0: User::LeaveIfError(sink->SinkThreadLogon(*(static_cast(iSource)))); sl@0: sl@0: CleanupStack::PopAndDestroy(3, sink); // sinkStop, threadLogOff, sink sl@0: sl@0: // if (buffer != NULL) DevSound WP might not be null if was never created sl@0: // result = EFail; also not test apps buffer to delete sl@0: sl@0: return result; sl@0: } sl@0: sl@0: TVerdict TCreateSinkBufferTestStep2::DoTestStepL() sl@0: { sl@0: TVerdict result = EPass; sl@0: TMediaId mediaId; sl@0: TBool ref; sl@0: sl@0: TBuf8<1> dummyConfigDes; sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, dummyConfigDes); sl@0: CleanupDeletePushL(sink); sl@0: sink->SinkPrimeL(); sl@0: sl@0: // Create sink buffer sl@0: CMMFBuffer* nullBuffer = sink->CreateSinkBufferL(mediaId, ref); sl@0: User::LeaveIfError( sink->SinkThreadLogon(*(static_cast(iSource))) ); sl@0: TCleanupItem threadLogOff(DoDataSinkThreadLogoff, sink); sl@0: CleanupStack::PushL(threadLogOff); sl@0: sl@0: sink->SinkPrimeL(); sl@0: TCleanupItem sinkStop(DoDataSinkStop, sink); sl@0: CleanupStack::PushL(sinkStop); sl@0: if (!iSource) sl@0: User::Leave(KErrArgument); sl@0: if (iFormat) sl@0: sink->NegotiateL(*iFormat); sl@0: else sl@0: sink->NegotiateL(*iSource); sl@0: sink->SinkPlayL(); sl@0: sink->EmptyBufferL(nullBuffer, iSource, mediaId); sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFBuffer* buffer = static_cast(iSource)->MmfBuffer(); sl@0: sl@0: if (ref != iExpectedRef) sl@0: result = EFail; sl@0: sl@0: if (!buffer) sl@0: { sl@0: RDebug::Print(_L("*** TCreateSinkBufferTestStep: sink->CreateSinkBufferL returned NULL")); sl@0: result = EFail; sl@0: } sl@0: sl@0: if (result != EFail) sl@0: { sl@0: if (buffer->Type() != iExpectedType) sl@0: result = EFail; sl@0: sl@0: if (buffer->Status() != EAvailable) sl@0: result = EFail; sl@0: sl@0: if (buffer->Type() == KUidMmfDescriptorBuffer) sl@0: { sl@0: CMMFDataBuffer* dataBuffer = STATIC_CAST(CMMFDataBuffer*, buffer); sl@0: TDes8& data = dataBuffer->Data(); sl@0: sl@0: if (data.MaxLength() != iExpectedMaxLength) sl@0: result = EFail; sl@0: } sl@0: sl@0: buffer = NULL; sl@0: } sl@0: sl@0: // Test the rest... sl@0: TFourCC fourCC = KMMFFourCCCodePCM16; sl@0: TFourCC emptyFourCC; sl@0: sl@0: TBufC8<5> fourCCString(KEmptyFourCCCode); sl@0: TPtr8 fourCCPtr = fourCCString.Des(); sl@0: TPtr8 fourCCPtr1(&fourCCPtr[0], 4); sl@0: emptyFourCC.FourCC(&fourCCPtr1); sl@0: TInt err = sink->SinkThreadLogon(*(static_cast(iSource))); sl@0: if (err != KErrNone) sl@0: { sl@0: //RDebug::Print(_L("Audio Output: Expecting error %d, got %d"), KErrNone, err);(Commented under DEF105143) sl@0: result = EFail; sl@0: } sl@0: sl@0: TRAP(err, sink->NegotiateL(*iSource)); sl@0: if (err != KErrNotSupported) sl@0: { sl@0: // RDebug::Print(_L("Audio Output: Expecting error %d, got %d"), KErrNotSupported, err);(Commented under DEF105143) sl@0: result = EFail; sl@0: } sl@0: sl@0: if ((sink->SinkDataTypeCode(mediaId) != fourCC) && (sink->SinkDataTypeCode(mediaId) != emptyFourCC)) sl@0: { sl@0: RDebug::Print(_L("Audio Output: NegotiateL sink code does not match\n")); sl@0: result = EFail; sl@0: } sl@0: sl@0: sink->SinkPrimeL(); sl@0: TRAP(err, sink->SinkPlayL()); sl@0: if (err != KErrNotSupported) sl@0: { sl@0: // RDebug::Print(_L("Audio Output: Expecting error %d, got %d"), KErrNotSupported, err);(Commented under DEF105143) sl@0: result = EFail; sl@0: } sl@0: sink->SinkPauseL(); sl@0: sink->SinkStopL(); sl@0: sl@0: TMMFPrioritySettings prioritySettings; sl@0: sink->SetSinkPrioritySettings(prioritySettings); sl@0: sink->SinkThreadLogoff(); sl@0: sl@0: CleanupStack::PopAndDestroy(3, sink); // sinkStop, threadLogOff, sink sl@0: sl@0: if (buffer != NULL) sl@0: result = EFail; sl@0: sl@0: return result; sl@0: } sl@0: sl@0: TVerdict TCreateSinkBufferTestStep3::DoTestStepL() sl@0: { sl@0: TVerdict result = EPass; sl@0: TMediaId mediaId; sl@0: TBool ref; sl@0: // DevSoundWP - The source file is pcmu8 not pcm16 sl@0: // on 7.0s audio output this didn't matter as it could only sl@0: // accept pcm16 - 8.0 can accept pcmu8 as well sl@0: // TFourCC fourCC = KMMFFourCCCodePCM16; sl@0: TFourCC fourCC = KMMFFourCCCodePCMU8; sl@0: TFourCC emptyFourCC; sl@0: TMMFPrioritySettings prioritySettings; sl@0: sl@0: TBuf8<1> dummyConfigDes; sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, dummyConfigDes); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: //DevSound WP - need to rest this as buffer may not be emptied ok if OOM in AS occurs sl@0: static_cast(iSource)->ResetBufferEmptiedOk(); sl@0: sl@0: //DevSound WP must call logon before prime sl@0: User::LeaveIfError( sink->SinkThreadLogon(*(static_cast(iSource))) ); sl@0: sink->SinkPrimeL(); sl@0: sl@0: // Create sink buffer sl@0: CMMFBuffer* nullBuffer = sink->CreateSinkBufferL(mediaId, ref); sl@0: //DevSound WP must call logon before prime sl@0: // User::LeaveIfError( sink->SinkThreadLogon(*(static_cast(iSource))) ); sl@0: TCleanupItem threadLogOff(DoDataSinkThreadLogoff, sink); sl@0: CleanupStack::PushL(threadLogOff); sl@0: sl@0: sink->SinkPrimeL(); sl@0: TCleanupItem sinkStop(DoDataSinkStop, sink); sl@0: CleanupStack::PushL(sinkStop); sl@0: if (!iSource) sl@0: User::Leave(KErrNoMemory); sl@0: if (iFormat) sl@0: sink->NegotiateL(*iFormat); sl@0: else sl@0: sink->NegotiateL(*iSource); sl@0: sink->SinkPlayL(); sl@0: sink->EmptyBufferL(nullBuffer, iSource, mediaId); sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFBuffer* buffer = static_cast(iSource)->MmfBuffer(); sl@0: sl@0: if ((buffer) && (static_cast(iSource)->BufferEmptiedOk())) sl@0: {//DevSound WP buffer not emptied ok if OOM in AS sl@0: sl@0: if (ref != iExpectedRef) sl@0: result = EFail; sl@0: sl@0: if (!buffer) sl@0: { sl@0: RDebug::Print(_L("*** TCreateSinkBufferTestStep: sink->CreateSinkBufferL returned NULL")); sl@0: result = EFail; sl@0: } sl@0: sl@0: if (result != EFail) sl@0: { sl@0: if (buffer->Type() != iExpectedType) sl@0: result = EFail; sl@0: sl@0: if (buffer->Status() != EAvailable) sl@0: result = EFail; sl@0: sl@0: buffer = NULL; sl@0: } sl@0: sl@0: // Test the rest... sl@0: if ((sink->SinkDataTypeCode(mediaId) != fourCC) && (sink->SinkDataTypeCode(mediaId) != emptyFourCC)) sl@0: { sl@0: RDebug::Print(_L("Audio Output: NegotiateL sink code does not match\n")); sl@0: result = EFail; sl@0: } sl@0: sl@0: User::LeaveIfError(sink->SinkThreadLogon(*(static_cast(iSource)))); sl@0: sink->SinkPrimeL(); sl@0: sink->SinkPlayL(); sl@0: sink->SinkPauseL(); sl@0: sink->SinkStopL(); sl@0: sl@0: sink->SetSinkPrioritySettings(prioritySettings); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3, sink); // sinkStop, threadLogOff, sink sl@0: sl@0: // if (buffer != NULL) DevSound WP OOM in AS may not be null sl@0: // result = EFail; sl@0: sl@0: return result; sl@0: } sl@0: sl@0: sl@0: TVerdict TCreateSinkBufferTestStep4::DoTestStepL() sl@0: { sl@0: TVerdict result = EPass; sl@0: TMediaId mediaId; sl@0: TBool ref; sl@0: sl@0: // DevSoundWP - The source file is pcmu8 not pcm16 sl@0: // however the sample rate is non standard and so sl@0: // the conversion is done in audio output which means the sl@0: // datatype is still pcm16 sl@0: TFourCC fourCC = KMMFFourCCCodePCM16; sl@0: //TFourCC fourCC = KMMFFourCCCodePCMU8; sl@0: sl@0: TFourCC emptyFourCC; sl@0: TMMFPrioritySettings prioritySettings; sl@0: sl@0: TBuf8<1> dummyConfigDes; sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, dummyConfigDes); sl@0: CleanupDeletePushL(sink); sl@0: // DevSoundWP Prime should be after logon sink->SinkPrimeL(); sl@0: sl@0: // Create sink buffer sl@0: CMMFBuffer* nullBuffer = sink->CreateSinkBufferL(mediaId, ref); sl@0: sl@0: //DevSound WP needs resetting as buffer is not emptied ok during OOM in AS sl@0: static_cast(iSource)->ResetBufferEmptiedOk(); sl@0: sl@0: User::LeaveIfError( sink->SinkThreadLogon(*(static_cast(iSource))) ); sl@0: TCleanupItem threadLogOff(DoDataSinkThreadLogoff, sink); sl@0: CleanupStack::PushL(threadLogOff); sl@0: sl@0: sink->SinkPrimeL(); sl@0: TCleanupItem sinkStop(DoDataSinkStop, sink); sl@0: CleanupStack::PushL(sinkStop); sl@0: if (!iSource) sl@0: User::Leave(KErrNoMemory); sl@0: if (iFormat) sl@0: sink->NegotiateL(*iFormat); sl@0: else sl@0: sink->NegotiateL(*iSource); sl@0: sink->SinkPlayL(); sl@0: sink->EmptyBufferL(nullBuffer, iSource, mediaId); sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFBuffer* buffer = static_cast(iSource)->MmfBuffer(); sl@0: sl@0: if ((buffer) && (static_cast(iSource)->BufferEmptiedOk())) sl@0: {//DevSound WP buffer not emptied ok if OOM in AS sl@0: sl@0: if (ref != iExpectedRef) sl@0: result = EFail; sl@0: sl@0: if (!buffer) sl@0: { sl@0: RDebug::Print(_L("*** TCreateSinkBufferTestStep: sink->CreateSinkBufferL returned NULL")); sl@0: result = EFail; sl@0: } sl@0: sl@0: if (result != EFail) sl@0: { sl@0: if (buffer->Type() != iExpectedType) sl@0: result = EFail; sl@0: sl@0: if (buffer->Status() != EAvailable) sl@0: result = EFail; sl@0: sl@0: /* sl@0: DevSound WP buffers are owned and controller by sl@0: HwPlugins test should not make assumptions sl@0: #ifdef __USE_MMF_TRANSFERBUFFERS__ sl@0: if (buffer->Type() == KUidMmfTransferBuffer) sl@0: #else sl@0: if (buffer->Type() == KUidMmfDescriptorBuffer) sl@0: #endif sl@0: { sl@0: CMMFDataBuffer* dataBuffer = STATIC_CAST(CMMFDataBuffer*, buffer); sl@0: TDes8& data = dataBuffer->Data(); sl@0: sl@0: if (data.MaxLength() != iExpectedMaxLength) sl@0: result = EFail; sl@0: } sl@0: else sl@0: result = EFail; sl@0: */ sl@0: sl@0: sl@0: buffer = NULL; sl@0: } sl@0: sl@0: // Test the rest... sl@0: if ((sink->SinkDataTypeCode(mediaId) != fourCC) && (sink->SinkDataTypeCode(mediaId) != emptyFourCC)) sl@0: { sl@0: RDebug::Print(_L("Audio Output: NegotiateL sink code does not match\n")); sl@0: result = EFail; sl@0: } sl@0: sl@0: User::LeaveIfError(sink->SinkThreadLogon(*(static_cast(iSource)))); sl@0: sink->SinkPrimeL(); sl@0: sink->SinkPlayL(); sl@0: sink->SinkPauseL(); sl@0: sink->SinkStopL(); sl@0: sl@0: sink->SetSinkPrioritySettings(prioritySettings); sl@0: sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3, sink); // sinkStop, threadLogOff, sink sl@0: sl@0: // if (buffer != NULL) DevSound WP if OOM in AS may not be null sl@0: // result = EFail; sl@0: sl@0: return result; sl@0: } sl@0: sl@0: sl@0: TVerdict TSinkThreadLogonTestStep::DoTestStepL() sl@0: { sl@0: User::LeaveIfError(iSink->SinkThreadLogon(*iEventHandler)); sl@0: sl@0: iSink->SinkThreadLogoff(); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TNegotiateTestStep::DoTestStepL() sl@0: { sl@0: iSink->NegotiateL(*iSource); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TEmptyBufferTestStep::DoTestStepL() sl@0: { sl@0: RandomiseBuffer(); sl@0: sl@0: TMediaId mediaId; sl@0: TRAPD(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: TInt destinationLength = iDestinationDes.MaxLength(); sl@0: if (Mem::Compare(iDestinationDes.Ptr(), destinationLength, iCopyOfDestinationDes.Ptr(), destinationLength)) sl@0: return EFail; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: if (iCopyOfDestinationDes.Length()<(iPosition+iWriteLength)) sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: iPosition += writeLength; sl@0: return EPass; sl@0: } sl@0: sl@0: sl@0: // TClipBytesFreeTestStep sl@0: // Test that the number of bytes free is what we expect. sl@0: // Zero bytes free is also an acceptable result, when file failures are expected. sl@0: TVerdict TClipBytesFreeTestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink); sl@0: TInt64 bytesFree = clip->BytesFree(); sl@0: sl@0: // tolerance incase another process accesses file system during test sl@0: TInt64 tolerance = 8192; // 2 blocks of 4096 bytes sl@0: sl@0: // FileServer file failure simulation is currently only supported on WINS sl@0: // so ignore the iFileFailureExpected on target builds sl@0: sl@0: TVerdict result = EFail; sl@0: if ((bytesFree == iExpectedBytesFree) || (Abs(bytesFree - iExpectedBytesFree) <= tolerance)) sl@0: { sl@0: result = EPass; sl@0: } sl@0: else if (iFileFailureExpected && (bytesFree == 0)) sl@0: { sl@0: result = EPass; sl@0: } sl@0: sl@0: return result; sl@0: } sl@0: sl@0: // TClipSizeTestStep sl@0: // Test that the size of the clip is what we expect. sl@0: // Zero bytes free is also an acceptable result, when file failures are expected. sl@0: TVerdict TClipSizeTestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource); sl@0: TInt size = clip->Size(); sl@0: sl@0: return (size == iExpectedSize) || ((size == 0) && iFileFailureExpected) ? EPass : EFail; sl@0: } sl@0: sl@0: // TClipDeleteTestStep sl@0: // Attempt to delete the clip. sl@0: // The test leaves if there is an error. sl@0: TVerdict TClipDeleteTestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink); sl@0: User::LeaveIfError(clip->Delete()); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: // TClipSetSizeTestStep sl@0: // Attempt to set the size of the clip sl@0: // Test that the results are correct, in the case when setting the size is supported. sl@0: // In the case when it is not supported check that the size does not change. sl@0: TVerdict TClipSetSizeTestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink); sl@0: sl@0: TInt size; sl@0: TInt oldSize = clip->Size(); sl@0: if (oldSize <= 0) sl@0: { sl@0: if (iFileFailureExpected && (oldSize == 0)) sl@0: User::Leave(KErrFileFail); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: TInt newSize = oldSize+1; sl@0: TInt err = clip->SetSize(newSize); sl@0: if (iCanSetSize) sl@0: { sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if ((size = clip->Size()) != newSize) sl@0: { sl@0: if (iFileFailureExpected && (size == 0)) sl@0: User::Leave(KErrFileFail); sl@0: sl@0: return EFail; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: if (err != KErrNotSupported) sl@0: { sl@0: if (err == KErrNone) sl@0: return EFail; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: if ((size = clip->Size()) != oldSize) sl@0: { sl@0: if (iFileFailureExpected && (size == 0)) sl@0: User::Leave(KErrFileFail); sl@0: sl@0: return EFail; sl@0: } sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: sl@0: TVerdict TClipReadBufferTestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, clip->ReadBufferL(iReadLength, iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt readLength = buffer->BufferSize(); sl@0: if (readLength < iReadLength) // Reading more data than we asked for is ok. sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: TVerdict TClipReadBuffer2TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, clip->ReadBufferL(iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt readLength = buffer->BufferSize(); sl@0: if (readLength != iReadLength) sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: TVerdict TClipReadBuffer3TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource); sl@0: sl@0: RandomiseBuffer(); sl@0: clip->ReadBufferL(iBuffer, iPosition); sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt readLength = buffer->BufferSize(); sl@0: if (readLength != iReadLength) sl@0: return EFail; sl@0: sl@0: TInt err = CheckBuffer(); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: TVerdict TClipReadBuffer4TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, clip->ReadBufferL(iReadLength, iBuffer, iPosition, iSink)); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt readLength = buffer->BufferSize(); sl@0: if (readLength != iExpectedReadLength) sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: sl@0: TVerdict TDescriptorClipWriteBufferTestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, clip->WriteBufferL(iWriteLength, iBuffer, iPosition, iSource)); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: sl@0: TInt position = iPosition; sl@0: if (iCopyOfDestinationDes.Length()Data().Ptr(), iWriteLength); sl@0: iCopyOfDestinationDes.Replace(position, iWriteLength, bufferData); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TDescriptorClipWriteBuffer2TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, clip->WriteBufferL(iBuffer, iPosition, iSource)); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: TInt position = iPosition; sl@0: if (iCopyOfDestinationDes.Length()Data().Ptr(), iWriteLength); sl@0: iCopyOfDestinationDes.Replace(position, iWriteLength, bufferData); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TDescriptorClipWriteBuffer3TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink); sl@0: sl@0: RandomiseBuffer(); sl@0: clip->WriteBufferL(iBuffer, iPosition); sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: TInt position = iPosition; sl@0: if (iCopyOfDestinationDes.Length()Data().Ptr(), iWriteLength); sl@0: iCopyOfDestinationDes.Replace(position, iWriteLength, bufferData); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TNewFileSourceTestStep::DoTestStepL() sl@0: { sl@0: CMMFFile* source = STATIC_CAST(CMMFFile*, MDataSource::NewSourceL(iUid, *iConfigDes)); sl@0: CleanupStack::PushL(source); sl@0: source->SourcePrimeL(); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EPass; sl@0: } sl@0: sl@0: TInt TFileSourceThreadLogonThread(TAny* initPtr) sl@0: { sl@0: TThreadData &threadData = *REINTERPRET_CAST(TThreadData*, initPtr); sl@0: CMMFFile* source = threadData.iFilePtr; sl@0: MAsyncEventHandler* eventHandler = threadData.iEventHandler; sl@0: sl@0: threadData.iErr = KErrNone; sl@0: sl@0: threadData.iErr = source->SourceThreadLogon(*eventHandler); sl@0: if (threadData.iErr == KErrNone) sl@0: { sl@0: threadData.iFileSize = source->Size(); sl@0: source->SourceThreadLogoff(); sl@0: } sl@0: sl@0: sl@0: return 0; sl@0: } sl@0: sl@0: TVerdict TFileSourceThreadLogonTestStep::DoTestStepL() sl@0: { sl@0: sl@0: TThreadData threadData; // Is this going to work on target? (or do we need to package the data and use RThread::ReadL/WriteL?) sl@0: threadData.iFilePtr = STATIC_CAST(CMMFFile*, iSource); sl@0: threadData.iEventHandler = iEventHandler; sl@0: sl@0: TRequestStatus logonStatus; sl@0: sl@0: RThread sourceThread; sl@0: User::LeaveIfError(sourceThread.Create(_L("TFileSourceThreadLogonThread"), TFileSourceThreadLogonThread, KDefaultStackSize, NULL, &threadData)); sl@0: CleanupClosePushL(sourceThread); sl@0: sl@0: sourceThread.Logon(logonStatus); sl@0: if(logonStatus != KRequestPending) sl@0: { sl@0: User::Leave(logonStatus.Int()); sl@0: } sl@0: sourceThread.Resume(); sl@0: sl@0: User::WaitForRequest(logonStatus); sl@0: if(logonStatus != KErrNone) sl@0: { sl@0: User::Leave(logonStatus.Int()); sl@0: } sl@0: sl@0: if (threadData.iErr != KErrNone) sl@0: User::Leave(threadData.iErr); sl@0: sl@0: if ((threadData.iFileSize != iFileSize)) sl@0: { sl@0: if (!iFileFailureExpected) sl@0: return EFail; sl@0: sl@0: if (threadData.iFileSize != 0) sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(1); // sourceThread sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileFillBufferTestStep::DoTestStepL() sl@0: { sl@0: RandomiseBuffer(); sl@0: sl@0: TMediaId mediaId; sl@0: sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: MDataSource* source = CreateFileSourceL(iSourceType, fs, iFileName); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: CleanupStack::PopAndDestroy(2, &fs); // source, fs sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt readLength = buffer->BufferSize(); sl@0: if (readLength != iReadLength) sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: TVerdict TFileFillBuffer2TestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: MDataSource* source = CreateFileSourceL(iSourceType, fs, iFileName); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: TInt readLength; sl@0: TVerdict result = EPass; sl@0: iPosition = 0; sl@0: do sl@0: { sl@0: RandomiseBuffer(); sl@0: sl@0: TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: result = EFail; sl@0: break; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: result = EFail; sl@0: break; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: readLength = buffer->BufferSize(); sl@0: sl@0: err = CheckBuffer(); sl@0: iPosition += readLength; sl@0: sl@0: if (err != 0) sl@0: { sl@0: result = EFail; sl@0: break; sl@0: } sl@0: } sl@0: while (readLength != 0); sl@0: sl@0: CleanupStack::PopAndDestroy(2, &fs); // source, fs sl@0: return result; sl@0: } sl@0: sl@0: TVerdict TFileFillBuffer3TestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: MDataSource* source = CreateFileSourceL(iSourceType, fs, iFileName); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: TInt maxRequestCount = bufferArray.Count(); sl@0: TInt err = KErrNone; sl@0: iPosition = 0; sl@0: TInt requestCount; sl@0: for (requestCount = 0 ; requestCountFillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err != KErrNone) sl@0: break; sl@0: } sl@0: sl@0: if (requestCount) sl@0: { sl@0: if (requestCount>iMaxRequestCount) sl@0: requestCount = iMaxRequestCount; sl@0: sl@0: dummySink->SetExpectedFillCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(2, &fs); sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if (!requestCount && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (!sinkBufferFilledOk && requestCount) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: TInt completionCount; sl@0: for (completionCount = 0 ; completionCountBufferSize(); sl@0: if (readLength != iReadLength) sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: iPosition += readLength; sl@0: if (err != 0) sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileFillBuffer4TestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: TInt maxRequestCount = bufferArray.Count(); sl@0: TInt err = KErrNone; sl@0: TInt requestCount; sl@0: for (requestCount = 0 ; requestCountFillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err != KErrNone) sl@0: break; sl@0: } sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: if (requestCount) sl@0: { sl@0: if (requestCount>iMaxRequestCount) sl@0: requestCount = iMaxRequestCount; sl@0: sl@0: dummySink->SetExpectedFillCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if (!requestCount && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (!sinkBufferFilledOk && requestCount) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: TInt completionCount; sl@0: for (completionCount = 0 ; completionCountBufferSize(); sl@0: if (readLength != iReadLength) sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: iPosition += readLength; sl@0: if (err != 0) sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: iSource->FillBufferL(bufferArray[completionCount], iSink, mediaId); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileReadBufferTestStep::DoTestStepL() sl@0: { sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, fs, iFileName)); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* sink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*sink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, source->ReadBufferL(iReadLength, iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: CleanupStack::PopAndDestroy(2, &fs); sl@0: sl@0: TBool sinkBufferFilledOk = sink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = sink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt readLength = buffer->BufferSize(); sl@0: if (readLength < iReadLength) // Reading more data than we asked for is ok. sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: TVerdict TFileReadBuffer2TestStep::DoTestStepL() sl@0: { sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, fs, iFileName)); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* sink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*sink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, source->ReadBufferL(iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: CleanupStack::PopAndDestroy(2, &fs); // source, fs sl@0: sl@0: TBool sinkBufferFilledOk = sink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = sink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt readLength = buffer->BufferSize(); sl@0: if (readLength != iReadLength) sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: TVerdict TFileReadBuffer3TestStep::DoTestStepL() sl@0: { sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, fs, iFileName)); sl@0: CleanupDeletePushL(source); sl@0: source->SourcePrimeL(); sl@0: sl@0: RandomiseBuffer(); sl@0: source->ReadBufferL(iBuffer, iPosition); sl@0: CleanupStack::PopAndDestroy(2, &fs); //source, fs sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt readLength = buffer->BufferSize(); sl@0: if (readLength != iReadLength) sl@0: return EFail; sl@0: sl@0: TInt err = CheckBuffer(); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: TVerdict TFileReadBuffer4TestStep::DoTestStepL() sl@0: { sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, fs, iFileName)); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, source->ReadBufferL(iReadLength, iBuffer, iPosition, iSink)); sl@0: if (iAsynchronousRead && (err == KErrNone)) sl@0: CActiveScheduler::Start(); sl@0: CleanupStack::PopAndDestroy(2, &fs); //source, fs sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt readLength = buffer->BufferSize(); sl@0: if (readLength != iExpectedReadLength) sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: TVerdict TFileReadBuffer5TestStep::DoTestStepL() sl@0: { sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, fs, iFileName)); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: TInt maxRequestCount = bufferArray.Count(); sl@0: TInt err = KErrNone; sl@0: iPosition = 0; sl@0: TInt requestCount; sl@0: for (requestCount = 0 ; requestCountReadBufferL(iReadLength, iBuffer, iPosition, iSink)); sl@0: if (err != KErrNone) sl@0: break; sl@0: sl@0: iPosition += 2*KTestBufferSize; sl@0: } sl@0: sl@0: if (requestCount) sl@0: { sl@0: if (requestCount>iMaxRequestCount) sl@0: requestCount = iMaxRequestCount; sl@0: sl@0: dummySink->SetExpectedFillCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(2, &fs); // source, fs sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if (!requestCount && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (!sinkBufferFilledOk && requestCount) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = 0; sl@0: sl@0: TInt completionCount; sl@0: for (completionCount = 0 ; completionCountBufferSize(); sl@0: if (readLength != iReadLength) sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: iPosition += 2*KTestBufferSize; sl@0: if (err != 0) sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileReadBuffer6TestStep::DoTestStepL() sl@0: { sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, fs, iFileName)); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: TInt maxRequestCount = bufferArray.Count(); sl@0: TInt err = KErrNone; sl@0: iPosition = 0; sl@0: TInt requestCount; sl@0: for (requestCount = 0 ; requestCountReadBufferL(iBuffer, iPosition, iSink)); sl@0: if (err != KErrNone) sl@0: break; sl@0: sl@0: iPosition += 2*KTestBufferSize; sl@0: } sl@0: sl@0: if (requestCount) sl@0: { sl@0: if (requestCount>iMaxRequestCount) sl@0: requestCount = iMaxRequestCount; sl@0: sl@0: dummySink->SetExpectedFillCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(2, &fs); // source, fs sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if (!requestCount && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (!sinkBufferFilledOk && requestCount) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = 0; sl@0: sl@0: TInt completionCount; sl@0: for (completionCount = 0 ; completionCountBufferSize(); sl@0: if (readLength != iReadLength) sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: iPosition += 2*KTestBufferSize; sl@0: if (err != 0) sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileReadBuffer7TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource); sl@0: sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: TInt maxRequestCount = bufferArray.Count(); sl@0: TInt err = KErrNone; sl@0: iPosition = 0; sl@0: sl@0: TInt requestCount; sl@0: for (requestCount = 0 ; requestCountReadBufferL(iReadLength, iBuffer, iPosition, iSink)); sl@0: if (err != KErrNone) sl@0: break; sl@0: sl@0: iPosition += 2*KTestBufferSize; sl@0: } sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: if (requestCount) sl@0: { sl@0: if (requestCount>iMaxRequestCount) sl@0: requestCount = iMaxRequestCount; sl@0: sl@0: dummySink->SetExpectedFillCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if (!requestCount && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (!sinkBufferFilledOk && requestCount) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = 0; sl@0: sl@0: TInt completionCount; sl@0: for (completionCount = 0 ; completionCountBufferSize(); sl@0: if (readLength != iReadLength) sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: iPosition += 2*KTestBufferSize; sl@0: if (err != 0) sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: clip->ReadBufferL(iReadLength, bufferArray[completionCount], iPosition, iSink); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileReadBuffer8TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource); sl@0: sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: TInt maxRequestCount = bufferArray.Count(); sl@0: TInt err = KErrNone; sl@0: iPosition = 0; sl@0: sl@0: TInt requestCount; sl@0: for (requestCount = 0 ; requestCountReadBufferL(iBuffer, iPosition, iSink)); sl@0: if (err != KErrNone) sl@0: break; sl@0: sl@0: iPosition += 2*KTestBufferSize; sl@0: } sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: if (requestCount) sl@0: { sl@0: if (requestCount>iMaxRequestCount) sl@0: requestCount = iMaxRequestCount; sl@0: sl@0: dummySink->SetExpectedFillCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if (!requestCount && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (!sinkBufferFilledOk && requestCount) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = 0; sl@0: sl@0: TInt completionCount; sl@0: for (completionCount = 0 ; completionCountBufferSize(); sl@0: if (readLength != iReadLength) sl@0: return EFail; sl@0: sl@0: err = CheckBuffer(); sl@0: iPosition += 2*KTestBufferSize; sl@0: if (err != 0) sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: clip->ReadBufferL(bufferArray[completionCount], iPosition, iSink); sl@0: return EPass; sl@0: } sl@0: sl@0: sl@0: TVerdict TNewFileSinkTestStep::DoTestStepL() sl@0: { sl@0: CMMFFile* sink = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(iUid, *iConfigDes)); sl@0: CleanupStack::PushL(sink); sl@0: sink->SinkPrimeL(); sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileSinkSetSizeTestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink); sl@0: sl@0: TInt size; sl@0: TInt oldSize = clip->Size(); sl@0: sl@0: TInt newSize = oldSize+1; sl@0: TInt err = clip->SetSize(newSize); sl@0: if (iCanSetSize) sl@0: { sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if ((size = clip->Size()) != newSize) sl@0: { sl@0: if (iFileFailureExpected && (size == 0)) sl@0: User::Leave(KErrFileFail); sl@0: sl@0: return EFail; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: if (err != KErrNotSupported) sl@0: { sl@0: if (err == KErrNone) sl@0: return EFail; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: if ((size = clip->Size()) != oldSize) sl@0: return EFail; sl@0: } sl@0: return EPass; sl@0: } sl@0: sl@0: TInt TFileSinkThreadLogonThread(TAny* initPtr) sl@0: { sl@0: TThreadData &threadData = *REINTERPRET_CAST(TThreadData*, initPtr); sl@0: CMMFFile* sink = threadData.iFilePtr; sl@0: MAsyncEventHandler* eventHandler = threadData.iEventHandler; sl@0: sl@0: threadData.iErr = KErrNone; sl@0: sl@0: threadData.iErr = sink->SinkThreadLogon(*eventHandler); sl@0: if (threadData.iErr == KErrNone) sl@0: { sl@0: threadData.iFileSize = sink->Size(); sl@0: sink->SinkThreadLogoff(); sl@0: } sl@0: sl@0: sl@0: return 0; sl@0: } sl@0: sl@0: TVerdict TFileSinkThreadLogonTestStep::DoTestStepL() sl@0: { sl@0: TBool failure = EFalse; sl@0: sl@0: sl@0: TThreadData threadData; // Is this going to work on target? (or do we need to package the data and use RThread::ReadL/WriteL?) sl@0: threadData.iFilePtr = STATIC_CAST(CMMFFile*, iSink); sl@0: threadData.iEventHandler = iEventHandler; sl@0: sl@0: TRequestStatus logonStatus; sl@0: sl@0: RThread sinkThread; sl@0: User::LeaveIfError(sinkThread.Create(_L("TFileSinkThreadLogonThread"), TFileSinkThreadLogonThread, KDefaultStackSize, NULL, &threadData)); sl@0: CleanupClosePushL(sinkThread); sl@0: sl@0: sinkThread.Logon(logonStatus); sl@0: if(logonStatus != KRequestPending) sl@0: { sl@0: User::Leave(logonStatus.Int()); sl@0: } sl@0: sinkThread.Resume(); sl@0: sl@0: User::WaitForRequest(logonStatus); sl@0: if(logonStatus != KErrNone) sl@0: { sl@0: User::Leave(logonStatus.Int()); sl@0: } sl@0: sl@0: if (threadData.iErr != KErrNone) sl@0: User::Leave(threadData.iErr); sl@0: sl@0: if ((threadData.iFileSize != iFileSize)) sl@0: { sl@0: if (!iFileFailureExpected) sl@0: { sl@0: failure = ETrue; sl@0: } sl@0: sl@0: if (threadData.iFileSize != 0) sl@0: { sl@0: failure = ETrue; sl@0: } sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(1); // sinkThread sl@0: return (failure ? EFail : EPass); sl@0: } sl@0: sl@0: TVerdict TFileEmptyBufferTestStep::DoTestStepL() sl@0: { sl@0: RandomiseBuffer(); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: User::LeaveIfError(iSink->SinkThreadLogon(*dummySource)); sl@0: iSink->SinkPrimeL(); sl@0: sl@0: TMediaId mediaId; sl@0: TRAPD(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: if (iAsynchronousWrite && (err == KErrNone)) sl@0: { sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: User::LeaveIfError(err); sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: User::LeaveIfError(dummySource->Error()); sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: if (iCopyOfDestinationDes.Length()<(iPosition+iWriteLength)) sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TWriteBufferTestStep::DoTestPostambleL(TBool aCheck) sl@0: { sl@0: if (iSink != NULL) sl@0: iSink->SinkStopL(); sl@0: sl@0: if (aCheck) sl@0: { sl@0: TInt err = CheckDestinationL(); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileEmptyBuffer2TestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: MDataSink* sink = CreateFileSinkL(iSinkType, iFsSession, iDestinationFileName); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sink->SinkPrimeL(); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, sink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: if (iAsynchronousWrite && (err == KErrNone)) sl@0: { sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: { sl@0: return EFail; sl@0: } sl@0: sl@0: User::LeaveIfError(err); sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: User::LeaveIfError(dummySource->Error()); sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: { sl@0: return EFail; sl@0: } sl@0: sl@0: if (iCopyOfDestinationDes.Length()<(iPosition+iWriteLength)) sl@0: { sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: } sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: return EPass; sl@0: } sl@0: sl@0: void TFileEmptyBuffer3TestStep::DoTestPreambleL() sl@0: { sl@0: CMMFClip* sink = STATIC_CAST(CMMFClip*, CreateFileSinkL(iSinkType, iFsSession, iDestinationFileName )); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: TInt err = sink->Delete(); sl@0: if ((err != KErrNone) && (err != KErrNotFound)) sl@0: { sl@0: User::Leave(err); sl@0: } sl@0: sl@0: iCopyOfDestinationDes.SetLength(0); sl@0: CleanupStack::PopAndDestroy(sink); sl@0: } sl@0: sl@0: TVerdict TFileEmptyBuffer3TestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: CMMFClip* sink = STATIC_CAST(CMMFClip*, CreateFileSinkL(iSinkType, iFsSession, iDestinationFileName)); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sink->SinkPrimeL(); sl@0: sl@0: TInt totalWriteLength = 0; sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt maxWriteLength = iCopyOfDestinationDes.MaxLength(); sl@0: TBool failure = EFalse; sl@0: sl@0: do sl@0: { sl@0: RandomiseBuffer(); sl@0: sl@0: buffer->Data().SetLength(Min(iWriteLength, maxWriteLength - totalWriteLength)); sl@0: TRAPD(err, sink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: if (iAsynchronousWrite && (err == KErrNone)) sl@0: { sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: { sl@0: failure = ETrue; sl@0: break; sl@0: } sl@0: sl@0: User::LeaveIfError(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: User::LeaveIfError(dummySource->Error()); sl@0: failure = ETrue; sl@0: break; sl@0: } sl@0: sl@0: totalWriteLength += buffer->BufferSize(); sl@0: iCopyOfDestinationDes.Append(buffer->Data()); sl@0: } sl@0: while (totalWriteLength < maxWriteLength); sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: return (failure ? EFail : EPass); sl@0: } sl@0: sl@0: TVerdict TFileEmptyBuffer3TestStep::DoTestPostambleL(TBool aCheck) sl@0: { sl@0: // Close ECom sl@0: TVerdict verdict = TFileTestStep::DoTestPostambleL(aCheck); sl@0: if (verdict != EPass) sl@0: { sl@0: return verdict; sl@0: } sl@0: sl@0: // Reset the buffer. sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: buffer->Data().SetLength(iWriteLength); sl@0: sl@0: if (aCheck) sl@0: { sl@0: TInt err = CheckDestinationL(); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: void TFileEmptyBuffer4TestStep::DoTestPreambleL() sl@0: { sl@0: TWriteBufferToFileTestStep::DoTestPreambleL(); sl@0: } sl@0: sl@0: TVerdict TFileEmptyBuffer4TestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: CMMFClip* sink = STATIC_CAST(CMMFClip*, CreateFileSinkL(iSinkType, iFsSession, iDestinationFileName)); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sink->SinkPrimeL(); sl@0: sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: TInt maxRequestCount = Min(iMaxRequestCount, bufferArray.Count()); sl@0: TInt err = KErrNone; sl@0: iPosition = 0; sl@0: sl@0: // For each buffer in the array try to empty it. Stop at the first failure. sl@0: // The test step should not Leave if there is an error as this will cause sl@0: // the CheckDestinationL function to fail... all successful empties must sl@0: // be completed. sl@0: TInt requestCount; sl@0: for (requestCount = 0; requestCount < maxRequestCount; requestCount++) sl@0: { sl@0: iBuffer = bufferArray[requestCount]; sl@0: RandomiseBuffer(); sl@0: sl@0: TRAP(err, sink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: if (err != KErrNone) sl@0: { sl@0: break; sl@0: } sl@0: } sl@0: sl@0: if (requestCount) sl@0: { sl@0: dummySource->SetExpectedEmptyCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: if (dummySource->ErrorCount()) sl@0: { sl@0: User::LeaveIfError(dummySource->Error()); sl@0: } sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if (!requestCount && sourceBufferEmptiedOk) sl@0: { sl@0: return EFail; sl@0: } sl@0: sl@0: TInt completionCount; sl@0: for (completionCount = 0; completionCount < requestCount; completionCount++) sl@0: { sl@0: iBuffer = bufferArray[completionCount]; sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: { sl@0: return EFail; sl@0: } sl@0: sl@0: if ((iPosition + iWriteLength) > iCopyOfDestinationDes.Length()) sl@0: iCopyOfDestinationDes.SetLength(iPosition + iWriteLength); sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: iPosition += iWriteLength; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileEmptyBuffer4TestStep::DoTestPostambleL(TBool aCheck) sl@0: { sl@0: // Close ECom sl@0: TVerdict verdict = TFileTestStep::DoTestPostambleL(aCheck); sl@0: if (verdict != EPass) sl@0: { sl@0: return verdict; sl@0: } sl@0: sl@0: if (aCheck) sl@0: { sl@0: TInt err = CheckDestinationL(); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TInt TFileEmptyBuffer5TestStep::CheckDestinationL() sl@0: { sl@0: TInt length = iCopyOfDestinationDes.Length(); sl@0: sl@0: // Read the file into a descriptor. sl@0: RFile destinationFile; sl@0: TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead | EFileShareAny); sl@0: CleanupClosePushL(destinationFile); sl@0: if (err != KErrNone) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: sl@0: if (err == KErrNotFound) sl@0: return (length != 0) ? -1 : 0; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: TInt destinationFileSize; sl@0: User::LeaveIfError(destinationFile.Size(destinationFileSize)); sl@0: sl@0: // Check that the file length is correct. sl@0: if (destinationFileSize != length) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return -1; sl@0: } sl@0: sl@0: HBufC8* destinationHBuf = HBufC8::NewLC(destinationFileSize); sl@0: TPtr8 destinationDes = destinationHBuf->Des(); sl@0: User::LeaveIfError(destinationFile.Read(destinationDes)); sl@0: sl@0: // Check that the file data matches. sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: { sl@0: // At least one of the remaining two writes was completed. sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[3]); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: { sl@0: iPosition += iWriteLength; sl@0: sl@0: buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[4]); sl@0: writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: bufferData.Set(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: } sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(destinationHBuf); sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return err; sl@0: } sl@0: sl@0: TVerdict TFileEmptyBuffer6TestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: TInt maxRequestCount = bufferArray.Count(); sl@0: TInt err = KErrNone; sl@0: iPosition = 0; sl@0: sl@0: TInt requestCount; sl@0: for (requestCount = 0 ; requestCountEmptyBufferL(iBuffer, iSource, mediaId)); sl@0: if (err != KErrNone) sl@0: break; sl@0: } sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: if (requestCount) sl@0: { sl@0: if (requestCount>iMaxRequestCount) sl@0: requestCount = iMaxRequestCount; sl@0: sl@0: dummySource->SetExpectedEmptyCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if (!requestCount && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (!sourceBufferEmptiedOk && requestCount) sl@0: { sl@0: requestCount-= dummySource->ErrorCount(); sl@0: err = dummySource->Error(); sl@0: sl@0: if (err == KErrNone) sl@0: return EFail; sl@0: } sl@0: sl@0: TInt completionCount; sl@0: for (completionCount = 0 ; completionCountBufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: if ((iPosition+iWriteLength)>iCopyOfDestinationDes.Length()) sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: iPosition += iWriteLength; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: iSink->EmptyBufferL(bufferArray[0], iSource, mediaId); sl@0: return EPass; sl@0: } sl@0: sl@0: TInt TFileEmptyBuffer6TestStep::CheckDestinationL() sl@0: { sl@0: TInt length = iCopyOfDestinationDes.Length(); sl@0: sl@0: // Read the file into a descriptor. sl@0: RFile destinationFile; sl@0: TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead | EFileShareAny); sl@0: CleanupClosePushL(destinationFile); sl@0: if (err != KErrNone) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: sl@0: if (err == KErrNotFound) sl@0: return (length != 0) ? -1 : 0; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: TInt destinationFileSize; sl@0: User::LeaveIfError(destinationFile.Size(destinationFileSize)); sl@0: sl@0: // Check that the file length is correct. sl@0: if (destinationFileSize != length) sl@0: { sl@0: if (destinationFileSize != (length+iWriteLength)) sl@0: { sl@0: if (destinationFileSize != (length+2*iWriteLength)) sl@0: { sl@0: if (destinationFileSize != (length+3*iWriteLength)) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return -1; sl@0: } sl@0: } sl@0: } sl@0: } sl@0: sl@0: HBufC8* destinationHBuf = HBufC8::NewLC(destinationFileSize); sl@0: TPtr8 destinationDes = destinationHBuf->Des(); sl@0: User::LeaveIfError(destinationFile.Read(destinationDes)); sl@0: sl@0: // Check that the file data matches. sl@0: err = Mem::Compare(destinationDes.Ptr(), destinationFileSize, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: { sl@0: // At least one of the remaining three writes was completed. sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[3]); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: if ((iPosition+iWriteLength)<=iCopyOfDestinationDes.Length()) sl@0: return EFail; sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: length = iPosition+iWriteLength; sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: err = Mem::Compare(destinationDes.Ptr(), destinationFileSize, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: { sl@0: iPosition += iWriteLength; sl@0: sl@0: buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[4]); sl@0: writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: if ((iPosition+iWriteLength)<=iCopyOfDestinationDes.Length()) sl@0: return EFail; sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: length = iPosition+iWriteLength; sl@0: sl@0: bufferData.Set(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: sl@0: err = Mem::Compare(destinationDes.Ptr(), destinationFileSize, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: { sl@0: iPosition += iWriteLength; sl@0: if ((iPosition+iWriteLength)<=iCopyOfDestinationDes.Length()) sl@0: return EFail; sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: length = iPosition+iWriteLength; sl@0: sl@0: buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[0]); sl@0: bufferData.Set(buffer->Data().Ptr(), iWriteLength); sl@0: sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: err = Mem::Compare(destinationDes.Ptr(), destinationFileSize, iCopyOfDestinationDes.Ptr(), length); sl@0: } sl@0: } sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(destinationHBuf); sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return err; sl@0: } sl@0: sl@0: TVerdict TFileWriteBufferTestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, clip->WriteBufferL(iWriteLength, iBuffer, iPosition, iSource)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: if ((err = dummySource->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: if ((iPosition+iWriteLength)>iCopyOfDestinationDes.Length()) sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, buffer->Data()); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileWriteBuffer2TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, clip->WriteBufferL(iBuffer, iPosition, iSource)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: if ((err = dummySource->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: if ((iPosition+iWriteLength)>iCopyOfDestinationDes.Length()) sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, buffer->Data()); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileWriteBuffer3TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink); sl@0: sl@0: RandomiseBuffer(); sl@0: clip->WriteBufferL(iBuffer, iPosition); sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: if ((iPosition+iWriteLength)>iCopyOfDestinationDes.Length()) sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: sl@0: iCopyOfDestinationDes.Replace(iPosition, buffer->BufferSize(), buffer->Data()); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileWriteBuffer4TestStep::DoTestStepL() sl@0: { sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: CMMFClip* clip = static_cast(CreateFileSinkL(iSinkType, fs, iFileName)); sl@0: CleanupDeletePushL(clip); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: User::LeaveIfError(clip->SinkThreadLogon(*dummySource)); sl@0: clip->SinkPrimeL(); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, clip->WriteBufferL(iWriteLength, iBuffer, iPosition, iSource)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: CleanupStack::PopAndDestroy(2, &fs); // clip, fs sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: if ((err = dummySource->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt writeLength = iWriteLength; sl@0: if (writeLength>buffer->Data().Length()) sl@0: writeLength = buffer->Data().Length(); sl@0: sl@0: TInt position = iPosition; sl@0: if (position>iCopyOfDestinationDes.Length()) sl@0: position = iCopyOfDestinationDes.Length(); sl@0: sl@0: if ((position+writeLength)>iCopyOfDestinationDes.Length()) sl@0: iCopyOfDestinationDes.SetLength(position+writeLength); sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(position, writeLength, bufferData); sl@0: return EPass; sl@0: } sl@0: sl@0: TInt TFileWriteBuffer5TestStep::CheckDestinationL() sl@0: { sl@0: TInt length = iCopyOfDestinationDes.Length(); sl@0: sl@0: // Read the file into a descriptor. sl@0: RFile destinationFile; sl@0: TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead | EFileShareAny); sl@0: CleanupClosePushL(destinationFile); sl@0: if (err != KErrNone) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: sl@0: if (err == KErrNotFound) sl@0: return (length != 0) ? -1 : 0; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: TInt destinationFileSize; sl@0: User::LeaveIfError(destinationFile.Size(destinationFileSize)); sl@0: sl@0: // Check that the file length is correct. sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: if (destinationFileSize != (length+(iWriteLength-buffer->Data().Length()))) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return -1; sl@0: } sl@0: sl@0: HBufC8* destinationHBuf = HBufC8::NewLC(destinationFileSize); sl@0: TPtr8 destinationDes = destinationHBuf->Des(); sl@0: User::LeaveIfError(destinationFile.Read(destinationDes)); sl@0: sl@0: // Check that the file data matches. sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: sl@0: // Copy the file. sl@0: iCopyOfDestinationDes.Copy(destinationDes); sl@0: sl@0: CleanupStack::PopAndDestroy(destinationHBuf); sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return err; sl@0: } sl@0: sl@0: TVerdict TFileWriteBuffer5TestStep::DoNegativeTestPostambleL() sl@0: { sl@0: TInt length = iCopyOfDestinationDes.Length(); sl@0: sl@0: // Read the file into a descriptor. sl@0: RFile destinationFile; sl@0: TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead); sl@0: CleanupClosePushL(destinationFile); sl@0: if (err != KErrNone) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: sl@0: if (err == KErrNotFound) sl@0: return (length == 0) ? EPass : EFail; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: TInt destinationFileSize; sl@0: User::LeaveIfError(destinationFile.Size(destinationFileSize)); sl@0: sl@0: // Check that the file length is correct. sl@0: if (destinationFileSize != length) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return EFail; sl@0: } sl@0: sl@0: HBufC8* destinationHBuf = HBufC8::NewLC(length); sl@0: TPtr8 destinationDes = destinationHBuf->Des(); sl@0: User::LeaveIfError(destinationFile.Read(destinationDes)); sl@0: sl@0: // Check that the file data matches. sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: sl@0: CleanupStack::PopAndDestroy(destinationHBuf); sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return (err == 0) ? EPass : EFail; sl@0: } sl@0: sl@0: TVerdict TFileWriteBuffer6TestStep::DoTestStepL() sl@0: { sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: CMMFClip* clip = static_cast(CreateFileSinkL(iSinkType, fs, iFileName)); sl@0: CleanupDeletePushL(clip); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: User::LeaveIfError(clip->SinkThreadLogon(*dummySource)); sl@0: clip->SinkPrimeL(); sl@0: sl@0: RandomiseBuffer(); sl@0: TRAPD(err, clip->WriteBufferL(iBuffer, iPosition, iSource)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: CleanupStack::PopAndDestroy(2, &fs); // clip, fs sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: if ((err = dummySource->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt position = iPosition; sl@0: TInt bufferSize = buffer->BufferSize(); sl@0: if (position>iCopyOfDestinationDes.Length()) sl@0: position = iCopyOfDestinationDes.Length(); sl@0: sl@0: if ((position+bufferSize)>iCopyOfDestinationDes.Length()) sl@0: iCopyOfDestinationDes.SetLength(position+bufferSize); sl@0: sl@0: iCopyOfDestinationDes.Replace(position, bufferSize, buffer->Data()); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileWriteBuffer7TestStep::DoTestStepL() sl@0: { sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: CMMFClip* clip = static_cast(CreateFileSinkL(iSinkType, fs, iFileName)); sl@0: CleanupDeletePushL(clip); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: User::LeaveIfError(clip->SinkThreadLogon(*dummySource)); sl@0: clip->SinkPrimeL(); sl@0: sl@0: RandomiseBuffer(); sl@0: clip->WriteBufferL(iBuffer, iPosition); sl@0: CleanupStack::PopAndDestroy(2, &fs); sl@0: sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt position = iPosition; sl@0: TInt bufferSize = buffer->BufferSize(); sl@0: if (position>iCopyOfDestinationDes.Length()) sl@0: position = iCopyOfDestinationDes.Length(); sl@0: sl@0: if ((position+bufferSize)>iCopyOfDestinationDes.Length()) sl@0: iCopyOfDestinationDes.SetLength(position+bufferSize); sl@0: sl@0: iCopyOfDestinationDes.Replace(position, bufferSize, buffer->Data()); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileWriteBuffer8TestStep::DoTestStepL() sl@0: { sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: CMMFClip* clip = static_cast(CreateFileSinkL(iSinkType, fs, iFileName)); sl@0: CleanupDeletePushL(clip); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: User::LeaveIfError(clip->SinkThreadLogon(*dummySource)); sl@0: clip->SinkPrimeL(); sl@0: sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: TInt maxRequestCount = Min(iMaxRequestCount, bufferArray.Count()); sl@0: iPosition = 0; sl@0: sl@0: TInt requestCount; sl@0: for (requestCount = 0; requestCount < maxRequestCount; requestCount++) sl@0: { sl@0: iBuffer = bufferArray[requestCount]; sl@0: RandomiseBuffer(); sl@0: sl@0: TRAPD(err, clip->WriteBufferL(iWriteLength, iBuffer, iPosition, iSource)); sl@0: if (err != KErrNone) sl@0: { sl@0: break; sl@0: } sl@0: sl@0: iPosition += iWriteLength; sl@0: } sl@0: sl@0: if (requestCount) sl@0: { sl@0: dummySource->SetExpectedEmptyCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(2, &fs); sl@0: sl@0: if (dummySource->ErrorCount()) sl@0: { sl@0: User::Leave(dummySource->Error()); sl@0: } sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if (!requestCount && sourceBufferEmptiedOk) sl@0: { sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = 0; sl@0: TInt completionCount; sl@0: for (completionCount = 0; completionCount < requestCount; completionCount++) sl@0: { sl@0: iBuffer = bufferArray[completionCount]; sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: { sl@0: return EFail; sl@0: } sl@0: sl@0: if ((iPosition + iWriteLength) > iCopyOfDestinationDes.Length()) sl@0: { sl@0: iCopyOfDestinationDes.SetLength(iPosition + iWriteLength); sl@0: } sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: iPosition += writeLength; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TFileWriteBuffer9TestStep::DoTestStepL() sl@0: { sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: CMMFClip* clip = static_cast(CreateFileSinkL(iSinkType, fs, iFileName)); sl@0: CleanupDeletePushL(clip); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: User::LeaveIfError(clip->SinkThreadLogon(*dummySource)); sl@0: clip->SinkPrimeL(); sl@0: sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: TInt maxRequestCount = Min(iMaxRequestCount, bufferArray.Count()); sl@0: iPosition = 0; sl@0: sl@0: TInt requestCount; sl@0: for (requestCount = 0; requestCount < maxRequestCount; requestCount++) sl@0: { sl@0: iBuffer = bufferArray[requestCount]; sl@0: RandomiseBuffer(); sl@0: sl@0: TRAPD(err, clip->WriteBufferL(iBuffer, iPosition, iSource)); sl@0: if (err != KErrNone) sl@0: { sl@0: break; sl@0: } sl@0: sl@0: iPosition += iWriteLength; sl@0: } sl@0: sl@0: if (requestCount) sl@0: { sl@0: dummySource->SetExpectedEmptyCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(2, &fs); sl@0: sl@0: if (dummySource->ErrorCount()) sl@0: { sl@0: User::LeaveIfError(dummySource->Error()); sl@0: } sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if (!requestCount && sourceBufferEmptiedOk) sl@0: { sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = 0; sl@0: TInt completionCount; sl@0: for (completionCount = 0; completionCount < requestCount; completionCount++) sl@0: { sl@0: iBuffer = bufferArray[completionCount]; sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: { sl@0: return EFail; sl@0: } sl@0: sl@0: if ((iPosition + iWriteLength) > iCopyOfDestinationDes.Length()) sl@0: { sl@0: iCopyOfDestinationDes.SetLength(iPosition + iWriteLength); sl@0: } sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: iPosition += iWriteLength; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TInt TFileWriteBuffer10TestStep::CheckDestinationL() sl@0: { sl@0: TInt length = iCopyOfDestinationDes.Length(); sl@0: sl@0: // Read the file into a descriptor. sl@0: RFile destinationFile; sl@0: TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead|EFileShareAny); sl@0: CleanupClosePushL(destinationFile); sl@0: if (err != KErrNone) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: sl@0: if (err == KErrNotFound) sl@0: return (length != 0) ? -1 : 0; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: TInt destinationFileSize; sl@0: User::LeaveIfError(destinationFile.Size(destinationFileSize)); sl@0: sl@0: // Check that the file length is correct. sl@0: if (destinationFileSize != length) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return -1; sl@0: } sl@0: sl@0: HBufC8* destinationHBuf = HBufC8::NewLC(length); sl@0: TPtr8 destinationDes = destinationHBuf->Des(); sl@0: User::LeaveIfError(destinationFile.Read(destinationDes)); sl@0: sl@0: // Check that the file data matches. sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: { sl@0: // At least one of the remaining two writes was completed. sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[3]); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: sl@0: if (err != 0) sl@0: { sl@0: iPosition += iWriteLength; sl@0: sl@0: buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[4]); sl@0: writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: bufferData.Set(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: } sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(destinationHBuf); sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: sl@0: return err; sl@0: } sl@0: sl@0: TInt TFileWriteBuffer11TestStep::CheckDestinationL() sl@0: { sl@0: TInt length = iCopyOfDestinationDes.Length(); sl@0: sl@0: // Read the file into a descriptor. sl@0: RFile destinationFile; sl@0: TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead | EFileShareAny); sl@0: CleanupClosePushL(destinationFile); sl@0: if (err != KErrNone) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: sl@0: if (err == KErrNotFound) sl@0: return (length != 0) ? -1 : 0; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: TInt destinationFileSize; sl@0: User::LeaveIfError(destinationFile.Size(destinationFileSize)); sl@0: sl@0: // Check that the file length is correct. sl@0: if (destinationFileSize != length) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return -1; sl@0: } sl@0: sl@0: HBufC8* destinationHBuf = HBufC8::NewLC(length); sl@0: TPtr8 destinationDes = destinationHBuf->Des(); sl@0: User::LeaveIfError(destinationFile.Read(destinationDes)); sl@0: sl@0: // Check that the file data matches. sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: { sl@0: // At least one of the remaining two writes was completed. sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[3]); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: sl@0: if (err != 0) sl@0: { sl@0: iPosition += iWriteLength; sl@0: sl@0: buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[4]); sl@0: writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: bufferData.Set(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: } sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(destinationHBuf); sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: sl@0: return err; sl@0: } sl@0: sl@0: TVerdict TFileWriteBuffer12TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink); sl@0: sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: TInt maxRequestCount = bufferArray.Count(); sl@0: TInt err = KErrNone; sl@0: iPosition = 0; sl@0: sl@0: TInt requestCount; sl@0: for (requestCount = 0 ; requestCountWriteBufferL(iWriteLength, iBuffer, iPosition, iSource)); sl@0: if (err != KErrNone) sl@0: break; sl@0: sl@0: iPosition += iWriteLength; sl@0: } sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: if (requestCount) sl@0: { sl@0: if (requestCount>iMaxRequestCount) sl@0: requestCount = iMaxRequestCount; sl@0: sl@0: dummySource->SetExpectedEmptyCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if (!requestCount && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (!sourceBufferEmptiedOk && requestCount) sl@0: { sl@0: requestCount-= dummySource->ErrorCount(); sl@0: err = dummySource->Error(); sl@0: sl@0: if (err == KErrNone) sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = 0; sl@0: TInt completionCount; sl@0: for (completionCount = 0 ; completionCountBufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: if ((iPosition+iWriteLength)>iCopyOfDestinationDes.Length()) sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: iPosition += iWriteLength; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: clip->WriteBufferL(iWriteLength, bufferArray[0], iPosition + 2*iWriteLength, iSource); sl@0: return EPass; sl@0: } sl@0: sl@0: TInt TFileWriteBuffer12TestStep::CheckDestinationL() sl@0: { sl@0: TInt length = iCopyOfDestinationDes.Length(); sl@0: sl@0: // Read the file into a descriptor. sl@0: RFile destinationFile; sl@0: TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead |EFileShareAny); sl@0: CleanupClosePushL(destinationFile); sl@0: if (err != KErrNone) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: sl@0: if (err == KErrNotFound) sl@0: return (length != 0) ? -1 : 0; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: TInt destinationFileSize; sl@0: User::LeaveIfError(destinationFile.Size(destinationFileSize)); sl@0: sl@0: // Check that the file length is correct. sl@0: if (destinationFileSize != length) sl@0: { sl@0: if (destinationFileSize != (length + iWriteLength)) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return -1; sl@0: } sl@0: } sl@0: sl@0: HBufC8* destinationHBuf = HBufC8::NewLC(destinationFileSize); sl@0: TPtr8 destinationDes = destinationHBuf->Des(); sl@0: User::LeaveIfError(destinationFile.Read(destinationDes)); sl@0: sl@0: // Check that the file data matches. sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: { sl@0: // At least one of the remaining three writes was completed. sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[3]); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: { sl@0: iPosition += iWriteLength; sl@0: sl@0: buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[4]); sl@0: writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: bufferData.Set(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: return EFail; sl@0: sl@0: iPosition += iWriteLength; sl@0: if ((iPosition+iWriteLength)<=iCopyOfDestinationDes.Length()) sl@0: return EFail; sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: length = iPosition+iWriteLength; sl@0: sl@0: buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[0]); sl@0: bufferData.Set(buffer->Data().Ptr(), iWriteLength); sl@0: sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: } sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(destinationHBuf); sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return err; sl@0: } sl@0: sl@0: TVerdict TFileWriteBuffer13TestStep::DoTestStepL() sl@0: { sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink); sl@0: sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: TInt maxRequestCount = bufferArray.Count(); sl@0: TInt err = KErrNone; sl@0: iPosition = 0; sl@0: sl@0: TInt requestCount; sl@0: for (requestCount = 0 ; requestCountWriteBufferL(iBuffer, iPosition, iSource)); sl@0: if (err != KErrNone) sl@0: break; sl@0: sl@0: iPosition += iWriteLength; sl@0: } sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: if (requestCount) sl@0: { sl@0: if (requestCount>iMaxRequestCount) sl@0: requestCount = iMaxRequestCount; sl@0: sl@0: dummySource->SetExpectedEmptyCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if (!requestCount && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (!sourceBufferEmptiedOk && requestCount) sl@0: { sl@0: requestCount-= dummySource->ErrorCount(); sl@0: err = dummySource->Error(); sl@0: sl@0: if (err == KErrNone) sl@0: return EFail; sl@0: } sl@0: sl@0: iPosition = 0; sl@0: TInt completionCount; sl@0: for (completionCount = 0 ; completionCountBufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: if ((iPosition+iWriteLength)>iCopyOfDestinationDes.Length()) sl@0: iCopyOfDestinationDes.SetLength(iPosition+iWriteLength); sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: sl@0: iPosition += iWriteLength; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: clip->WriteBufferL(bufferArray[0], iPosition + 2*iWriteLength, iSource); sl@0: return EPass; sl@0: } sl@0: sl@0: TInt TFileWriteBuffer13TestStep::CheckDestinationL() sl@0: { sl@0: TInt length = iCopyOfDestinationDes.Length(); sl@0: sl@0: // Read the file into a descriptor. sl@0: RFile destinationFile; sl@0: TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead | EFileShareAny); sl@0: CleanupClosePushL(destinationFile); sl@0: if (err != KErrNone) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: sl@0: if (err == KErrNotFound) sl@0: return (length != 0) ? -1 : 0; sl@0: sl@0: User::Leave(err); sl@0: } sl@0: sl@0: TInt destinationFileSize; sl@0: User::LeaveIfError(destinationFile.Size(destinationFileSize)); sl@0: sl@0: // Check that the file length is correct. sl@0: if (destinationFileSize != length) sl@0: { sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return -1; sl@0: } sl@0: sl@0: HBufC8* destinationHBuf = HBufC8::NewLC(destinationFileSize); sl@0: TPtr8 destinationDes = destinationHBuf->Des(); sl@0: User::LeaveIfError(destinationFile.Read(destinationDes)); sl@0: sl@0: // Check that the file data matches. sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: { sl@0: // At least one of the remaining three writes was completed. sl@0: RPointerArray& bufferArray = *iBufferArray; sl@0: CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[3]); sl@0: TInt writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: TPtrC8 bufferData(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: { sl@0: iPosition += iWriteLength; sl@0: sl@0: buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[4]); sl@0: writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: bufferData.Set(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: if (err != 0) sl@0: { sl@0: iPosition += iWriteLength; sl@0: sl@0: buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[0]); sl@0: writeLength = buffer->BufferSize(); sl@0: if (writeLength != iWriteLength) sl@0: return EFail; sl@0: sl@0: bufferData.Set(buffer->Data().Ptr(), writeLength); sl@0: iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData); sl@0: sl@0: err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length); sl@0: } sl@0: } sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(destinationHBuf); sl@0: CleanupStack::PopAndDestroy(&destinationFile); sl@0: return err; sl@0: } sl@0: sl@0: sl@0: TVerdict TAudioInputCreateSourceBuffer1TestStep::DoTestStepL() sl@0: { sl@0: CMMFAudioInput* source = STATIC_CAST(CMMFAudioInput*, iSource); sl@0: sl@0: TMediaId mediaId; sl@0: CMMFBuffer* buffer = source->CreateSourceBufferL(mediaId); sl@0: sl@0: TVerdict result = EPass; sl@0: if (buffer->Type() != KUidMmfDescriptorBuffer) sl@0: result = EFail; sl@0: sl@0: if (buffer->Status() != EAvailable) sl@0: result = EFail; sl@0: sl@0: CMMFDescriptorBuffer* descriptorBuffer = STATIC_CAST(CMMFDescriptorBuffer*, buffer); sl@0: if (descriptorBuffer->Data().MaxLength() != (TInt)KAudioInputDefaultFrameSize) sl@0: result = EFail; sl@0: sl@0: delete buffer; sl@0: return result; sl@0: } sl@0: sl@0: TVerdict TAudioInputCreateSourceBuffer2TestStep::DoTestStepL() sl@0: { sl@0: CMMFAudioInput* source = STATIC_CAST(CMMFAudioInput*, iSource); sl@0: sl@0: TMediaId mediaId; sl@0: CMMFBuffer* buffer = source->CreateSourceBufferL(mediaId, *iSinkBuffer); sl@0: sl@0: TVerdict result = EPass; sl@0: if (buffer->Type() != KUidMmfDescriptorBuffer) sl@0: result = EFail; sl@0: sl@0: if (buffer->Status() != EAvailable) sl@0: result = EFail; sl@0: sl@0: CMMFDescriptorBuffer* descriptorBuffer = STATIC_CAST(CMMFDescriptorBuffer*, buffer); sl@0: if (descriptorBuffer->Data().MaxLength() != (TInt)KAudioInputDefaultFrameSize) sl@0: result = EFail; sl@0: sl@0: delete buffer; sl@0: return result; sl@0: } sl@0: sl@0: TVerdict TAudioInputFillBufferTestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: TRAPD(err, iSource->FillBufferL(iBuffer, iSink, mediaId)); // first call inits sl@0: sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: TRAP(err, iSource->FillBufferL(iBuffer, iSink, mediaId)); sl@0: sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TAudioInputFillBuffer2TestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: TRAPD(err, iSource->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: TRAP(err, iSource->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: TRAP(err, iSource->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TAudioInputFillBuffer3TestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: TInt requestCount = 0; sl@0: TRAPD(err, iSource->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: { sl@0: requestCount++; sl@0: TRAP(err, iSource->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: { sl@0: requestCount++; sl@0: TRAP(err, iSource->FillBufferL(iBuffer, iSink, mediaId)); sl@0: } sl@0: } sl@0: sl@0: if (err == KErrNone) sl@0: requestCount++; sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: if (requestCount) sl@0: { sl@0: dummySink->SetExpectedFillCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TAudioInputFillBuffer4TestStep::DoTestStepL() sl@0: { sl@0: TBuf8<1> configDes; sl@0: MDataSource* source = STATIC_CAST(MDataSource*, MDataSource::NewSourceL(KUidMmfAudioInput, configDes)); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->NegotiateSourceL(*dummySink); sl@0: source->SourcePrimeL(); sl@0: sl@0: TMediaId mediaId; sl@0: TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TAudioInputFillBuffer5TestStep::DoTestStepL() sl@0: { sl@0: TBuf8<1> configDes; sl@0: MDataSource* source = STATIC_CAST(MDataSource*, MDataSource::NewSourceL(KUidMmfAudioInput, configDes)); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->NegotiateSourceL(*dummySink); sl@0: source->SourcePrimeL(); sl@0: sl@0: TMediaId mediaId; sl@0: TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EFail; sl@0: } sl@0: sl@0: TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EFail; sl@0: } sl@0: sl@0: TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TAudioInputFillBuffer6TestStep::DoTestStepL() sl@0: { sl@0: TBuf8<1> configDes; sl@0: MDataSource* source = STATIC_CAST(MDataSource*, MDataSource::NewSourceL(KUidMmfAudioInput, configDes)); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->NegotiateSourceL(*dummySink); sl@0: source->SourcePrimeL(); sl@0: sl@0: TMediaId mediaId; sl@0: TInt requestCount = 0; sl@0: TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: { sl@0: requestCount++; sl@0: TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: { sl@0: requestCount++; sl@0: TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: } sl@0: } sl@0: sl@0: if (err == KErrNone) sl@0: requestCount++; sl@0: sl@0: if (requestCount) sl@0: { sl@0: dummySink->SetExpectedFillCount(requestCount); sl@0: CActiveScheduler::Start(); sl@0: } sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TAudioInputFillBuffer7TestStep::DoTestStepL() sl@0: { sl@0: TBuf8<1> configDes; sl@0: MDataSource* source = STATIC_CAST(MDataSource*, MDataSource::NewSourceL(KUidMmfAudioInput, configDes)); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->NegotiateSourceL(*dummySink); sl@0: source->SourcePrimeL(); sl@0: sl@0: TMediaId mediaId; sl@0: TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EFail; sl@0: } sl@0: sl@0: source->SourcePauseL(); sl@0: source->FillBufferL(iBuffer, iSink, mediaId); // this call just inits devsound sl@0: //DevSound WP source is active cannot dictate what buffers to fill sl@0: // source->FillBufferL(iBuffer, iSink, mediaId); // this call should leave with KErrNotReady sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TAudioInputFillBuffer8TestStep::DoTestStepL() sl@0: { sl@0: TBuf8<1> configDes; sl@0: MDataSource* source = STATIC_CAST(MDataSource*, MDataSource::NewSourceL(KUidMmfAudioInput, configDes)); sl@0: CleanupDeletePushL(source); sl@0: sl@0: CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->NegotiateSourceL(*dummySink); sl@0: source->SourcePrimeL(); sl@0: sl@0: TMediaId mediaId; sl@0: TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: TBool sinkBufferFilledOk = dummySink->BufferFilledOk(); sl@0: if ((err != KErrNone) && sinkBufferFilledOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sinkBufferFilledOk) sl@0: { sl@0: if ((err = dummySink->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EFail; sl@0: } sl@0: sl@0: source->SourceStopL(); sl@0: source->FillBufferL(iBuffer, iSink, mediaId); // this call just inits devsound sl@0: source->FillBufferL(iBuffer, iSink, mediaId); // this call should leave with KErrNotReady sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: return EPass; sl@0: } sl@0: sl@0: sl@0: TVerdict TAudioOutputEmptyBufferTestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: iSink->SinkPlayL(); sl@0: sl@0: TRAPD(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: sl@0: if ((err == KErrNone) && iAsynchronousWrite) sl@0: CActiveScheduler::Start(); sl@0: sl@0: iSink->SinkStopL(); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: if ((err = dummySource->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TAudioOutputEmptyBuffer2TestStep::DoTestStepL() sl@0: { sl@0: TMediaId mediaId; sl@0: iSink->SinkPlayL(); sl@0: sl@0: TRAPD(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: if ((err == KErrNone) && iAsynchronousWrite) sl@0: CActiveScheduler::Start(); sl@0: sl@0: iSink->SinkStopL(); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: iSink->SinkStopL(); sl@0: User::Leave(err); sl@0: } sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: if ((err = dummySource->Error()) != KErrNone) sl@0: { sl@0: iSink->SinkStopL(); sl@0: User::Leave(err); sl@0: } sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: iSink->SinkPlayL(); sl@0: sl@0: TRAP(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: if ((err == KErrNone) && iAsynchronousWrite) sl@0: CActiveScheduler::Start(); sl@0: sl@0: iSink->SinkStopL(); sl@0: sl@0: sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: iSink->SinkStopL(); sl@0: User::Leave(err); sl@0: } sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: if ((err = dummySource->Error()) != KErrNone) sl@0: { sl@0: iSink->SinkStopL(); sl@0: User::Leave(err); sl@0: } sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: iSink->SinkPlayL(); sl@0: sl@0: TRAP(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: if ((err == KErrNone) && iAsynchronousWrite) sl@0: CActiveScheduler::Start(); sl@0: sl@0: iSink->SinkStopL(); sl@0: sl@0: sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: if ((err = dummySource->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: return EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TAudioOutputEmptyBuffer3TestStep::DoTestStepL() sl@0: { sl@0: // Fill in! sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TAudioOutputEmptyBuffer4TestStep::DoTestStepL() sl@0: { sl@0: TBuf8<1> configDes; sl@0: MDataSink* sink = STATIC_CAST(MDataSink*, MDataSink::NewSinkL(KUidMmfAudioOutput, configDes)); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: sl@0: //DevSound WP Logon must come before Prime sl@0: User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sink->SinkPrimeL(); sl@0: //DevSound WP User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sl@0: sink->NegotiateL(iRealFormat); sl@0: sl@0: TMediaId mediaId; sl@0: sink->SinkPlayL(); sl@0: TRAPD(err, sink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: CActiveScheduler::Start(); sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: return EFail; sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: {//DevSound WP because the active scheduler can leave sl@0: //we cannot assume that the source buffer has been emptied ok in the alloc test sl@0: // if ((err = dummySource->Error()) != KErrNone) sl@0: // User::Leave(err); sl@0: sl@0: // return EFail; sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict TAudioOutputEmptyBuffer5TestStep::DoTestStepL() sl@0: { sl@0: TBuf8<1> configDes; sl@0: MDataSink* sink = STATIC_CAST(MDataSink*, MDataSink::NewSinkL(KUidMmfAudioOutput, configDes)); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource); sl@0: sl@0: //DevSound WP Logon must come before Prime sl@0: User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sink->SinkPrimeL(); sl@0: //DevSound WP User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sl@0: sink->NegotiateL(iRealFormat); sl@0: sink->SinkPlayL(); sl@0: sl@0: TMediaId mediaId; sl@0: TRAPD(err, sink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: sl@0: CActiveScheduler::Start(); sl@0: sl@0: TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(sink); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: /* DevSound WP may not be emptied ok if OOM in AS sl@0: if ((err = dummySource->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: return EFail; sl@0: */ sl@0: } sl@0: sl@0: dummySource->SetActiveScheduler(); sl@0: TRAP(err, sink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(sink); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: if ((err = dummySource->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: return EFail; sl@0: } sl@0: sl@0: TRAP(err, sink->EmptyBufferL(iBuffer, iSource, mediaId)); sl@0: if (err == KErrNone) sl@0: CActiveScheduler::Start(); sl@0: sl@0: sourceBufferEmptiedOk = dummySource->BufferEmptiedOk(); sl@0: if ((err != KErrNone) && sourceBufferEmptiedOk) sl@0: { sl@0: CleanupStack::PopAndDestroy(sink); sl@0: return EFail; sl@0: } sl@0: sl@0: if (err != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: if (!sourceBufferEmptiedOk) sl@0: { sl@0: if ((err = dummySource->Error()) != KErrNone) sl@0: User::Leave(err); sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: return EPass; sl@0: } sl@0: sl@0: sl@0: //_LIT(KTest301CopyFileName, "c:\\mm\\mmf\\testfiles\\srssnk\\CopyOfMMFTestFile1.dat"); // EABI warning removal sl@0: _LIT(KTest301FileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile1.wav"); sl@0: sl@0: TVerdict TPrimeStopTestStep::DoTestStepL() sl@0: { sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest301FileName; sl@0: MDataSource* source = MDataSource::NewSourceL(KUidMmfFileSource, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: TUid KWavReadUid = { KMmfUidFormatWAVRead }; sl@0: CMMFFormatDecode* format = CMMFFormatDecode::NewL(KWavReadUid, source); sl@0: CleanupStack::PushL(format); sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Prime sl@0: TRAPD(err, format->SourcePrimeL()); sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: format->SourcePrimeL(); sl@0: } sl@0: sl@0: // This will leave during alloc fail test sl@0: TAny* randomAlloc = User::AllocL(10); sl@0: User::Free(randomAlloc); sl@0: sl@0: CleanupStack::PopAndDestroy(scheduler); sl@0: CleanupStack::PopAndDestroy(format); sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: sl@0: _LIT(KTest302FileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile1.wav"); sl@0: sl@0: TVerdict TPrimeStopSinkTestStep::DoTestStepL() sl@0: { sl@0: // Create a new sink. sl@0: TBuf8<1> dummyConfigDes; sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, dummyConfigDes); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: // Create a real source. sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest302FileName; sl@0: MDataSource* source = MDataSource::NewSourceL(KUidMmfFileSource, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: TUid KWavReadUid = { KMmfUidFormatWAVRead }; sl@0: CMMFFormatDecode* format = CMMFFormatDecode::NewL(KWavReadUid, source); sl@0: CleanupStack::PushL(format); sl@0: sl@0: CMMFWavFormatRead* realFormat = static_cast(format); sl@0: User::LeaveIfError(sink->SinkThreadLogon(*realFormat)); sl@0: sink->NegotiateL(*format); sl@0: sl@0: TRAPD(err, sink->SinkPrimeL()); sl@0: if (err != KErrNone) sl@0: { sl@0: sink->SinkPrimeL(); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(format); sl@0: CleanupStack::PopAndDestroy(source); sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStepSelfTest constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK::CTestStep_MMF_SRSSNK(TBool aIsAllocTest) sl@0: : iTestResult(EPass), iIsAllocTest(aIsAllocTest) sl@0: { sl@0: iHeapSize = 1048576; // 1M sl@0: sl@0: RFs theFs; sl@0: if (theFs.Connect() == KErrNone) sl@0: { sl@0: if (theFs.SetErrorCondition(KErrNone) == KErrNone) sl@0: iFileFailureTestingEnabled = ETrue; sl@0: sl@0: theFs.Close(); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStepSelfTest destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK::~CTestStep_MMF_SRSSNK() sl@0: { sl@0: } sl@0: sl@0: void CTestStep_MMF_SRSSNK::DoTest(TTestStep& aTestStep, TPtrC aTestDescription, TInt aExpectedTestResult, TInt aHeapCellCount) sl@0: { sl@0: DoTestStep(aTestStep, aTestDescription, aExpectedTestResult, aHeapCellCount); sl@0: DoTestStepWithAllocFail(aTestStep, aTestDescription, aExpectedTestResult, aHeapCellCount); sl@0: } sl@0: sl@0: void CTestStep_MMF_SRSSNK::DoFileTest(TFileTestStep& aTestStep, TPtrC aTestDescription, TInt aExpectedTestResult) sl@0: { sl@0: DoTestStep(aTestStep, aTestDescription, aExpectedTestResult); sl@0: DoTestStepWithAllocFail(aTestStep, aTestDescription, aExpectedTestResult); sl@0: sl@0: DoTestStepWithFileFail(aTestStep, aTestDescription, aExpectedTestResult); sl@0: sl@0: // The test below is no longer run. Running it will cause an ASSERT. sl@0: //DoTestStepWithAllocAndFileFail(aTestStep, aTestDescription, aExpectedTestResult); sl@0: } sl@0: sl@0: void CTestStep_MMF_SRSSNK::DoFileTestWithoutAllocFail(TFileTestStep& aTestStep, TPtrC aTestDescription, TInt aExpectedTestResult, TInt aHeapCellCount) sl@0: { sl@0: DoTestStep(aTestStep, aTestDescription, aExpectedTestResult, aHeapCellCount); sl@0: DoTestStepWithFileFail(aTestStep, aTestDescription, aExpectedTestResult, aHeapCellCount); sl@0: } sl@0: sl@0: void CTestStep_MMF_SRSSNK::DoTestStep(TTestStep& aTestStep, TPtrC aTestDescription, TInt aExpectedTestResult, TInt /*__REQUIREDFORDEBUG(aHeapCellCount)*/) sl@0: { sl@0: TVerdict verdict = EPass; sl@0: sl@0: TRAPD(preErr, aTestStep.DoTestPreambleL()); sl@0: sl@0: if (preErr != KErrNone) sl@0: { sl@0: INFO_PRINTF3(_L("%S: Test pre amble failed %d\n"), &aTestDescription, preErr); sl@0: iTestResult = EFail; sl@0: return; sl@0: } sl@0: sl@0: TRAPD(leaveErr, verdict = aTestStep.DoTestStepL()); sl@0: sl@0: if (verdict == EPass) sl@0: { sl@0: if (leaveErr != aExpectedTestResult) sl@0: { sl@0: INFO_PRINTF3(_L("DoTestStep failed: leaveErr (%d) != expected (%d)"), leaveErr, aExpectedTestResult); sl@0: verdict = EFail; sl@0: } sl@0: else if (leaveErr == KErrNone) sl@0: { sl@0: TRAPD(postErr, verdict = aTestStep.DoTestPostambleL(ETrue)); sl@0: if (postErr != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("DoTestStep failed: postErr (%d)"), postErr); sl@0: verdict = EInconclusive; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: TRAPD(postErr, verdict = aTestStep.DoNegativeTestPostambleL()); sl@0: if (postErr != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("DoTestStep failed: postErr (%d)"), postErr); sl@0: verdict = EInconclusive; sl@0: } sl@0: } sl@0: } sl@0: sl@0: if (verdict != EPass) sl@0: { sl@0: INFO_PRINTF3(_L("%S: Test verdict = %d\n"), &aTestDescription, verdict); sl@0: INFO_PRINTF4(_L("%S: Expecting %d, actually got %d\n"), &aTestDescription, aExpectedTestResult, leaveErr); sl@0: iTestResult = verdict; sl@0: } sl@0: } sl@0: sl@0: void CTestStep_MMF_SRSSNK::DoTestStepWithAllocFail(TTestStep& aTestStep, TPtrC aTestDescription, TInt aExpectedResult, TInt /*__REQUIREDFORDEBUG(aHeapCellCount)*/) sl@0: { sl@0: TInt err; sl@0: TInt postErr; sl@0: TInt failPoint = 0; sl@0: TBool finished = EFalse; sl@0: TVerdict verdict; sl@0: TVerdict postVerdict; sl@0: sl@0: iTestResult = EFail; sl@0: do sl@0: { sl@0: // Do the preamble. sl@0: TRAP(err, aTestStep.DoTestPreambleL()); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("%S preamble failed"), &aTestDescription); sl@0: TRAP_IGNORE(aTestStep.DoNegativeTestPostambleL()); sl@0: return; sl@0: } sl@0: sl@0: // Do the test step. sl@0: failPoint = failPoint + 1; // doing 'failPoint++' causes a compiler warning on ARMV5 UREL. sl@0: __UHEAP_SETFAIL(RHeap::EFailNext, failPoint); sl@0: verdict = EFail; sl@0: TRAP(err, verdict = aTestStep.DoTestStepL()); sl@0: sl@0: TAny* ptr = User::Alloc(1); sl@0: finished = (ptr == NULL); sl@0: User::Free(ptr); sl@0: __UHEAP_RESET; sl@0: sl@0: // Do the postamble. sl@0: postVerdict = EFail; sl@0: if (err == KErrNone) sl@0: { sl@0: TRAP(postErr, postVerdict = aTestStep.DoTestPostambleL(ETrue)); sl@0: } sl@0: else sl@0: { sl@0: TRAP(postErr, postVerdict = aTestStep.DoNegativeTestPostambleL()); sl@0: } sl@0: sl@0: // Check postamble results. sl@0: if ((postErr != KErrNone) && (postVerdict != EPass)) sl@0: { sl@0: INFO_PRINTF3(_L("Postamble failed: %d (postVerdict = %d)"), postErr, postVerdict); sl@0: return; sl@0: } sl@0: } sl@0: while (!finished); sl@0: sl@0: // Check we got the expected result. sl@0: if ((aExpectedResult == KErrNone) && (verdict != EPass)) sl@0: { sl@0: INFO_PRINTF2(_L("TestStep failed: %d"), verdict); sl@0: return; sl@0: } sl@0: sl@0: iTestResult = (err == aExpectedResult ? EPass : EFail); sl@0: } sl@0: sl@0: void CTestStep_MMF_SRSSNK::DoTestStepWithFileFail(TFileTestStep& aTestStep, TPtrC /*aTestDescription*/, TInt aExpectedResult, TInt /*__REQUIREDFORDEBUG(aHeapCellCount)*/) sl@0: { sl@0: RFs fs; sl@0: TInt err; sl@0: TInt postErr; sl@0: TBool isExpectedResult; sl@0: TVerdict verdict; sl@0: TVerdict postVerdict = EPass; sl@0: sl@0: iTestResult = EPass; sl@0: if (!iFileFailureTestingEnabled) sl@0: { sl@0: return; sl@0: } sl@0: sl@0: err = fs.Connect(); sl@0: if (err != KErrNone) sl@0: { sl@0: User::Panic(_L("SRSSNK Test"), err); sl@0: } sl@0: sl@0: aTestStep.iFileFailureExpected = ETrue; sl@0: sl@0: // Once Base's DEF103757 has been submitted to the MCL sl@0: // the counter 'failAt' should be set to zero. sl@0: // DP roms need to have this number set higher due to the sl@0: // additional paging operations done by RFs. sl@0: TInt failAt = 15; sl@0: do sl@0: { sl@0: // Do the preamble. sl@0: TRAP(err, aTestStep.DoTestPreambleL()); sl@0: if (err != KErrNone) sl@0: { sl@0: iTestStepResult = EInconclusive; sl@0: fs.Close(); sl@0: return; sl@0: } sl@0: sl@0: // Set the file failure point. sl@0: fs.SetErrorCondition(KErrFileFail, failAt++); sl@0: verdict = EFail; sl@0: TRAP(err, verdict = aTestStep.DoTestStepL()); sl@0: fs.SetErrorCondition(KErrNone); sl@0: sl@0: isExpectedResult = (err == aExpectedResult); sl@0: sl@0: postVerdict = EFail; sl@0: if (err == KErrNone) sl@0: { sl@0: TRAP(postErr, postVerdict = aTestStep.DoTestPostambleL(ETrue)); sl@0: } sl@0: else sl@0: { sl@0: TRAP(postErr, postVerdict = aTestStep.DoNegativeTestPostambleL()); sl@0: } sl@0: } sl@0: while (err == KErrFileFail); sl@0: sl@0: fs.Close(); sl@0: sl@0: // Decide the test result. sl@0: if ((postErr != KErrNone) || (postVerdict != EPass)) sl@0: { sl@0: iTestResult = postVerdict; sl@0: return; sl@0: } sl@0: sl@0: // If there's an expected failure, verdict will be EFail. sl@0: // This doesn't mean the test has failed. sl@0: if ((aExpectedResult == KErrNone) && (verdict != EPass)) sl@0: { sl@0: iTestResult = verdict; sl@0: return; sl@0: } sl@0: sl@0: iTestResult = (isExpectedResult ? EPass : EFail); sl@0: } sl@0: sl@0: // sl@0: // The test is no longer run as its correctness is not proven. sl@0: // It is kept for reference purposes. sl@0: // sl@0: void CTestStep_MMF_SRSSNK::DoTestStepWithAllocAndFileFail(TFileTestStep& aTestStep, TPtrC aTestDescription, TInt aExpectedResult) sl@0: { sl@0: ASSERT(0); // Don't run this test. sl@0: sl@0: if (!iFileFailureTestingEnabled) sl@0: return; sl@0: sl@0: RFs theFs; sl@0: TInt leaveErr = theFs.Connect(); sl@0: if (leaveErr != KErrNone) sl@0: User::Panic(_L("SRSSNK Test"), 0); sl@0: sl@0: aTestStep.iFileFailureExpected = ETrue; sl@0: TVerdict verdict = EPass; sl@0: TBool allocTestingComplete; sl@0: for (TInt failAt = 1, fileFailAt = KStartFileFailAt ; ; failAt++) sl@0: { sl@0: for (; ; fileFailAt++) sl@0: { sl@0: TRAPD(preErr, aTestStep.DoTestPreambleL()); sl@0: if (preErr != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("%S: Test pre amble failed\n"), &aTestDescription); sl@0: iTestResult = EFail; sl@0: return; sl@0: } sl@0: sl@0: __UHEAP_SETFAIL(RHeap::EFailNext, failAt); // Leavescan will complain about this, although it isn't a leaving function sl@0: theFs.SetErrorCondition(KErrFileFail, fileFailAt); sl@0: TRAP(leaveErr, verdict = aTestStep.DoTestStepL()); sl@0: theFs.SetErrorCondition(KErrNone); sl@0: sl@0: TAny* testAlloc = User::Alloc(1); sl@0: allocTestingComplete = (testAlloc == NULL); sl@0: User::Free(testAlloc); sl@0: __UHEAP_SETFAIL(RHeap::ENone, 0); sl@0: sl@0: if (verdict == EPass) sl@0: { sl@0: if ((leaveErr != aExpectedResult) && (leaveErr != KErrFileFail) && (leaveErr != KErrNoMemory)) sl@0: verdict = EFail; sl@0: else if (leaveErr == KErrNone) sl@0: { sl@0: TRAPD(postErr, verdict = aTestStep.DoTestPostambleL(ETrue)); sl@0: if (postErr != KErrNone) sl@0: verdict = EInconclusive; sl@0: } sl@0: else sl@0: { sl@0: // ignore the verdict from DoNegativeTestPostambleL() sl@0: // since the main test has failed it's likely to fail too sl@0: TRAPD(postErr, aTestStep.DoNegativeTestPostambleL()); sl@0: if (postErr != KErrNone) sl@0: verdict = EInconclusive; sl@0: } sl@0: } sl@0: sl@0: if (verdict != EPass) sl@0: { sl@0: INFO_PRINTF3(_L("%S + alloc+file fail: Test verdict = %d\n"), &aTestDescription, verdict); sl@0: INFO_PRINTF4(_L("%S + alloc+file fail: Expecting %d, actually got %d"), &aTestDescription, aExpectedResult, leaveErr); sl@0: sl@0: iTestResult = verdict; sl@0: break; sl@0: } sl@0: sl@0: if ((leaveErr == aExpectedResult) || (leaveErr == KErrNoMemory)) sl@0: break; sl@0: } sl@0: sl@0: if (verdict == EPass) sl@0: { sl@0: if (allocTestingComplete) sl@0: { sl@0: if (leaveErr != aExpectedResult) sl@0: { sl@0: INFO_PRINTF3(_L("%S + alloc fail: Test verdict = %d\n"), &aTestDescription, EFail); sl@0: INFO_PRINTF4(_L("%S + alloc fail: Expecting %d, actually got %d"), &aTestDescription, aExpectedResult, leaveErr); sl@0: sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: break; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: // added 17/01/03 - prevents looping on EFail sl@0: iTestResult = verdict; sl@0: break; sl@0: } sl@0: } sl@0: aTestStep.iFileFailureExpected = EFalse; sl@0: theFs.Close(); sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK::OpenL() sl@0: { sl@0: if (iIsAllocTest) sl@0: { sl@0: // see if alloc fail stuff is enabled - ask if next alloc test will fail sl@0: __UHEAP_SETFAIL(RHeap::EFailNext, 1); sl@0: TAny *testAlloc = User::Alloc(1); sl@0: TBool workingOk = testAlloc == NULL; sl@0: User::Free(testAlloc); sl@0: __UHEAP_SETFAIL(RHeap::ENone ,0); sl@0: sl@0: if (!workingOk) sl@0: { sl@0: ERR_PRINTF1(_L("Alloc Testing does not work on this build")); sl@0: return EInconclusive; sl@0: } sl@0: } sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: void CTestStep_MMF_SRSSNK::CopyFileL(RFs& aFs, const TDesC& aOld, const TDesC& aNew) sl@0: { sl@0: CFileMan* fileMan = CFileMan::NewL(aFs); sl@0: CleanupStack::PushL(fileMan); sl@0: User::LeaveIfError(fileMan->Copy(aOld, aNew)); sl@0: CleanupStack::PopAndDestroy(fileMan); sl@0: } sl@0: sl@0: void CTestStep_MMF_SRSSNK::OpenFileL(const TDesC& aFileName, TInt aMode, TBool aShareProtected) sl@0: { sl@0: User::LeaveIfError(iFs.Connect()); sl@0: sl@0: if (aShareProtected) sl@0: { sl@0: User::LeaveIfError(iFs.ShareProtected()); sl@0: } sl@0: sl@0: User::LeaveIfError(iFile.Open(iFs, aFileName, aMode)); sl@0: } sl@0: sl@0: sl@0: sl@0: void CTestStep_MMF_SRSSNK::CloseFile() sl@0: { sl@0: iFile.Close(); sl@0: iFs.Close(); sl@0: } sl@0: sl@0: void CTestStep_MMF_SRSSNK::DeleteFileSinkL(TSinkType aSinkType, RFs& aFs, TDesC& aFileName) sl@0: { sl@0: // Delete the test file. sl@0: CMMFClip* sink = static_cast (CreateFileSinkL(aSinkType, aFs, aFileName)); sl@0: sl@0: CleanupStack::PushL(sink); sl@0: TInt err = sink->Delete(); sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: // can't use Delete from File Sink itself - when using file handles, must delete it once file is closed sl@0: if (aSinkType == ESinkTypeFileHandle) sl@0: { sl@0: err = aFs.Delete(aFileName); sl@0: } sl@0: sl@0: if (err != KErrNone && err != KErrNotFound) sl@0: { sl@0: INFO_PRINTF2(_L("Error deleting file sink %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: } sl@0: sl@0: // Test support classes sl@0: CMMFDummySource::CMMFDummySource() sl@0: : MDataSource(KTestDummyUid), iExpectedEmptyCount(1), iActiveScheduler(CActiveScheduler::Current()), iFillBuffer(EFalse) sl@0: { sl@0: } sl@0: sl@0: TFourCC CMMFDummySource::SourceDataTypeCode(TMediaId /*aMediaId*/) sl@0: { sl@0: User::Panic(_L("SRSSNK Test"), 0); sl@0: return iSourceDataTypeCode; sl@0: } sl@0: sl@0: void CMMFDummySource::FillBufferL(CMMFBuffer* /*aBuffer*/ , MDataSink* /*aConsumer*/, TMediaId /*aMediaId*/) sl@0: { sl@0: User::Panic(_L("SRSSNK Test"), 0); sl@0: } sl@0: sl@0: void CMMFDummySource::BufferEmptiedL(CMMFBuffer* aBuffer) sl@0: { sl@0: iEmptyCount++; sl@0: if (iEmptyCount == iExpectedEmptyCount) sl@0: iBufferEmptiedOk = ETrue; sl@0: sl@0: if ((iActiveScheduler != NULL) && iBufferEmptiedOk) sl@0: CActiveScheduler::Stop(); sl@0: sl@0: if (iFillBuffer) sl@0: { sl@0: CMMFDataBuffer* dataBuffer = STATIC_CAST(CMMFDataBuffer*, aBuffer); sl@0: dataBuffer->Data().SetLength(KTestWriteSize); sl@0: } sl@0: sl@0: iBuffer = aBuffer; // save for test 208 sl@0: } sl@0: sl@0: TInt CMMFDummySource::SendEventToClient(const TMMFEvent& aEvent) sl@0: { sl@0: if (aEvent.iErrorCode == KErrCancel) // Ignore stop. sl@0: { sl@0: return 0; sl@0: } sl@0: sl@0: //DevSound WP active scheduler should also be stopped for OOM error sl@0: //since OOM can occur during active scheduler sl@0: if ((iActiveScheduler != NULL) && (aEvent.iErrorCode == KErrNoMemory)) sl@0: { sl@0: iError = aEvent.iErrorCode; sl@0: CActiveScheduler::Stop(); sl@0: return 0; sl@0: } sl@0: sl@0: iError = aEvent.iErrorCode; sl@0: iErrorCount++; sl@0: sl@0: iEmptyCount++; sl@0: if ((iActiveScheduler != NULL) && (iEmptyCount == iExpectedEmptyCount)) sl@0: CActiveScheduler::Stop(); sl@0: sl@0: return 0; sl@0: } sl@0: sl@0: TBool CMMFDummySource::CanCreateSourceBuffer() sl@0: { sl@0: User::Panic(_L("SRSSNK Test"), 0); sl@0: return EFalse; sl@0: } sl@0: sl@0: CMMFBuffer* CMMFDummySource::CreateSourceBufferL(TMediaId /*aMediaId*/, TBool& /*aReference*/) sl@0: { sl@0: User::Panic(_L("SRSSNK Test"), 0); sl@0: return NULL; sl@0: } sl@0: sl@0: void CMMFDummySource::ConstructSourceL(const TDesC8& /*aInitData*/) sl@0: { sl@0: User::Panic(_L("SRSSNK Test"), 0); sl@0: } sl@0: sl@0: sl@0: CMMFDummySink::CMMFDummySink() sl@0: : MDataSink(KTestDummyUid), iExpectedFillCount(1), iActiveScheduler(CActiveScheduler::Current()) sl@0: { sl@0: } sl@0: sl@0: TFourCC CMMFDummySink::SinkDataTypeCode(TMediaId /*aMediaId*/) sl@0: { sl@0: User::Panic(_L("SRSSNK Test"), 0); sl@0: return iSinkDataTypeCode; sl@0: } sl@0: sl@0: void CMMFDummySink::EmptyBufferL(CMMFBuffer* /*aBuffer*/ , MDataSource* /*aSupplier*/, TMediaId /*aMediaId*/) sl@0: { sl@0: User::Panic(_L("SRSSNK Test"), 0); sl@0: } sl@0: sl@0: void CMMFDummySink::BufferFilledL(CMMFBuffer* aBuffer) sl@0: { sl@0: iBuffer = aBuffer; sl@0: sl@0: iFillCount++; sl@0: if (iFillCount == iExpectedFillCount) sl@0: iBufferFilledOk = ETrue; sl@0: sl@0: if ((iActiveScheduler != NULL) && iBufferFilledOk) sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: sl@0: TInt CMMFDummySink::SendEventToClient(const TMMFEvent& aEvent) sl@0: { sl@0: iError = aEvent.iErrorCode; sl@0: iErrorCount++; sl@0: sl@0: iFillCount++; sl@0: if ((iActiveScheduler != NULL) && (iFillCount == iExpectedFillCount)) sl@0: CActiveScheduler::Stop(); sl@0: sl@0: return 0; sl@0: } sl@0: sl@0: TBool CMMFDummySink::CanCreateSinkBuffer() sl@0: { sl@0: User::Panic(_L("SRSSNK Test"), 0); sl@0: return EFalse; sl@0: } sl@0: sl@0: CMMFBuffer* CMMFDummySink::CreateSinkBufferL(TMediaId /*aMediaId*/, TBool& /*aReference*/) sl@0: { sl@0: User::Panic(_L("SRSSNK Test"), 0); sl@0: return NULL; sl@0: } sl@0: sl@0: void CMMFDummySink::ConstructSinkL(const TDesC8& /*aInitData*/) sl@0: { sl@0: User::Panic(_L("SRSSNK Test"), 0); sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0001 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0001::CTestStep_MMF_SRSSNK_U_0001() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0001"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0001 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0001::~CTestStep_MMF_SRSSNK_U_0001() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0001 sl@0: * sl@0: * Test creation/destruction of descriptor source. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0001::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Create the actual descriptor source buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Set it's length. sl@0: dataPtr.SetLength(KTestBufferSize); sl@0: sl@0: // Initialise the config data. sl@0: TMMFDescriptorConfig configDes; sl@0: configDes().iDes = &dataPtr; sl@0: configDes().iDesThreadId = RThread().Id(); sl@0: sl@0: // Attempt to create a new descriptor source. sl@0: // Use a valid uid and configuration descriptor. sl@0: // The test should be successful. sl@0: TNewSourceTestStep testStep(KUidMmfDescriptorSource, configDes); sl@0: DoTest(testStep, _L("Construct descriptor source"), KErrNone); sl@0: sl@0: // Create a descriptor source for use with the other tests. sl@0: // Mark the heap to enable us to test for leaks within the source object. sl@0: MDataSource* source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: // Test that the source has been initialised correctly. sl@0: // The test should be successful. sl@0: TSourceTypeTestStep testStep2(source, KUidMmfDescriptorSource, KMMFFourCCCodeNULL, EFalse); sl@0: DoTest(testStep2, _L("Descriptor source type"), KErrNone); sl@0: sl@0: // Test that the source cannot create a source buffer. sl@0: // The test should be successful. sl@0: TCanCreateSourceBufferTestStep testStep3(source, EFalse); sl@0: DoTest(testStep3, _L("Descriptor CanCreateSourceBuffer"), KErrNone); sl@0: sl@0: // Test that the source cannot source sample convert. sl@0: // The test should be successful. sl@0: TSourceSampleConvertTestStep testStep4(source, EFalse); sl@0: DoTest(testStep4, _L("Descriptor source SourceSampleConvert"), KErrNone); sl@0: sl@0: // Test that the clip is initialised correctly. sl@0: CMMFClip *sourceClip = STATIC_CAST(CMMFClip*, source); sl@0: sl@0: // Test that the number of bytes free is what we would expect. sl@0: // The test should be successful. sl@0: TClipBytesFreeTestStep testStep5(sourceClip, KTestDataSize-KTestBufferSize); sl@0: DoTest(testStep5, _L("Descriptor source BytesFree"), KErrNone); sl@0: sl@0: // Test that the size of the clip is what we would expect. sl@0: // The test should be successful. sl@0: TClipSizeTestStep testStep6(sourceClip, KTestBufferSize); sl@0: DoTest(testStep6, _L("Descriptor source Size"), KErrNone); sl@0: sl@0: // Test that the size of the clip cannot be set. sl@0: // The test should be successful. sl@0: TClipSetSizeTestStep testStep7(sourceClip, ETrue); sl@0: DoTest(testStep7, _L("Descriptor source SetSize"), KErrNone); sl@0: sl@0: // Attempt to delete the clip. sl@0: // This test should fail, leaving with KErrNotSupported. sl@0: TClipDeleteTestStep testStep8(sourceClip); sl@0: DoTest(testStep8, _L("Descriptor source Delete"), KErrNotSupported); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(dataDes); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0002 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0002::CTestStep_MMF_SRSSNK_U_0002() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0002"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0002 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0002::~CTestStep_MMF_SRSSNK_U_0002() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0002 sl@0: * sl@0: * Attempt to create descriptor source using invalid config data. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0002::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: TBool failed = EFalse; sl@0: sl@0: // Create the actual descriptor source buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Initialise config data. sl@0: TMMFDescriptorConfig configDes; sl@0: configDes.SetLength(0); sl@0: sl@0: // Test invalid uid and configuration descriptor. sl@0: TNewSourceTestStep testStep(KNullUid, configDes); sl@0: DoTest(testStep, _L("Construct descriptor source 0002.1"), KErrArgument); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L(" - 0002.1 failed")); sl@0: failed = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: // Test invalid configuration descriptor. (Zero length) sl@0: TNewSourceTestStep testStep2(KUidMmfDescriptorSource, configDes); sl@0: DoTest(testStep2, _L("Construct descriptor source 0002.2"), KErrGeneral); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L(" - 0002.2 failed")); sl@0: failed = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: sl@0: // Test invalid configuration descriptor. (Filled with zeros) sl@0: Mem::FillZ(CONST_CAST(TUint8*, dataPtr.Ptr()), KTestDataSize); sl@0: TNewSourceTestStep testStep3(KUidMmfDescriptorSource, dataPtr); sl@0: DoTest(testStep3, _L("Construct descriptor source 0002.3"), KErrGeneral); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L(" - 0002.3 failed")); sl@0: failed = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: sl@0: // Test invalid uid. sl@0: const TUid KInvalidUid = { 0x00690069 }; sl@0: configDes().iDes = &dataDes; sl@0: configDes().iDesThreadId = RThread().Id(); sl@0: configDes.SetLength(sizeof(TMMFDescriptorParams)); sl@0: sl@0: TNewSourceTestStep testStep4(KInvalidUid, configDes); sl@0: DoTest(testStep4, _L("Construct descriptor source 0002.4"), KErrNotFound); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L(" - 0002.4 failed")); sl@0: failed = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: sl@0: // Test valid uid, invalid descriptor. sl@0: // Note using a thread ID of 0 behaves differently on streaming so this sl@0: // test has been removed. sl@0: // configDes().iDesThreadId = 0; sl@0: sl@0: // TNewSourceTestStep testStep5(KUidMmfDescriptorSource, configDes); sl@0: // DoTest(testStep5, _L("Construct descriptor source 5"), KErrNotFound); sl@0: sl@0: // Test invalid (sink) uid. sl@0: // Note that ECom has no way of validating that Uids are of the correct type, sl@0: // so this test is removed. (It causes an unhandled exception) sl@0: // TNewSourceTestStep testStep6(KUidMmfDescriptorSink, configDes); sl@0: // DoTest(testStep6, _L("Construct descriptor source"), KErrNotFound); sl@0: sl@0: CleanupStack::PopAndDestroy(dataDes); sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return (failed ? EFail : EPass); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0003 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0003::CTestStep_MMF_SRSSNK_U_0003() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0003"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0003 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0003::~CTestStep_MMF_SRSSNK_U_0003() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0003 sl@0: * sl@0: * Test creation/destruction of descriptor sink. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0003::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Create sink buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Set it's length. sl@0: dataPtr.SetLength(KTestBufferSize); sl@0: sl@0: // Initialise config data. sl@0: TMMFDescriptorConfig configDes; sl@0: configDes().iDes = &dataPtr; sl@0: configDes().iDesThreadId = RThread().Id(); sl@0: sl@0: // Test valid uid and configuration descriptor. sl@0: TNewSinkTestStep testStep(KUidMmfDescriptorSink, configDes); sl@0: DoTest(testStep, _L("Construct descriptor sink"), KErrNone); sl@0: sl@0: // Create a descriptor sink. sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfDescriptorSink, configDes); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: // Test that the sink is initialised correctly. sl@0: TSinkTypeTestStep testStep2(sink, KUidMmfDescriptorSink, KMMFFourCCCodeNULL, EFalse); sl@0: DoTest(testStep2, _L("Descriptor sink type"), KErrNone); sl@0: sl@0: TCanCreateSinkBufferTestStep testStep3(sink, EFalse); sl@0: DoTest(testStep3, _L("Descriptor sink CanCreateSinkBuffer"), KErrNone); sl@0: sl@0: // Test that the clip is initialised correctly. sl@0: CMMFClip *sinkClip = STATIC_CAST(CMMFClip*, sink); sl@0: TClipBytesFreeTestStep testStep4(sinkClip, KTestDataSize-KTestBufferSize); sl@0: DoTest(testStep4, _L("Descriptor sink BytesFree"), KErrNone); sl@0: sl@0: TClipSizeTestStep testStep5(sinkClip, KTestBufferSize); sl@0: DoTest(testStep5, _L("Descriptor sink Size"), KErrNone); sl@0: sl@0: TClipSetSizeTestStep testStep6(sinkClip, ETrue); sl@0: DoTest(testStep6, _L("Descriptor sink SetSize"), KErrNone); sl@0: sl@0: TClipDeleteTestStep testStep7(sinkClip); sl@0: DoTest(testStep7, _L("Descriptor sink Delete"), KErrNotSupported); sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: CleanupStack::PopAndDestroy(dataDes); sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0004 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0004::CTestStep_MMF_SRSSNK_U_0004() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0004"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0004 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0004::~CTestStep_MMF_SRSSNK_U_0004() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0004 sl@0: * sl@0: * Attempt to create descriptor sink using invalid config data. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0004::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Create sink buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Initialise config data. sl@0: TMMFDescriptorConfig configDes; sl@0: configDes.SetLength(0); sl@0: sl@0: // Test invalid uid and configuration descriptor. sl@0: TNewSinkTestStep testStep(KNullUid, configDes); sl@0: DoTest(testStep, _L("Construct descriptor sink 1"), KErrArgument); sl@0: sl@0: // Test invalid configuration descriptor. (Zero length) sl@0: TNewSinkTestStep testStep2(KUidMmfDescriptorSink, configDes); sl@0: DoTest(testStep2, _L("Construct descriptor sink 2"), KErrGeneral); sl@0: sl@0: // Test invalid configuration descriptor. (Filled with zeros) sl@0: Mem::FillZ(CONST_CAST(TUint8*, dataPtr.Ptr()), KTestDataSize); sl@0: TNewSinkTestStep testStep3(KUidMmfDescriptorSink, dataPtr); sl@0: DoTest(testStep3, _L("Construct descriptor sink 3"), KErrGeneral); sl@0: sl@0: // Test invalid uid. sl@0: const TUid KInvalidUid = { 0x00690069 }; sl@0: configDes().iDes = &dataDes; sl@0: configDes().iDesThreadId = RThread().Id(); sl@0: configDes.SetLength(sizeof(TMMFDescriptorParams)); sl@0: sl@0: TNewSinkTestStep testStep4(KInvalidUid, configDes); sl@0: DoTest(testStep4, _L("Construct descriptor sink 4"), KErrNotFound); sl@0: sl@0: // Test valid uid, invalid descriptor. sl@0: configDes().iDesThreadId = (TUint) -1; sl@0: TNewSinkTestStep testStep5(KUidMmfDescriptorSink, configDes); sl@0: DoTest(testStep5, _L("Construct descriptor sink 5"), KErrNotFound); sl@0: sl@0: // Test invalid (source) uid. sl@0: // Note that ECom has no way of validating that Uids are of the correct type, sl@0: // so this test is removed. (It causes an unhandled exception) sl@0: // TNewSinkTestStep testStep6(KUidMmfDescriptorSource, configDes); sl@0: // DoTest(testStep6, _L("Construct descriptor sink"), KErrNotFound); sl@0: sl@0: CleanupStack::PopAndDestroy(dataDes); sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0005 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0005::CTestStep_MMF_SRSSNK_U_0005() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0005"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0005 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0005::~CTestStep_MMF_SRSSNK_U_0005() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0005 sl@0: * sl@0: * Functional test of descriptor source. sl@0: * Misc. functions test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0005::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: // Create source buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Initialise config data. sl@0: TMMFDescriptorConfig configDes; sl@0: configDes().iDes = &dataPtr; sl@0: configDes().iDesThreadId = RThread().Id(); sl@0: sl@0: // Create a dummy buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Create a dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: // Create a descriptor source. sl@0: MDataSource* source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: // Test create source buffer. sl@0: TCreateSourceBuffer1TestStep testStep(ESourceTypeDes, dummySink, KUidMmfDescriptorBuffer, ETrue); sl@0: DoTest(testStep, _L("Descriptor source CreateSourceBuffer1"), KErrNotSupported); sl@0: sl@0: TCreateSourceBuffer2TestStep testStep2(ESourceTypeDes, dummySink, validBuffer, KUidMmfDescriptorBuffer, ETrue); sl@0: DoTest(testStep2, _L("Descriptor source CreateSourceBuffer2"), KErrNotSupported); sl@0: sl@0: // Test default base class fns. (These should all do nothing) sl@0: TSourceThreadLogonTestStep testStep3(source, dummySink); sl@0: DoTest(testStep3, _L("Descriptor source SourceThreadLogon"), KErrNone); sl@0: sl@0: TNegotiateSourceTestStep testStep4(source, dummySink); sl@0: DoTest(testStep4, _L("Descriptor source NegotiateSourceL"), KErrNone); sl@0: sl@0: source->SourcePrimeL(); sl@0: source->SourcePlayL(); sl@0: source->SourcePauseL(); sl@0: source->SourceStopL(); sl@0: sl@0: TMMFPrioritySettings prioritySettings; sl@0: source->SetSourcePrioritySettings(prioritySettings); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: sl@0: CleanupStack::PopAndDestroy(3, dataDes); // dummySink, validBuffer, dataDes sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0006 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0006::CTestStep_MMF_SRSSNK_U_0006() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0006"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0006 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0006::~CTestStep_MMF_SRSSNK_U_0006() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0006 sl@0: * sl@0: * Functional test of descriptor source. sl@0: * FillBufferL() test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0006::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: // Create source buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Set it's length sl@0: dataPtr.SetLength(KTestDataSize); sl@0: sl@0: // Randomise source buffer. sl@0: TTime seedTime; sl@0: seedTime.UniversalTime(); sl@0: TInt64 seed = seedTime.Int64(); sl@0: sl@0: TInt i; sl@0: for (i = 0 ; iBufferSize(); sl@0: sourcePtr += bufferSize; sl@0: } while (bufferSize == KTestBufferSize); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: // Test complete fill with alloc fail. sl@0: TFillBufferTestStep testStep4(source, validBuffer, dummySink, dataPtr); sl@0: sl@0: sourcePtr = baseDataPtr; sl@0: do sl@0: { sl@0: testStep4.SetReadLength(Min(KTestBufferSize, KTestDataSize - (sourcePtr-baseDataPtr))); sl@0: DoTestStepWithAllocFail(testStep4, _L("Descriptor source FillBufferL"), KErrNone); sl@0: sl@0: bufferSize = validBuffer->BufferSize(); sl@0: sourcePtr += bufferSize; sl@0: } while (bufferSize == KTestBufferSize); sl@0: sl@0: // Test additional fill request. sl@0: TFillBufferTestStep testStep5(source, validBuffer, dummySink, dataPtr); sl@0: DoTest(testStep5, _L("Descriptor source FillBufferL"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: // Test zero length read. sl@0: TFillBufferTestStep testStep6(source, zeroBuffer, dummySink, dataPtr); sl@0: DoTest(testStep6, _L("Descriptor source FillBufferL"), KErrNone); sl@0: sl@0: // Test over size read. sl@0: TFillBufferTestStep testStep7(source, bigBuffer, dummySink, dataPtr, KTestDataSize); sl@0: DoTestStep(testStep7, _L("Descriptor source FillBufferL"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: testStep7.SetPosition(0); sl@0: DoTestStepWithAllocFail(testStep7, _L("Descriptor source FillBufferL"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(5, zeroBuffer); // source, dummySink, validBuffer, bigBuffer, zeroBuffer sl@0: sl@0: CleanupStack::PopAndDestroy(dataDes); // dataDes sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0007 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0007::CTestStep_MMF_SRSSNK_U_0007() sl@0: : CTestStep_MMF_SRSSNK(EFalse) sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0007"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0007 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0007::~CTestStep_MMF_SRSSNK_U_0007() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0007 sl@0: * sl@0: * Functional test of descriptor source. sl@0: * BufferEmptiedL() panic test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0007::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: // This test fails if running a debug StdSourcesAndSinks dll. sl@0: // So only perform the test on target. sl@0: sl@0: // Create source buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Initialise config data. sl@0: TMMFDescriptorConfig configDes; sl@0: configDes().iDes = &dataPtr; sl@0: configDes().iDesThreadId = RThread().Id(); sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Create source descriptor. sl@0: MDataSource* source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: // Test BufferEmptiedL sl@0: source->BufferEmptiedL(validBuffer); sl@0: sl@0: CleanupStack::PopAndDestroy(2, validBuffer); // source, validBuffer sl@0: sl@0: CleanupStack::PopAndDestroy(dataDes); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0008 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0008::CTestStep_MMF_SRSSNK_U_0008() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0008"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0008 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0008::~CTestStep_MMF_SRSSNK_U_0008() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0008 sl@0: * sl@0: * Functional test of descriptor source. sl@0: * ReadBufferL() test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0008::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Set it's length. sl@0: dataPtr.SetLength(KTestDataSize); sl@0: sl@0: TTime seedTime; sl@0: seedTime.UniversalTime(); sl@0: TInt64 seed = seedTime.Int64(); sl@0: for (TInt i = 0 ; iDes()); sl@0: sl@0: // Initialise config data. sl@0: TMMFDescriptorConfig configDes; sl@0: configDes().iDes = &dataPtr; sl@0: configDes().iDesThreadId = RThread().Id(); sl@0: sl@0: TUid testControllerUid = { KMmfTestControllerUid }; sl@0: RMMFController dummyController; sl@0: TMMFPrioritySettings prioritySettings; sl@0: TMMFMessageDestinationPckg destination; sl@0: sl@0: User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings)); sl@0: CleanupClosePushL(dummyController); sl@0: sl@0: TBuf8<1> dummyArgs; sl@0: User::LeaveIfError(dummyController.AddDataSource(KUidMmfDescriptorSource, configDes)); sl@0: TInt err = dummyController.CustomCommandSync(destination, KDescriptorSource, dummyArgs, dummyArgs); sl@0: if (err != KErrNotSupported) sl@0: { sl@0: INFO_PRINTF2(_L("Descriptor source SourceCustomCommand: Expecting KErrNotSupported, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(); // dummyController sl@0: sl@0: CleanupStack::PopAndDestroy(dataDes); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0010 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0010::CTestStep_MMF_SRSSNK_U_0010() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0010"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0010 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0010::~CTestStep_MMF_SRSSNK_U_0010() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0010 sl@0: * sl@0: * Functional test of descriptor sink. sl@0: * Misc. functions test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0010::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Create sink buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Initialise config data. sl@0: TMMFDescriptorConfig configDes; sl@0: configDes().iDes = &dataPtr; sl@0: configDes().iDesThreadId = RThread().Id(); sl@0: sl@0: // Create a dummy sink. sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: // Create desciptor sink. sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfDescriptorSink, configDes); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: // Test create sink buffer. sl@0: TCreateSinkBufferTestStep0 testStep(sink, KUidMmfDescriptorBuffer, ETrue, NULL); sl@0: DoTest(testStep, _L("Descriptor sink CreateSinkBuffer"), KErrNotSupported); sl@0: sl@0: // Test default base class fns. (These should all do nothing) sl@0: TSinkThreadLogonTestStep testStep2(sink, dummySource); sl@0: DoTest(testStep2, _L("Descriptor sink SinkThreadLogon"), KErrNone); sl@0: sl@0: TNegotiateTestStep testStep3(sink, dummySource); sl@0: DoTest(testStep3, _L("Descriptor sink NegotiateL"), KErrNone); sl@0: sl@0: sink->SinkPrimeL(); sl@0: sink->SinkPlayL(); sl@0: sink->SinkPauseL(); sl@0: sink->SinkStopL(); sl@0: sl@0: TMMFPrioritySettings prioritySettings; sl@0: sink->SetSinkPrioritySettings(prioritySettings); sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: CleanupStack::PopAndDestroy(2, dataDes); // dummySource, dataDes sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0011 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0011::CTestStep_MMF_SRSSNK_U_0011() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0011"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0011 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0011::~CTestStep_MMF_SRSSNK_U_0011() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0011 sl@0: * sl@0: * Functional test of descriptor sink. sl@0: * EmptyBufferL() test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0011::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: TUint8* baseDataPtr = CONST_CAST(TUint8*, dataPtr.Ptr()); sl@0: sl@0: HBufC8* copyOfDataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 copyOfDataPtr(copyOfDataDes->Des()); sl@0: sl@0: // Randomise the data. sl@0: TTime seedTime; sl@0: seedTime.UniversalTime(); sl@0: TInt64 seed = seedTime.Int64(); sl@0: for (TInt i = 0 ; iData().SetLength(KTestOverDataSize); sl@0: sl@0: // Create a valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Set the length to write. sl@0: validBuffer->Data().SetLength(KTestWriteSize); sl@0: sl@0: // Create descriptor sink. sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfDescriptorSink, configDes); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: // Create test (invalid) buffer. sl@0: CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer; sl@0: CleanupStack::PushL(testBuffer); sl@0: sl@0: // Test invalid EmptyBufferL. sl@0: TEmptyBufferTestStep testStep(sink, testBuffer, dummySource, dataPtr, copyOfDataPtr); sl@0: DoTest(testStep, _L("Descriptor sink EmptyBufferL"), KErrNotSupported); sl@0: CleanupStack::PopAndDestroy(testBuffer); sl@0: sl@0: // Test valid empty. sl@0: TEmptyBufferTestStep testStep2(sink, validBuffer, dummySource, dataPtr, copyOfDataPtr); sl@0: DoTestStep(testStep2, _L("Descriptor sink EmptyBufferL"), KErrNone); sl@0: sl@0: dataPtr.SetLength(0); sl@0: copyOfDataPtr.SetLength(0); sl@0: testStep2.SetPosition(0); sl@0: DoTestStepWithAllocFail(testStep2, _L("Descriptor sink EmptyBufferL"), KErrNone); sl@0: sl@0: // Test complete empty. sl@0: TEmptyBufferTestStep testStep3(sink, validBuffer, dummySource, dataPtr, copyOfDataPtr); sl@0: sl@0: dataPtr.SetLength(0); sl@0: copyOfDataPtr.SetLength(0); sl@0: const TUint8* sinkPtr = baseDataPtr; sl@0: TInt bufferSize; sl@0: do sl@0: { sl@0: bufferSize = Min(KTestWriteSize, KTestDataSize - (sinkPtr-baseDataPtr)); sl@0: validBuffer->Data().SetLength(bufferSize); sl@0: sl@0: testStep3.SetWriteLength(bufferSize); sl@0: DoTestStep(testStep3, _L("Descriptor sink EmptyBufferL"), KErrNone); sl@0: sl@0: sinkPtr += bufferSize; sl@0: } while (bufferSize == KTestWriteSize); sl@0: sl@0: // Test complete empty with alloc fail. sl@0: TEmptyBufferTestStep testStep4(sink, validBuffer, dummySource, dataPtr, copyOfDataPtr); sl@0: validBuffer->Data().SetLength(KTestWriteSize); sl@0: sl@0: dataPtr.SetLength(0); sl@0: copyOfDataPtr.SetLength(0); sl@0: sinkPtr = baseDataPtr; sl@0: do sl@0: { sl@0: bufferSize = Min(KTestWriteSize, KTestDataSize - (sinkPtr-baseDataPtr)); sl@0: validBuffer->Data().SetLength(bufferSize); sl@0: sl@0: testStep4.SetWriteLength(bufferSize); sl@0: DoTestStepWithAllocFail(testStep4, _L("Descriptor sink EmptyBufferL"), KErrNone); sl@0: sl@0: bufferSize = validBuffer->BufferSize(); sl@0: sinkPtr += bufferSize; sl@0: } while (bufferSize == KTestWriteSize); sl@0: sl@0: // Test additional empty request. sl@0: TEmptyBufferTestStep testStep5(sink, validBuffer, dummySource, dataPtr, copyOfDataPtr); sl@0: sl@0: testStep5.SetWriteLength(0); sl@0: DoTest(testStep5, _L("Descriptor sink EmptyBufferL"), KErrNone); sl@0: sl@0: // Test zero length write. sl@0: dataPtr.SetLength(0); sl@0: copyOfDataPtr.SetLength(0); sl@0: TEmptyBufferTestStep testStep6(sink, zeroBuffer, dummySource, dataPtr, copyOfDataPtr); sl@0: DoTest(testStep6, _L("Descriptor sink EmptyBufferL"), KErrNone); sl@0: sl@0: // Test over size write. sl@0: TEmptyBufferTestStep testStep7(sink, bigBuffer, dummySource, dataPtr, copyOfDataPtr); sl@0: testStep7.SetWriteLength(KTestDataSize); sl@0: DoTestStep(testStep7, _L("Descriptor sink EmptyBufferL"), KErrNone /* Should probably be KErrOverflow */); sl@0: sl@0: dataPtr.SetLength(0); sl@0: copyOfDataPtr.SetLength(0); sl@0: testStep7.SetPosition(0); sl@0: DoTestStepWithAllocFail(testStep7, _L("Descriptor sink EmptyBufferL"), KErrNone /* Should probably be KErrOverflow */); sl@0: sl@0: CleanupStack::PopAndDestroy(5, zeroBuffer); // sink, dummySource, validBuffer, bigBuffer, zeroBuffer sl@0: sl@0: CleanupStack::PopAndDestroy(2, dataDes); // copyOfDataDes, dataDes sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0012 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0012::CTestStep_MMF_SRSSNK_U_0012() sl@0: : CTestStep_MMF_SRSSNK(EFalse) sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0012"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0012 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0012::~CTestStep_MMF_SRSSNK_U_0012() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0012 sl@0: * sl@0: * Functional test of descriptor sink. sl@0: * BufferFilledL() panic test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0012::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // This test fails if running a debug StdSourcesAndSinks dll. sl@0: // So only perform the test on target. sl@0: sl@0: // Create sink buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Initialise config data. sl@0: TMMFDescriptorConfig configDes; sl@0: configDes().iDes = &dataPtr; sl@0: configDes().iDesThreadId = RThread().Id(); sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Create descriptor sink. sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfDescriptorSink, configDes); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: // Test BufferFilledL sl@0: sink->BufferFilledL(validBuffer); sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: CleanupStack::PopAndDestroy(2, dataDes); // validBuffer, dataDes sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0013 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0013::CTestStep_MMF_SRSSNK_U_0013() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0013"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0013 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0013::~CTestStep_MMF_SRSSNK_U_0013() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0013 sl@0: * sl@0: * Functional test of descriptor sink. sl@0: * WriteBufferL() test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0013::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: TUint8* baseDataPtr = CONST_CAST(TUint8*, dataPtr.Ptr()); sl@0: sl@0: HBufC8* copyOfDataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 copyOfDataPtr(copyOfDataDes->Des()); sl@0: sl@0: // Randomise the data. sl@0: TTime seedTime; sl@0: seedTime.UniversalTime(); sl@0: TInt64 seed = seedTime.Int64(); sl@0: for (TInt i = 0 ; iData().SetLength(KTestWriteSize); sl@0: sl@0: // Create dummy source. sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: // Create sink descriptor. sl@0: CMMFClip* sink = STATIC_CAST(CMMFClip*, MDataSink::NewSinkL(KUidMmfDescriptorSink, configDes)); sl@0: CleanupStack::PushL(sink); sl@0: sl@0: // Create test (invalid) buffer. sl@0: CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer; sl@0: CleanupStack::PushL(testBuffer); sl@0: sl@0: // Test WriteBufferL (these tests should fail) sl@0: TDescriptorClipWriteBufferTestStep testStep(sink, testBuffer, 0, dummySource, dataPtr, copyOfDataPtr); sl@0: DoTest(testStep, _L("Descriptor sink WriteBufferL"), KErrNotSupported); sl@0: sl@0: TDescriptorClipWriteBuffer2TestStep testStep2(sink, testBuffer, 0, dummySource, dataPtr, copyOfDataPtr, KTestBufferSize); sl@0: DoTest(testStep2, _L("Descriptor sink WriteBufferL"), KErrNotSupported); sl@0: sl@0: TDescriptorClipWriteBuffer3TestStep testStep3(sink, testBuffer, 0, dataPtr, copyOfDataPtr, KTestBufferSize); sl@0: DoTest(testStep3, _L("Descriptor sink WriteBufferL"), KErrNotSupported); sl@0: CleanupStack::PopAndDestroy(testBuffer); sl@0: sl@0: // Test writing to the beginning, middle, and end ofthe descriptor. sl@0: TDescriptorClipWriteBufferTestStep testStep4(sink, validBuffer, 0, dummySource, dataPtr, copyOfDataPtr, KTestWriteSize); sl@0: DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep4.SetPosition(1); sl@0: DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep4.SetPosition(KTestDataSize/2); sl@0: DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep4.SetPosition(KTestDataSize/2 + 1); sl@0: DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep4.SetPosition(KTestDataSize-10); sl@0: DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: testStep4.SetWriteLength(11); sl@0: DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: testStep4.SetWriteLength(10); sl@0: DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep4.SetPosition(KTestDataSize); sl@0: DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: testStep4.SetWriteLength(0); sl@0: DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep4.SetPosition(KTestDataSize + 2); sl@0: DoTest(testStep4, _L("Descriptor source WriteBufferL"), KErrArgument); sl@0: sl@0: // Attempt to write nothing. sl@0: TDescriptorClipWriteBufferTestStep testStep5(sink, validBuffer, 0, dummySource, dataPtr, copyOfDataPtr); sl@0: DoTest(testStep5, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: // Attempt to write more data than is actually in the buffer. sl@0: testStep5.SetWriteLength(KTestOverWriteSize); sl@0: DoTest(testStep5, _L("Descriptor sink WriteBufferL"), KErrArgument); sl@0: sl@0: // Repeat writes with full length descriptor. sl@0: dataPtr.SetLength(KTestDataSize); sl@0: copyOfDataPtr.SetLength(KTestDataSize); sl@0: sl@0: TDescriptorClipWriteBufferTestStep testStep6(sink, validBuffer, 0, dummySource, dataPtr, copyOfDataPtr, KTestWriteSize); sl@0: DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep6.SetPosition(1); sl@0: DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep6.SetPosition(KTestDataSize/2); sl@0: DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep6.SetPosition(KTestDataSize/2 + 1); sl@0: DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep6.SetPosition(KTestDataSize - 10); sl@0: DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: testStep6.SetWriteLength(11); sl@0: DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: testStep6.SetWriteLength(10); sl@0: DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep6.SetPosition(KTestDataSize); sl@0: DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: testStep6.SetWriteLength(0); sl@0: DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep6.SetPosition(KTestDataSize + 2); sl@0: DoTest(testStep6, _L("Descriptor source WriteBufferL"), KErrArgument); sl@0: sl@0: // Reset descriptor. sl@0: dataPtr.SetLength(0); sl@0: copyOfDataPtr.SetLength(0); sl@0: sl@0: // Repeat writes without supplying the length to write. sl@0: TDescriptorClipWriteBuffer2TestStep testStep7(sink, validBuffer, 0, dummySource, dataPtr, copyOfDataPtr, KTestWriteSize); sl@0: DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep7.SetPosition(1); sl@0: DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep7.SetPosition(KTestDataSize/2); sl@0: DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep7.SetPosition(KTestDataSize/2 + 1); sl@0: DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep7.SetPosition(KTestDataSize - 10); sl@0: DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: validBuffer->Data().SetLength(11); sl@0: DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: validBuffer->Data().SetLength(10); sl@0: testStep7.SetWriteLength(10); sl@0: DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep7.SetPosition(KTestDataSize); sl@0: DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: validBuffer->Data().SetLength(0); sl@0: testStep7.SetWriteLength(0); sl@0: DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep7.SetPosition(KTestDataSize + 2); sl@0: DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrArgument); sl@0: sl@0: // Attempt to write nothing. sl@0: testStep7.SetPosition(0); sl@0: DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: // Repeat writes with full length descriptor. sl@0: dataPtr.SetLength(KTestDataSize); sl@0: copyOfDataPtr.SetLength(KTestDataSize); sl@0: validBuffer->Data().SetLength(KTestWriteSize); sl@0: sl@0: TDescriptorClipWriteBuffer2TestStep testStep8(sink, validBuffer, 0, dummySource, dataPtr, copyOfDataPtr, KTestWriteSize); sl@0: DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep8.SetPosition(1); sl@0: DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep8.SetPosition(KTestDataSize/2); sl@0: DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep8.SetPosition(KTestDataSize/2 + 1); sl@0: DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep8.SetPosition(KTestDataSize - 10); sl@0: DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: validBuffer->Data().SetLength(11); sl@0: DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: validBuffer->Data().SetLength(10); sl@0: testStep8.SetWriteLength(10); sl@0: DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep8.SetPosition(KTestDataSize); sl@0: DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: validBuffer->Data().SetLength(0); sl@0: testStep8.SetWriteLength(0); sl@0: DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep8.SetPosition(KTestDataSize + 2); sl@0: DoTest(testStep8, _L("Descriptor source WriteBufferL"), KErrArgument); sl@0: sl@0: // Reset descriptor. sl@0: dataPtr.SetLength(0); sl@0: copyOfDataPtr.SetLength(0); sl@0: validBuffer->Data().SetLength(KTestWriteSize); sl@0: sl@0: // Repeat writes without supplying the length, or a sink. sl@0: TDescriptorClipWriteBuffer3TestStep testStep9(sink, validBuffer, 0, dataPtr, copyOfDataPtr, KTestWriteSize); sl@0: DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep9.SetPosition(1); sl@0: DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep9.SetPosition(KTestDataSize/2); sl@0: DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep9.SetPosition(KTestDataSize/2 + 1); sl@0: DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep9.SetPosition(KTestDataSize - 10); sl@0: DoTest(testStep9, _L("Descriptor source ReadBufferL"), KErrOverflow); sl@0: sl@0: validBuffer->Data().SetLength(11); sl@0: DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: validBuffer->Data().SetLength(10); sl@0: testStep9.SetWriteLength(10); sl@0: DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: validBuffer->Data().SetLength(0); sl@0: testStep9.SetPosition(KTestDataSize); sl@0: testStep9.SetWriteLength(0); sl@0: DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep9.SetPosition(KTestDataSize + 2); sl@0: DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrArgument); sl@0: sl@0: // Attempt to write nothing. sl@0: testStep9.SetPosition(0); sl@0: DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: // Repeat writes with full length descriptor. sl@0: dataPtr.SetLength(KTestDataSize); sl@0: copyOfDataPtr.SetLength(KTestDataSize); sl@0: validBuffer->Data().SetLength(KTestWriteSize); sl@0: sl@0: TDescriptorClipWriteBuffer3TestStep testStep10(sink, validBuffer, 0, dataPtr, copyOfDataPtr, KTestWriteSize); sl@0: DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep10.SetPosition(1); sl@0: DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep10.SetPosition(KTestDataSize/2); sl@0: DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep10.SetPosition(KTestDataSize/2 + 1); sl@0: DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep10.SetPosition(KTestDataSize - 10); sl@0: DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: validBuffer->Data().SetLength(11); sl@0: DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: validBuffer->Data().SetLength(10); sl@0: testStep10.SetWriteLength(10); sl@0: DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep10.SetPosition(KTestDataSize); sl@0: DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrOverflow); sl@0: sl@0: validBuffer->Data().SetLength(0); sl@0: testStep10.SetWriteLength(0); sl@0: DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrNone); sl@0: sl@0: testStep10.SetPosition(KTestDataSize + 2); sl@0: DoTest(testStep10, _L("Descriptor source WriteBufferL"), KErrArgument); sl@0: sl@0: CleanupStack::PopAndDestroy(3, validBuffer); // sink, dummySource, validBuffer sl@0: sl@0: CleanupStack::PopAndDestroy(2, dataDes); // copyOfDataDes, dataDes sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0014 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0014::CTestStep_MMF_SRSSNK_U_0014() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0014"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0014 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0014::~CTestStep_MMF_SRSSNK_U_0014() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0014 sl@0: * sl@0: * Functional test of descriptor sink. sl@0: * SinkCustomCommand() test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0014::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Create sink buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Initialise config data. sl@0: TMMFDescriptorConfig configDes; sl@0: configDes().iDes = &dataPtr; sl@0: configDes().iDesThreadId = RThread().Id(); sl@0: sl@0: TUid testControllerUid = { KMmfTestControllerUid }; sl@0: RMMFController dummyController; sl@0: TMMFPrioritySettings prioritySettings; sl@0: TMMFMessageDestinationPckg destination; sl@0: User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings)); sl@0: CleanupClosePushL(dummyController); sl@0: sl@0: TBuf8<1> dummyArgs; sl@0: User::LeaveIfError(dummyController.AddDataSink(KUidMmfDescriptorSink, configDes)); sl@0: TInt err = dummyController.CustomCommandSync(destination, KDescriptorSink, dummyArgs, dummyArgs); sl@0: if (err != KErrNotSupported) sl@0: { sl@0: INFO_PRINTF2(_L("Descriptor sink SinkCustomCommand: Expecting KErrNotSupported, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(2, dataDes); // dummyController, dataDes. sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0015 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0015::CTestStep_MMF_SRSSNK_U_0015() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0015"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0015 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0015::~CTestStep_MMF_SRSSNK_U_0015() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0015 sl@0: * sl@0: * CMMFDescriptor sl@0: * Request size / SetLastBuffer test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0015::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Create source buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Set it's length. sl@0: dataPtr.SetLength(KTestDataSize); sl@0: sl@0: TTime seedTime; sl@0: seedTime.UniversalTime(); sl@0: TInt64 seed = seedTime.Int64(); sl@0: for (TInt i = 0 ; iSourcePrimeL(); sl@0: RFile& file = (STATIC_CAST(CMMFFile*, source))->FileL(); sl@0: sl@0: // Read some bytes from the file. (Check it is as we would expect) sl@0: TBuf8<256> sourceBytes; sl@0: file.Read(sourceBytes); sl@0: for (TInt i = 0 ; i<256 ; i++) sl@0: { sl@0: if (sourceBytes[i] != i) sl@0: { sl@0: INFO_PRINTF3(_L("Construct file source: %d, actually got %d"), sourceBytes[i], i); sl@0: iTestResult = EFail; sl@0: } sl@0: } sl@0: sl@0: // Test that the source is initialised correctly. sl@0: TSourceTypeTestStep testStep2(source, KUidMmfFileSource, KMMFFourCCCodeNULL, EFalse); sl@0: DoTest(testStep2, _L("File source type"), KErrNone); sl@0: sl@0: TCanCreateSourceBufferTestStep testStep3(source, EFalse); sl@0: DoTest(testStep3, _L("File CanCreateSourceBuffer"), KErrNone); sl@0: sl@0: TSourceSampleConvertTestStep testStep4(source, EFalse); sl@0: DoTest(testStep4, _L("File source SourceSampleConvert"), KErrNone); sl@0: sl@0: // Test that the clip is initialised correctly. sl@0: CMMFClip *sourceClip = STATIC_CAST(CMMFClip*, source); sl@0: sl@0: // do a bytes free test sl@0: TClipBytesFreeTestStep testStep5(sourceClip, freeSpace); sl@0: DoFileTest(testStep5, _L("File source BytesFree"), KErrNone); sl@0: sl@0: TClipSizeTestStep testStep6(sourceClip, fileSize); sl@0: DoFileTest(testStep6, _L("File source Size"), KErrNone); sl@0: sl@0: TClipSetSizeTestStep testStep7(sourceClip, ETrue); sl@0: DoFileTest(testStep7, _L("File source SetSize"), KErrAccessDenied); sl@0: sl@0: TClipDeleteTestStep testStep8(sourceClip); sl@0: DoFileTest(testStep8, _L("File source Delete"), KErrAccessDenied); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: // Remove the read only attribute. sl@0: err = testFsSession.SetAtt(testFileName, 0, KEntryAttReadOnly); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("File source SetSize: Expecting KErrNone, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: sourceClip = STATIC_CAST(CMMFClip*, MDataSource::NewSourceL(KUidMmfFileSource, configDes)); sl@0: CleanupStack::PushL(sourceClip); sl@0: sl@0: sourceClip->SourcePrimeL(); sl@0: TClipSetSizeTestStep testStep9(sourceClip, EFalse); sl@0: DoFileTest(testStep9, _L("File source SetSize"), KErrAccessDenied); sl@0: sl@0: CleanupStack::PopAndDestroy(sourceClip); sl@0: sl@0: /* Note - cannot set the size of a source sl@0: // Check the size. sl@0: User::LeaveIfError(testFile.Open(testFsSession, testFileName, EFileRead)); sl@0: sl@0: TInt size; sl@0: err = testFile.Size(size); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("File source SetSize: Expecting KErrNone, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: testFile.Close(); sl@0: sl@0: if (size != fileSize+6) // fileSize+6 is the result from SetSize test. sl@0: { sl@0: INFO_PRINTF3(_L("File source Size: Expecting %d, actually got %d"), fileSize+6, size); sl@0: iTestResult = EFail; sl@0: } sl@0: */ sl@0: sl@0: CMMFFile* sourceFile = STATIC_CAST(CMMFFile*, MDataSource::NewSourceL(KUidMmfFileSource, configDes)); sl@0: CleanupStack::PushL(sourceFile); sl@0: sl@0: const TDesC& fileName = sourceFile->FileName(); sl@0: if (fileName.Compare(parser.Name())) sl@0: { sl@0: INFO_PRINTF3(_L("File source FileName: Expecting %S, actually got %S"), parser.Name().Ptr(), fileName.Ptr()); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: const TDesC& extName = sourceFile->Extension(); sl@0: if (extName.Compare(parser.Ext())) sl@0: { sl@0: INFO_PRINTF3(_L("File source FileName: Expecting %S, actually got %S"), parser.Ext().Ptr(), extName.Ptr()); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: DoTestStep(testStep8, _L("File source Delete"), KErrNone); sl@0: sl@0: // Check that the file has actually been deleted. sl@0: err = testFile.Open(testFsSession, testFileName, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: sl@0: INFO_PRINTF2(_L("File source Delete: Expecting KErrNotFound, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: // Copy the file (again). sl@0: CopyFileL(testFsSession, KTest101FileName, KTest101CopyFileName); sl@0: sl@0: // Remove the read only attribute. sl@0: err = testFsSession.SetAtt(testFileName, 0, KEntryAttReadOnly); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("File source SetSize: Expecting KErrNone, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sourceFile); sl@0: sl@0: sourceFile = STATIC_CAST(CMMFFile*, MDataSource::NewSourceL(KUidMmfFileSource, configDes)); sl@0: CleanupStack::PushL(sourceFile); sl@0: sl@0: TClipDeleteTestStep testStep10(sourceFile); sl@0: DoTestStepWithAllocFail(testStep10, _L("File source Delete"), KErrNone); sl@0: sl@0: // Check that the file has actually been deleted. sl@0: err = testFile.Open(testFsSession, testFileName, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: sl@0: INFO_PRINTF2(_L("File source Delete: Expecting KErrNotFound, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: // Copy the file (again). sl@0: CopyFileL(testFsSession, KTest101FileName, KTest101CopyFileName); sl@0: sl@0: // Remove the read only attribute. sl@0: err = testFsSession.SetAtt(testFileName, 0, KEntryAttReadOnly); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("File source SetSize: Expecting KErrNone, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sourceFile); sl@0: sl@0: if (iFileFailureTestingEnabled) sl@0: { sl@0: sourceFile = STATIC_CAST(CMMFFile*, MDataSource::NewSourceL(KUidMmfFileSource, configDes)); sl@0: CleanupStack::PushL(sourceFile); sl@0: sl@0: TClipDeleteTestStep testStep11(sourceFile); sl@0: DoTestStepWithFileFail(testStep11, _L("File source Delete"), KErrNone); sl@0: sl@0: // Check that the file has actually been deleted. sl@0: err = testFile.Open(testFsSession, testFileName, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: sl@0: INFO_PRINTF2(_L("File source Delete: Expecting KErrNotFound, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: // Copy the file (again). sl@0: CopyFileL(testFsSession, KTest101FileName, KTest101CopyFileName); sl@0: sl@0: // Remove the read only attribute. sl@0: err = testFsSession.SetAtt(testFileName, 0, KEntryAttReadOnly); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("File source SetSize: Expecting KErrNone, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sourceFile); sl@0: sl@0: /* sl@0: // DoTestStepWithAllocAndFileFail test is no longer run. sl@0: // Code kept for reference purposes. sl@0: sourceFile = STATIC_CAST(CMMFFile*, MDataSource::NewSourceL(KUidMmfFileSource, configDes)); sl@0: CleanupStack::PushL(sourceFile); sl@0: sl@0: TClipDeleteTestStep testStep12(sourceFile); sl@0: DoTestStepWithAllocAndFileFail(testStep12, _L("File source Delete"), KErrNone); sl@0: sl@0: // Check that the file has actually been deleted. sl@0: err = testFile.Open(testFsSession, testFileName, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: sl@0: INFO_PRINTF2(_L("File source Delete: Expecting KErrNotFound, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sourceFile); sl@0: */ sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(); // testFsSession sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0102 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0102::CTestStep_MMF_SRSSNK_U_0102() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0102"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0102 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0102::~CTestStep_MMF_SRSSNK_U_0102() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0102 sl@0: * sl@0: * Attempt to create file source using invalid config data. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: _LIT(KTest102FileName1, "c:\\DefaultPathSource.dat"); // Valid but no path. sl@0: _LIT(KTest102FileName2, ""); // Definitely not valid. sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0102::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest102FileName1; sl@0: sl@0: TNewSourceTestStep testStep(KUidMmfFileSource, configDes); sl@0: DoFileTest(testStep, _L("Construct file source 102.1"), KErrNone); sl@0: sl@0: // Verify that the file has not been created. sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()); sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: RFile testFile; sl@0: TInt err = testFile.Open(testFsSession, configDes().iPath, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: User::LeaveIfError(testFsSession.Delete(configDes().iPath)); sl@0: sl@0: INFO_PRINTF2(_L("File source create: Expecting KErrNotFound, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: TNewFileSourceTestStep testStep2(KUidMmfFileSource, configDes); sl@0: DoFileTest(testStep2, _L("Construct file source 102.2"), KErrNotFound); sl@0: sl@0: // Verify that the file has not been created. sl@0: err = testFile.Open(testFsSession, configDes().iPath, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: User::LeaveIfError(testFsSession.Delete(configDes().iPath)); sl@0: sl@0: INFO_PRINTF2(_L("File source create: Expecting KErrNotFound, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: if (iFileFailureTestingEnabled) sl@0: { sl@0: // Repeat test with file failure only. (Checks for file failure on creation) sl@0: DoTestStepWithFileFail(testStep2, _L("Construct file source 102.3"), KErrNotFound); sl@0: sl@0: // Verify that the file has not been created. sl@0: err = testFile.Open(testFsSession, configDes().iPath, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: User::LeaveIfError(testFsSession.Delete(configDes().iPath)); sl@0: sl@0: INFO_PRINTF2(_L("File source create: Expecting KErrNotFound, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: } sl@0: sl@0: configDes().iPath = KTest102FileName2; sl@0: TNewSourceTestStep testStep5(KUidMmfFileSource, configDes); sl@0: DoFileTest(testStep5, _L("Construct file source 102.4"), KErrBadName); sl@0: sl@0: CleanupStack::PopAndDestroy(); // testFsSession sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0103 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0103::CTestStep_MMF_SRSSNK_U_0103() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0103"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0103 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0103::~CTestStep_MMF_SRSSNK_U_0103() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0103 sl@0: * sl@0: * Test creation/destruction of file sink. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: _LIT(KTest103FileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile4.dat"); sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0103::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: // Get file info. sl@0: TInt64 freeSpace = 0; sl@0: sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()) ; sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: // Get the free space on the drive. sl@0: TFileName testFileName(KTest103FileName); sl@0: TParsePtr parser(testFileName); sl@0: TDriveUnit drive(parser.Drive()); sl@0: TVolumeInfo volInfo; sl@0: if (testFsSession.Volume(volInfo, drive) == KErrNone) sl@0: freeSpace = volInfo.iFree; sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = testFileName; sl@0: sl@0: // Test valid uid and configuration descriptor. sl@0: TNewSinkTestStep testStep(KUidMmfFileSink, configDes); sl@0: DoFileTest(testStep, _L("Construst file sink 1"), KErrNone); sl@0: sl@0: // Test that the sink has been initialised correctly. sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfFileSink, configDes); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: // Test that the file has been opened correctly. sl@0: sink->SinkPrimeL(); sl@0: RFile& file = (STATIC_CAST(CMMFFile*, sink))->FileL(); sl@0: sl@0: // Attempt to read some bytes from the file. (Check it is as we would expect) sl@0: TBuf8<256> sourceBytes; sl@0: TInt err = file.Read(sourceBytes); sl@0: if ((err != KErrNone) || (sourceBytes.Length() != 0)) sl@0: { sl@0: INFO_PRINTF3(_L("Construct file sink: Expecting KErrNone + zero length file, actually got %d + %d bytes"), err, sourceBytes.Length()); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: // Test that the file is writable. sl@0: TUint att; sl@0: err = testFsSession.Att(testFileName, att); sl@0: if ((err != KErrNone) || (att & KEntryAttReadOnly)) sl@0: { sl@0: INFO_PRINTF3(_L("Create file sink : Expecting KErrNone + KEntryAttReadOnly, actually got %d, %x"), err, att); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: // Test that the sink is initialised correctly. sl@0: TSinkTypeTestStep testStep2(sink, KUidMmfFileSink, KMMFFourCCCodeNULL, EFalse); sl@0: DoTest(testStep2, _L("Descriptor sink type 2"), KErrNone); sl@0: sl@0: TCanCreateSinkBufferTestStep testStep3(sink, EFalse); sl@0: DoTest(testStep3, _L("Descriptor sink CanCreateSinkBuffer 3"), KErrNone); sl@0: sl@0: // Test that the clip is initialised correctly. sl@0: CMMFClip *sinkClip = STATIC_CAST(CMMFClip*, sink); sl@0: sl@0: // do a bytes free test sl@0: TClipBytesFreeTestStep testStep4(sinkClip, freeSpace); sl@0: DoFileTest(testStep4, _L("Descriptor sink BytesFree 4"), KErrNone); sl@0: sl@0: TClipSizeTestStep testStep5(sinkClip, 0); sl@0: DoFileTest(testStep5, _L("Descriptor sink Size 5"), KErrNone); sl@0: sl@0: TFileSinkSetSizeTestStep testStep6(sinkClip, ETrue); sl@0: DoFileTest(testStep6, _L("Descriptor sink SetSize 6"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: // Set the read only attribute. sl@0: err = testFsSession.SetAtt(testFileName, KEntryAttReadOnly, 0); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("File source SetSize: Expecting KErrNone, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: sinkClip = STATIC_CAST(CMMFClip*, MDataSink::NewSinkL(KUidMmfFileSink, configDes)); sl@0: CleanupStack::PushL(sinkClip); sl@0: sl@0: sinkClip->SinkPrimeL(); sl@0: TFileSinkSetSizeTestStep testStep7(sinkClip, ETrue); sl@0: DoFileTest(testStep7, _L("Descriptor sink SetSize 7"), KErrAccessDenied); sl@0: sl@0: TClipDeleteTestStep testStep8(sinkClip); sl@0: DoFileTest(testStep8, _L("Descriptor sink Delete 8"), KErrAccessDenied); sl@0: sl@0: CleanupStack::PopAndDestroy(sinkClip); sl@0: sl@0: RFile testFile; sl@0: // Check the filename. sl@0: CMMFFile* sinkFile = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes)); sl@0: CleanupStack::PushL(sinkFile); sl@0: sl@0: const TDesC& fileName = sinkFile->FileName(); sl@0: if (fileName.Compare(parser.Name())) sl@0: { sl@0: INFO_PRINTF3(_L("File sink FileName: Expecting %S, actually got %S"), parser.Name().Ptr(), fileName.Ptr()); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: const TDesC& extName = sinkFile->Extension(); sl@0: if (extName.Compare(parser.Ext())) sl@0: { sl@0: INFO_PRINTF3(_L("File sink FileName: Expecting %S, actually got %S"), parser.Ext().Ptr(), extName.Ptr()); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sinkFile); sl@0: sl@0: // Delete the file. sl@0: // Remove the read only attribute. sl@0: err = testFsSession.SetAtt(testFileName, 0, KEntryAttReadOnly); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("File source Delete: Expecting KErrNone, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: sinkFile = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes)); sl@0: CleanupStack::PushL(sinkFile); sl@0: sl@0: TClipDeleteTestStep testStep9(sinkFile); sl@0: DoTestStep(testStep9, _L("File sink Delete 9"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(sinkFile); sl@0: sl@0: // Check that the file has actually been deleted. sl@0: err = testFile.Open(testFsSession, testFileName, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: sl@0: INFO_PRINTF2(_L("File sink Delete: Expecting KErrNotFound, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: // Re-create the file and delete it again. sl@0: sinkFile = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes)); sl@0: CleanupStack::PushL(sinkFile); sl@0: sinkFile->SinkPrimeL(); sl@0: sl@0: TClipDeleteTestStep testStep10(sinkClip); sl@0: DoTestStepWithAllocFail(testStep10, _L("File sink Delete 10"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(sinkFile); sl@0: sl@0: // Check that the file has actually been deleted. sl@0: err = testFile.Open(testFsSession, testFileName, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: sl@0: INFO_PRINTF2(_L("File sink Delete: Expecting KErrNotFound, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: if (iFileFailureTestingEnabled) sl@0: { sl@0: sl@0: // Re-create the file and delete it again. sl@0: sinkFile = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes)); sl@0: CleanupStack::PushL(sinkFile); sl@0: sinkFile->SinkPrimeL(); sl@0: sl@0: TClipDeleteTestStep testStep11(sinkClip); sl@0: DoTestStepWithFileFail(testStep11, _L("File sink Delete 11"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(sinkFile); sl@0: sl@0: // Check that the file has actually been deleted. sl@0: err = testFile.Open(testFsSession, testFileName, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: sl@0: INFO_PRINTF2(_L("File sink Delete: Expecting KErrNotFound, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: /* sl@0: // DoTestStepWithAllocAndFileFail test is no longer run. sl@0: // Code kept for reference purposes. sl@0: sl@0: // Re-create the file and delete it again. sl@0: sinkFile = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes)); sl@0: CleanupStack::PushL(sinkFile); sl@0: sinkFile->SinkPrimeL(); sl@0: sl@0: TClipDeleteTestStep testStep12(sinkClip); sl@0: DoTestStepWithAllocAndFileFail(testStep12, _L("File sink Delete"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(sinkFile); sl@0: sl@0: // Check that the file has actually been deleted. sl@0: err = testFile.Open(testFsSession, testFileName, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: sl@0: INFO_PRINTF2(_L("File sink Delete: Expecting KErrNotFound, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: */ sl@0: } sl@0: CleanupStack::PopAndDestroy(); // testFsSession sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0104 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0104::CTestStep_MMF_SRSSNK_U_0104() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0104"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0104 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0104::~CTestStep_MMF_SRSSNK_U_0104() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0104 sl@0: * sl@0: * Attempt to create file sink using invalid config data. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: _LIT(KTest104FileName1, "c:\\DefaultPathSink.dat"); // Valid but no path. sl@0: _LIT(KTest104FileName2, "c:\\DefaultPathNoExtSink"); // Valid but no path or ext. sl@0: _LIT(KTest104FileName3, ""); // Definitely not valid. sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0104::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest104FileName1; sl@0: sl@0: // Test create the sink. sl@0: TNewSinkTestStep testStep(KUidMmfFileSink, configDes); sl@0: DoFileTest(testStep, _L("Construct file sink 104.1"), KErrNone); sl@0: sl@0: // Verify that the file has not been created. sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()); sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: RFile testFile; sl@0: TInt err = testFile.Open(testFsSession, configDes().iPath, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: sl@0: INFO_PRINTF2(_L("File sink create: Expecting KErrNone, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: TNewFileSinkTestStep testStep2(KUidMmfFileSink, configDes); sl@0: DoFileTest(testStep2, _L("Construct file sink 104.2"), KErrNone); sl@0: sl@0: // Verify that the file has been created. sl@0: err = testFile.Open(testFsSession, configDes().iPath, EFileRead); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("File source create: Expecting KErrNone, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: testFile.Close(); sl@0: sl@0: // Delete it. sl@0: CMMFFile* sink = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes)); sl@0: CleanupStack::PushL(sink); sl@0: User::LeaveIfError(sink->Delete()); sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: if (iFileFailureTestingEnabled) sl@0: { sl@0: // Repeat test with file failure only. (Checks for file failure on creation) sl@0: DoTestStepWithFileFail(testStep2, _L("Construct file sink 104.3"), KErrNone); sl@0: sl@0: // Delete it, now that we don't need it anymore. sl@0: sink = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes)); sl@0: CleanupStack::PushL(sink); sl@0: User::LeaveIfError(sink->Delete()); sl@0: CleanupStack::PopAndDestroy(sink); sl@0: } sl@0: sl@0: configDes().iPath = KTest104FileName2; sl@0: TNewSinkTestStep testStep3(KUidMmfFileSink, configDes); sl@0: DoFileTest(testStep3, _L("Construct file sink 104.4"), KErrNone); sl@0: sl@0: // Verify that the file has not been created. sl@0: err = testFile.Open(testFsSession, configDes().iPath, EFileRead); sl@0: if (err != KErrNotFound) sl@0: { sl@0: testFile.Close(); sl@0: sl@0: INFO_PRINTF2(_L("File sink create: Expecting KErrNone, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: TNewFileSinkTestStep testStep4(KUidMmfFileSink, configDes); sl@0: DoFileTest(testStep4, _L("Construct file sink 104.5"), KErrNone); sl@0: sl@0: // Verify that the file has been created. sl@0: err = testFile.Open(testFsSession, configDes().iPath, EFileRead); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("File sink create: Expecting KErrNone, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: testFile.Close(); sl@0: sl@0: // Delete it. sl@0: sink = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes)); sl@0: CleanupStack::PushL(sink); sl@0: User::LeaveIfError(sink->Delete()); sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: if (iFileFailureTestingEnabled) sl@0: { sl@0: // Repeat test with file failure only. (Checks for file failure on creation) sl@0: DoTestStepWithFileFail(testStep4, _L("Construct file sink 104.6"), KErrNone); sl@0: sl@0: // Delete it, now that we don't need it anymore. sl@0: sink = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes)); sl@0: CleanupStack::PushL(sink); sl@0: User::LeaveIfError(sink->Delete()); sl@0: CleanupStack::PopAndDestroy(sink); sl@0: } sl@0: sl@0: configDes().iPath = KTest104FileName3; sl@0: TNewSinkTestStep testStep5(KUidMmfFileSink, configDes); sl@0: DoFileTest(testStep5, _L("Construct file sink 104.7"), KErrBadName); sl@0: sl@0: CleanupStack::PopAndDestroy(); // testFsSession sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileSourceMisc constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileSourceMisc::CTestStep_MMF_SRSSNK_FileSourceMisc(TSourceType aSourceType) sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iSourceType = aSourceType; sl@0: ASSERT(iSourceType == ESourceTypeFile || iSourceType == ESourceTypeFileHandle); sl@0: if (iSourceType == ESourceTypeFile) sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0105"); sl@0: } sl@0: else sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0120"); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileSourceMisc destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileSourceMisc::~CTestStep_MMF_SRSSNK_FileSourceMisc() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileSourceMisc sl@0: * sl@0: * Functional test of file source. sl@0: * Misc. functions test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_FileSourceMisc::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configFile; sl@0: configFile().iPath = KTest101FileName; sl@0: sl@0: TInt fileSize; sl@0: OpenFileL(KTest101FileName, EFileRead); sl@0: User::LeaveIfError(iFile.Size(fileSize)); sl@0: CloseFile(); sl@0: User::LeaveIfError(iFs.Connect()); sl@0: sl@0: // Create a valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Create a dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: // Create source. sl@0: MDataSource* source = CreateFileSourceL(iSourceType, iFs, KTest101FileName); sl@0: CleanupDeletePushL(source); sl@0: sl@0: // Test create source buffer. sl@0: TCreateSourceBuffer1TestStep testStep(iSourceType, dummySink, KUidMmfDescriptorBuffer, ETrue); sl@0: DoTest(testStep, _L("File source CreateSourceBuffer1"), KErrNotSupported); sl@0: sl@0: TCreateSourceBuffer2TestStep testStep2(iSourceType, dummySink, validBuffer, KUidMmfDescriptorBuffer, ETrue); sl@0: DoTest(testStep2, _L("File source CreateSourceBuffer2"), KErrNotSupported); sl@0: sl@0: // Test default base class fns. (These should all do nothing) sl@0: TSourceThreadLogonTestStep testStep3(source, dummySink); sl@0: DoFileTest(testStep3, _L("File source SourceThreadLogon"), KErrNone); sl@0: sl@0: TNegotiateSourceTestStep testStep4(source, dummySink); sl@0: DoTest(testStep4, _L("File source NegotiateSourceL"), KErrNone); sl@0: sl@0: source->SourcePrimeL(); sl@0: source->SourcePlayL(); sl@0: source->SourcePauseL(); sl@0: source->SourceStopL(); sl@0: sl@0: TMMFPrioritySettings prioritySettings; sl@0: source->SetSourcePrioritySettings(prioritySettings); sl@0: sl@0: // Test source log on. sl@0: source->SourcePrimeL(); sl@0: TFileSourceThreadLogonTestStep testStep5(source, dummySink, fileSize); sl@0: DoFileTest(testStep5, _L("File source SourceThreadLogon"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(source); // source sl@0: sl@0: CleanupStack::PopAndDestroy(2, validBuffer); // dummySink, validBuffer sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileFillBuffer constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileFillBuffer::CTestStep_MMF_SRSSNK_FileFillBuffer(TSourceType aSourceType) sl@0: { sl@0: iSourceType = aSourceType; sl@0: ASSERT(iSourceType == ESourceTypeFile || iSourceType == ESourceTypeFileHandle); sl@0: if (iSourceType == ESourceTypeFile) sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0106"); sl@0: } sl@0: else sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0121"); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileFillBuffer destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileFillBuffer::~CTestStep_MMF_SRSSNK_FileFillBuffer() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileFillBuffer sl@0: * sl@0: * Functional test of descriptor source. sl@0: * FillBufferL() test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_FileFillBuffer::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: const TUint8* baseDataPtr = dataPtr.Ptr(); sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Initialise config data. sl@0: TFileName testFileName(KTest101FileName); sl@0: sl@0: // Read the data from the file. sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()) ; sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: RFile testFile; sl@0: User::LeaveIfError(testFile.Open(testFsSession, testFileName, EFileShareReadersOnly)); sl@0: CleanupClosePushL(testFile); sl@0: sl@0: User::LeaveIfError(testFile.Read(dataPtr)); sl@0: CleanupStack::PopAndDestroy(&testFile); sl@0: sl@0: // Create zero buffer. sl@0: CMMFDescriptorBuffer* zeroBuffer = CMMFDescriptorBuffer::NewL(0); sl@0: CleanupStack::PushL(zeroBuffer); sl@0: sl@0: // Create big buffer. sl@0: CMMFDescriptorBuffer* bigBuffer = CMMFDescriptorBuffer::NewL(KTestOverDataSize); sl@0: CleanupStack::PushL(bigBuffer); sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Create dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: // Create file source. sl@0: MDataSource* source = CreateFileSourceL(iSourceType, testFsSession, KTest101FileName); sl@0: CleanupDeletePushL(source); sl@0: sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: // Create test (invalid) buffer. sl@0: CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer; sl@0: CleanupDeletePushL(testBuffer); sl@0: sl@0: // Test invalid FillBufferL. sl@0: TFillBufferTestStep testStep(source, testBuffer, dummySink, dataPtr); sl@0: DoFileTest(testStep, _L("File source FillBufferL"), KErrNotSupported); sl@0: CleanupStack::PopAndDestroy(testBuffer); sl@0: sl@0: // Test valid FillBufferL. sl@0: sl@0: TFillBufferTestStep testStep2(source, validBuffer, dummySink, dataPtr, KTestBufferSize); sl@0: testStep2.SetAsynchronousRead(ETrue); sl@0: DoFileTestWithoutAllocFail(testStep2, _L("File source FillBufferL"), KErrNone, 2); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: TFileFillBufferTestStep testStep3(iSourceType, testFileName, validBuffer, dummySink, dataPtr, KTestBufferSize); sl@0: testStep3.SetAsynchronousRead(ETrue); sl@0: DoFileTest(testStep3, _L("File source FillBufferL"), KErrNone); sl@0: sl@0: // Test complete fill. sl@0: source = CreateFileSourceL(iSourceType, testFsSession, KTest101FileName); sl@0: CleanupDeletePushL(source); sl@0: sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: TFillBufferTestStep testStep4(source, validBuffer, dummySink, dataPtr, KTestBufferSize); sl@0: testStep4.SetAsynchronousRead(ETrue); sl@0: sl@0: const TUint8* sourcePtr = baseDataPtr; sl@0: TInt bufferSize; sl@0: do sl@0: { sl@0: testStep4.SetReadLength(Min(KTestBufferSize, KTestDataSize - (sourcePtr-baseDataPtr))); sl@0: DoTestStep(testStep4, _L("File source FillBufferL"), KErrNone, 2); sl@0: sl@0: bufferSize = validBuffer->BufferSize(); sl@0: sourcePtr += bufferSize; sl@0: } while (bufferSize == KTestBufferSize); sl@0: sl@0: if ((sourcePtr - dataPtr.Ptr()) != KTestDataSize) sl@0: { sl@0: INFO_PRINTF3(_L("File source FillBufferL: Source data ptr, expected %d, got %d"), KTestDataSize, sourcePtr - dataPtr.Ptr()); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: // Reset the source. sl@0: source->SourceStopL(); sl@0: source->SourcePrimeL(); sl@0: sl@0: if (iFileFailureTestingEnabled) sl@0: { sl@0: // Test complete fill with file fail. sl@0: TFillBufferTestStep testStep5(source, validBuffer, dummySink, dataPtr, KTestBufferSize); sl@0: testStep5.SetAsynchronousRead(ETrue); sl@0: sl@0: sourcePtr = baseDataPtr; sl@0: do sl@0: { sl@0: testStep5.SetReadLength(Min(KTestBufferSize, KTestDataSize - (sourcePtr-baseDataPtr))); sl@0: DoTestStepWithFileFail(testStep5, _L("File source FillBufferL"), KErrNone, 2); sl@0: sl@0: bufferSize = validBuffer->BufferSize(); sl@0: sourcePtr += bufferSize; sl@0: } while (bufferSize == KTestBufferSize); sl@0: sl@0: if ((sourcePtr - dataPtr.Ptr()) != KTestDataSize) sl@0: { sl@0: INFO_PRINTF3(_L("File source FillBufferL: Source data ptr, expected %d, got %d"), KTestDataSize, sourcePtr - dataPtr.Ptr()); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: // Test additional fill request. sl@0: testStep5.SetReadLength(0); sl@0: DoFileTestWithoutAllocFail(testStep5, _L("File source FillBufferL"), KErrNone, 2); sl@0: } sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: // Test complete fill. (Single test version) sl@0: TFileFillBuffer2TestStep testStep6(iSourceType, testFileName, validBuffer, dummySink, dataPtr); sl@0: testStep6.SetAsynchronousRead(ETrue); sl@0: DoFileTest(testStep6, _L("File source FillBufferL"), KErrNone); sl@0: sl@0: // Test multiple read requests. sl@0: RPointerArray bufferArray; sl@0: CleanupClosePushL(bufferArray); sl@0: sl@0: User::LeaveIfError(bufferArray.Append(validBuffer)); sl@0: TFileFillBuffer3TestStep testStep7(iSourceType, testFileName, &bufferArray, dummySink, dataPtr, KTestBufferSize); sl@0: DoFileTest(testStep7, _L("File source FillBufferL"), KErrNone); sl@0: sl@0: CMMFDescriptorBuffer* validBuffer2 = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer2); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer2)); sl@0: DoFileTest(testStep7, _L("File source FillBufferL"), KErrNone); sl@0: sl@0: CMMFDescriptorBuffer* validBuffer3 = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer3); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer3)); sl@0: DoFileTest(testStep7, _L("File source FillBufferL"), KErrNone); sl@0: sl@0: CMMFDescriptorBuffer* validBuffer4 = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer4); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer4)); sl@0: DoFileTest(testStep7, _L("File source FillBufferL"), KErrNone); sl@0: sl@0: CMMFDescriptorBuffer* validBuffer5 = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer5); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer5)); sl@0: DoFileTest(testStep7, _L("File source FillBufferL"), KErrNone); sl@0: sl@0: // Test multiple read requests that do not get completed. sl@0: testStep7.SetMaxRequestCount(3); sl@0: DoFileTest(testStep7, _L("File source FillBufferL"), KErrNone); sl@0: sl@0: // Test multiple read requests, checking correct deletion of completed requests. sl@0: source = CreateFileSourceL(iSourceType, testFsSession, KTest101FileName); sl@0: CleanupDeletePushL(source); sl@0: sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: TFileFillBuffer4TestStep testStep8(source, &bufferArray, dummySink, dataPtr, KTestBufferSize); sl@0: DoTestStep(testStep8, _L("File source FillBufferL"), KErrNone, 4); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(5, &bufferArray); // validBuffer5, 4, 3, 2, bufferArray sl@0: sl@0: // Test zero length read. sl@0: TFileFillBufferTestStep testStep9(iSourceType, testFileName, zeroBuffer, dummySink, dataPtr); sl@0: testStep9.SetAsynchronousRead(ETrue); sl@0: DoFileTest(testStep9, _L("File source FillBufferL"), KErrNone); sl@0: sl@0: // Test over size read. sl@0: TFileFillBufferTestStep testStep10(iSourceType, testFileName, bigBuffer, dummySink, dataPtr, KTestDataSize); sl@0: testStep10.SetAsynchronousRead(ETrue); sl@0: DoFileTest(testStep10, _L("File source FillBufferL"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(7, dataDes); // dummySink, validBuffer, bigBuffer, zeroBuffer, testFsSession, scheduler, dataDes sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0107 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0107::CTestStep_MMF_SRSSNK_U_0107() sl@0: : CTestStep_MMF_SRSSNK(EFalse) sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0107"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0107 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0107::~CTestStep_MMF_SRSSNK_U_0107() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0107 sl@0: * sl@0: * Functional test of file source. sl@0: * BufferEmptiedL() panic test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0107::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // This test fails if running a debug StdSourcesAndSinks dll. sl@0: // So only perform the test on target. sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest101FileName; sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Create source file. sl@0: MDataSource* source = MDataSource::NewSourceL(KUidMmfFileSource, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: // Test BufferEmptiedL sl@0: source->BufferEmptiedL(validBuffer); sl@0: sl@0: CleanupStack::PopAndDestroy(2, validBuffer); // source, validBuffer sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileReadBuffer constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileReadBuffer::CTestStep_MMF_SRSSNK_FileReadBuffer(TSourceType aSourceType) sl@0: { sl@0: ASSERT(aSourceType == ESourceTypeFile || aSourceType == ESourceTypeFileHandle); sl@0: iSourceType = aSourceType; sl@0: if (iSourceType == ESourceTypeFile) sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0108"); sl@0: } sl@0: else sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0122"); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileReadBuffer destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileReadBuffer::~CTestStep_MMF_SRSSNK_FileReadBuffer() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileReadBuffer sl@0: * sl@0: * Functional test of file source. sl@0: * ReadBufferL() test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_FileReadBuffer::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Initialise config data. sl@0: TFileName testFileName(KTest101FileName); sl@0: sl@0: // Read the data from the file. sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()) ; sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: RFile testFile; sl@0: User::LeaveIfError(testFile.Open(testFsSession, testFileName, EFileShareReadersOnly)); sl@0: CleanupClosePushL(testFile); sl@0: sl@0: User::LeaveIfError(testFile.Read(dataPtr)); sl@0: CleanupStack::PopAndDestroy(&testFile); sl@0: sl@0: // Create zero buffer. sl@0: CMMFDescriptorBuffer* zeroBuffer = CMMFDescriptorBuffer::NewL(0); sl@0: CleanupStack::PushL(zeroBuffer); sl@0: sl@0: // Create big buffer. sl@0: CMMFDescriptorBuffer* bigBuffer = CMMFDescriptorBuffer::NewL(KTestOverDataSize); sl@0: CleanupStack::PushL(bigBuffer); sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Create dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: // Create source file. sl@0: CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, testFsSession, KTest101FileName)); sl@0: CleanupStack::PushL(source); sl@0: sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: // Test ReadBufferL (these tests should fail) sl@0: CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer; sl@0: CleanupStack::PushL(testBuffer); sl@0: sl@0: TClipReadBufferTestStep testStep(source, testBuffer, 0, dummySink, dataPtr); sl@0: DoFileTest(testStep, _L("File source ReadBufferL(1)"), KErrNotSupported); sl@0: sl@0: TClipReadBuffer2TestStep testStep2(source, testBuffer, 0, dummySink, dataPtr, KTestBufferSize); sl@0: DoFileTest(testStep2, _L("File source ReadBufferL(2)"), KErrNotSupported); sl@0: sl@0: TClipReadBuffer3TestStep testStep3(source, testBuffer, 0, dataPtr, KTestBufferSize); sl@0: DoFileTest(testStep3, _L("File source ReadBufferL(3)"), KErrNotSupported); sl@0: CleanupStack::PopAndDestroy(testBuffer); sl@0: sl@0: // Test reading from the beginning, middle and end. sl@0: TClipReadBufferTestStep testStep4(source, validBuffer, 0, dummySink, dataPtr, KTestReadSize); sl@0: testStep4.SetAsynchronousRead(ETrue); sl@0: DoFileTestWithoutAllocFail(testStep4, _L("File source ReadBufferL(4)"), KErrNone, 2); sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: TFileReadBufferTestStep testStep5(iSourceType, testFileName, validBuffer, 0, dummySink, dataPtr, KTestReadSize); sl@0: testStep5.SetAsynchronousRead(ETrue); sl@0: DoFileTest(testStep5, _L("File source ReadBufferL(5)"), KErrNone); sl@0: sl@0: testStep5.SetPosition(1); sl@0: DoFileTest(testStep5, _L("File source ReadBufferL(6)"), KErrNone); sl@0: sl@0: testStep5.SetPosition(KTestDataSize/2); sl@0: DoFileTest(testStep5, _L("File source ReadBufferL(7)"), KErrNone); sl@0: sl@0: testStep5.SetPosition(KTestDataSize/2 + 1); sl@0: DoFileTest(testStep5, _L("File source ReadBufferL(8)"), KErrNone); sl@0: sl@0: TFileReadBuffer4TestStep testStep6(iSourceType, testFileName, validBuffer, KTestDataSize - 10, dummySink, dataPtr, KTestReadSize); sl@0: testStep6.SetAsynchronousRead(ETrue); sl@0: testStep6.SetExpectedReadLength(10); sl@0: DoFileTest(testStep6, _L("File source ReadBufferL(9)"), KErrNone); sl@0: sl@0: testStep6.SetPosition(KTestDataSize); sl@0: testStep6.SetExpectedReadLength(0); sl@0: DoFileTest(testStep6, _L("File source ReadBufferL(10)"), KErrNone); sl@0: sl@0: testStep6.SetPosition(KTestDataSize + 2); sl@0: DoFileTest(testStep6, _L("File source ReadBufferL(11)"), KErrNone); sl@0: sl@0: // Attempt to read nothing. sl@0: testStep6.SetPosition(0); sl@0: testStep6.SetReadLength(0); sl@0: DoFileTest(testStep6, _L("File source ReadBufferL(12)"), KErrNone); sl@0: sl@0: // Attempt to read more data than can fit in the buffer. sl@0: testStep6.SetReadLength(KTestOverReadSize); sl@0: DoFileTest(testStep6, _L("File source ReadBufferL(13)"), KErrOverflow); sl@0: sl@0: // Attempt to read into a zero length buffer. sl@0: TFileReadBufferTestStep testStep7(iSourceType, testFileName, zeroBuffer, 0, dummySink, dataPtr); sl@0: testStep7.SetAsynchronousRead(ETrue); sl@0: DoFileTest(testStep7, _L("File source ReadBufferL(14)"), KErrNone); sl@0: sl@0: // Attempt to read more data than present in the source. sl@0: TFileReadBuffer4TestStep testStep8(iSourceType, testFileName, bigBuffer, 0, dummySink, dataPtr, KTestOverDataSize); sl@0: testStep8.SetAsynchronousRead(ETrue); sl@0: testStep8.SetExpectedReadLength(KTestDataSize); sl@0: DoFileTest(testStep8, _L("File source ReadBufferL(15)"), KErrNone); sl@0: sl@0: // Repeat reads without supplying the length to read. sl@0: source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, testFsSession, KTest101FileName)); sl@0: CleanupStack::PushL(source); sl@0: sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: TClipReadBuffer2TestStep testStep9(source, validBuffer, 0, dummySink, dataPtr, KTestBufferSize); sl@0: testStep9.SetAsynchronousRead(ETrue); sl@0: DoFileTestWithoutAllocFail(testStep9, _L("File source ReadBufferL(16)"), KErrNone, 2); sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: TFileReadBuffer2TestStep testStep10(iSourceType, testFileName, validBuffer, 0, dummySink, dataPtr, KTestBufferSize); sl@0: testStep10.SetAsynchronousRead(ETrue); sl@0: DoFileTest(testStep10, _L("File source ReadBufferL(17)"), KErrNone); sl@0: sl@0: testStep10.SetPosition(1); sl@0: DoFileTest(testStep10, _L("File source ReadBufferL(18)"), KErrNone); sl@0: sl@0: testStep10.SetPosition(KTestDataSize/2); sl@0: DoFileTest(testStep10, _L("File source ReadBufferL(19)"), KErrNone); sl@0: sl@0: testStep10.SetPosition(KTestDataSize/2 + 1); sl@0: DoFileTest(testStep10, _L("File source ReadBufferL(20)"), KErrNone); sl@0: sl@0: testStep10.SetPosition(KTestDataSize - 10); sl@0: testStep10.SetReadLength(10); sl@0: DoFileTest(testStep10, _L("File source ReadBufferL(21)"), KErrNone); sl@0: sl@0: testStep10.SetPosition(KTestDataSize); sl@0: testStep10.SetReadLength(0); sl@0: DoFileTest(testStep10, _L("File source ReadBufferL(22)"), KErrNone); sl@0: sl@0: testStep10.SetPosition(KTestDataSize + 2); sl@0: DoFileTest(testStep10, _L("File source ReadBufferL(23)"), KErrNone); sl@0: sl@0: TFileReadBuffer2TestStep testStep11(iSourceType, testFileName, zeroBuffer, 0, dummySink, dataPtr, 0); sl@0: testStep11.SetAsynchronousRead(ETrue); sl@0: DoFileTest(testStep11, _L("File source ReadBufferL(24)"), KErrNone); sl@0: sl@0: TFileReadBuffer2TestStep testStep12(iSourceType, testFileName, bigBuffer, 0, dummySink, dataPtr, KTestDataSize); sl@0: testStep12.SetAsynchronousRead(ETrue); sl@0: DoFileTest(testStep12, _L("File source ReadBufferL(25)"), KErrNone); sl@0: sl@0: // Repeat reads without supplying the length, or a sink. sl@0: source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, testFsSession, KTest101FileName)); sl@0: CleanupStack::PushL(source); sl@0: sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: TClipReadBuffer3TestStep testStep13(source, validBuffer, 0, dataPtr, KTestBufferSize); sl@0: DoFileTest(testStep13, _L("File source ReadBufferL(26)"), KErrNone); sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: TFileReadBuffer3TestStep testStep14(iSourceType, testFileName, validBuffer, 0, dataPtr, KTestBufferSize); sl@0: DoFileTest(testStep14, _L("File source ReadBufferL(27)"), KErrNone); sl@0: sl@0: testStep14.SetPosition(1); sl@0: DoFileTest(testStep14, _L("File source ReadBufferL(28)"), KErrNone); sl@0: sl@0: testStep14.SetPosition(KTestDataSize/2); sl@0: DoFileTest(testStep14, _L("File source ReadBufferL(29)"), KErrNone); sl@0: sl@0: testStep14.SetPosition(KTestDataSize/2 + 1); sl@0: DoFileTest(testStep14, _L("File source ReadBufferL(30)"), KErrNone); sl@0: sl@0: testStep14.SetPosition(KTestDataSize - 10); sl@0: testStep14.SetReadLength(10); sl@0: DoFileTest(testStep14, _L("File source ReadBufferL(31)"), KErrNone); sl@0: sl@0: testStep14.SetPosition(KTestDataSize); sl@0: testStep14.SetReadLength(0); sl@0: DoFileTest(testStep14, _L("File source ReadBufferL(32)"), KErrNone); sl@0: sl@0: testStep14.SetPosition(KTestDataSize + 2); sl@0: DoFileTest(testStep14, _L("File source ReadBufferL(33)"), KErrNone); sl@0: sl@0: TFileReadBuffer3TestStep testStep15(iSourceType, testFileName, zeroBuffer, 0, dataPtr, 0); sl@0: DoFileTest(testStep15, _L("File source ReadBufferL(34)"), KErrNone); sl@0: sl@0: TFileReadBuffer3TestStep testStep16(iSourceType, testFileName, bigBuffer, 0, dataPtr, KTestDataSize); sl@0: DoFileTest(testStep16, _L("File source ReadBufferL(35)"), KErrNone); sl@0: sl@0: // Test multiple read requests. sl@0: RPointerArray bufferArray; sl@0: CleanupClosePushL(bufferArray); sl@0: sl@0: User::LeaveIfError(bufferArray.Append(validBuffer)); sl@0: TFileReadBuffer5TestStep testStep17(iSourceType, testFileName, &bufferArray, 0, dummySink, dataPtr, KTestReadSize); sl@0: TFileReadBuffer6TestStep testStep18(iSourceType, testFileName, &bufferArray, 0, dummySink, dataPtr, KTestBufferSize); sl@0: DoFileTest(testStep17, _L("File source ReadBufferL(36)"), KErrNone); sl@0: DoFileTest(testStep18, _L("File source ReadBufferL(37)"), KErrNone); sl@0: sl@0: CMMFDescriptorBuffer* validBuffer2 = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer2); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer2)); sl@0: DoFileTest(testStep17, _L("File source ReadBufferL(38)"), KErrNone); sl@0: DoFileTest(testStep18, _L("File source ReadBufferL(39)"), KErrNone); sl@0: sl@0: CMMFDescriptorBuffer* validBuffer3 = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer3); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer3)); sl@0: DoFileTest(testStep17, _L("File source ReadBufferL(40)"), KErrNone); sl@0: DoFileTest(testStep18, _L("File source ReadBufferL(41)"), KErrNone); sl@0: sl@0: CMMFDescriptorBuffer* validBuffer4 = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer4); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer4)); sl@0: DoFileTest(testStep17, _L("File source ReadBufferL(42)"), KErrNone); sl@0: DoFileTest(testStep18, _L("File source ReadBufferL(43)"), KErrNone); sl@0: sl@0: CMMFDescriptorBuffer* validBuffer5 = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer5); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer5)); sl@0: DoFileTest(testStep17, _L("File source ReadBufferL(44)"), KErrNone); sl@0: DoFileTest(testStep18, _L("File source ReadBufferL(45)"), KErrNone); sl@0: sl@0: // Test multiple read requests that do not get completed. sl@0: testStep17.SetMaxRequestCount(3); sl@0: DoFileTest(testStep17, _L("File source FillBufferL(46)"), KErrNone); sl@0: sl@0: testStep18.SetMaxRequestCount(3); sl@0: DoFileTest(testStep18, _L("File source FillBufferL(47)"), KErrNone); sl@0: sl@0: // Test multiple read requests, checking correct deletion of completed requests. sl@0: CMMFClip* clip = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, testFsSession, KTest101FileName)); sl@0: CleanupDeletePushL(clip); sl@0: sl@0: User::LeaveIfError(clip->SourceThreadLogon(*dummySink)); sl@0: clip->SourcePrimeL(); sl@0: sl@0: TFileReadBuffer7TestStep testStep19(clip, &bufferArray, 0, dummySink, dataPtr, KTestBufferSize); sl@0: DoTestStep(testStep19, _L("File source FillBufferL(48)"), KErrNone, 4); sl@0: sl@0: CleanupStack::PopAndDestroy(clip); sl@0: sl@0: clip = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, testFsSession, KTest101FileName)); sl@0: CleanupDeletePushL(clip); sl@0: sl@0: User::LeaveIfError(clip->SourceThreadLogon(*dummySink)); sl@0: clip->SourcePrimeL(); sl@0: sl@0: TFileReadBuffer8TestStep testStep20(clip, &bufferArray, 0, dummySink, dataPtr, KTestBufferSize); sl@0: DoTestStep(testStep20, _L("File source FillBufferL(49)"), KErrNone, 4); sl@0: sl@0: CleanupStack::PopAndDestroy(clip); sl@0: sl@0: CleanupStack::PopAndDestroy(12, dataDes); // validBuffer5, 4, 3, 2, bufferArray, dummySink, bigBuffer, zeroBuffer, validBuffer, testFsSession, scheduler, dataDes sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0109 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0109::CTestStep_MMF_SRSSNK_U_0109() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0109"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0109 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0109::~CTestStep_MMF_SRSSNK_U_0109() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0109 sl@0: * sl@0: * Functional test of file source. sl@0: * Source custom commands test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0109::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest101FileName; sl@0: sl@0: TUid testControllerUid = { KMmfTestControllerUid }; sl@0: RMMFController dummyController; sl@0: TMMFPrioritySettings prioritySettings; sl@0: TMMFMessageDestinationPckg destination; sl@0: User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings)); sl@0: CleanupClosePushL(dummyController); sl@0: sl@0: TBuf8<1> dummyArgs; sl@0: User::LeaveIfError(dummyController.AddDataSource(KUidMmfFileSource, configDes)); sl@0: TInt err = dummyController.CustomCommandSync(destination, KDescriptorSource, dummyArgs, dummyArgs); sl@0: if (err != KErrNotSupported) sl@0: { sl@0: INFO_PRINTF2(_L("File source SourceCustomCommand: Expecting KErrNotSupported, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(); // dummyController sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileSinkMisc constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileSinkMisc::CTestStep_MMF_SRSSNK_FileSinkMisc(TSinkType aSinkType) sl@0: :iSinkType(aSinkType) sl@0: { sl@0: if (iSinkType == ESinkTypeFile) sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0110"); sl@0: } sl@0: else sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0130"); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileSinkMisc destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileSinkMisc::~CTestStep_MMF_SRSSNK_FileSinkMisc() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileSinkMisc sl@0: * sl@0: * Functional test of file sink. sl@0: * Misc. functions test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_FileSinkMisc::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: TFileName testFileName(KTest101FileName); sl@0: sl@0: // Get file info. sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()) ; sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: // Get the size of the test file. sl@0: RFile testFile; sl@0: User::LeaveIfError(testFile.Open(testFsSession, testFileName, EFileRead)); sl@0: CleanupClosePushL(testFile); sl@0: sl@0: TInt fileSize; sl@0: User::LeaveIfError(testFile.Size(fileSize)); sl@0: CleanupStack::PopAndDestroy(&testFile); sl@0: sl@0: // Create dummy source. sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: // Create sink. sl@0: MDataSink* sink = CreateFileSinkL(iSinkType, testFsSession, testFileName); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: // Test create sink buffer. (This should fail) sl@0: TCreateSinkBufferTestStep0 testStep(sink, KUidMmfDescriptorBuffer, ETrue, NULL); sl@0: DoTest(testStep, _L("File sink CreateSinkBuffer"), KErrNotSupported); sl@0: sl@0: // Test default base class fns. (These should all do nothing) sl@0: TSinkThreadLogonTestStep testStep2(sink, dummySource); sl@0: DoFileTest(testStep2, _L("File sink SinkThreadLogon"), KErrNone); sl@0: sl@0: TNegotiateTestStep testStep3(sink, dummySource); sl@0: DoTest(testStep3, _L("File sink NegotiateL"), KErrNone); sl@0: sl@0: sink->SinkPrimeL(); sl@0: sink->SinkPlayL(); sl@0: sink->SinkPauseL(); sl@0: sink->SinkStopL(); sl@0: sl@0: TMMFPrioritySettings prioritySettings; sl@0: sink->SetSinkPrioritySettings(prioritySettings); sl@0: sl@0: // Test sink log on. sl@0: sink->SinkPrimeL(); sl@0: TFileSinkThreadLogonTestStep testStep5(sink, dummySource, fileSize); sl@0: DoFileTest(testStep5, _L("File sink SinkThreadLogon"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: CleanupStack::PopAndDestroy(2, &testFsSession); //dummySource, testFsSession sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileEmptyBuffer constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileEmptyBuffer::CTestStep_MMF_SRSSNK_FileEmptyBuffer(TSinkType aSinkType) sl@0: : iSinkType(aSinkType) sl@0: { sl@0: if (iSinkType == ESinkTypeFile) sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0111"); sl@0: } sl@0: else sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0131"); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileEmptyBuffer destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileEmptyBuffer::~CTestStep_MMF_SRSSNK_FileEmptyBuffer() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileEmptyBuffer sl@0: * sl@0: * There was a flaw in that a failure in DoFileTest and its variants is overlooked. sl@0: * Each time it is called the status of iTestResult must be checked before it's sl@0: * overwritten. It is set to EPass again so that false negatives aren't recorded. sl@0: * sl@0: * The success of this test step depends on the 'failure' variable. sl@0: * sl@0: * EmptyBufferL() test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: _LIT(KTest111FileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile4.dat"); sl@0: TVerdict CTestStep_MMF_SRSSNK_FileEmptyBuffer::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: TBool failure = EFalse; sl@0: sl@0: // Create source buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Set the filename and create a file session. sl@0: TFileName testFileName(KTest111FileName); sl@0: sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()); sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: // Delete the test file (might exist from last time) sl@0: testFsSession.Delete(testFileName); sl@0: sl@0: // Create a dummy source. sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: // Create a zero length buffer. sl@0: CMMFDescriptorBuffer* zeroBuffer = CMMFDescriptorBuffer::NewL(0); sl@0: CleanupStack::PushL(zeroBuffer); sl@0: sl@0: // Create a valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Set the length to write. sl@0: validBuffer->Data().SetLength(KTestWriteSize); sl@0: sl@0: // Create the sink. sl@0: MDataSink* sink = CreateFileSinkL(iSinkType, testFsSession, testFileName); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: // Create a test (invalid) buffer. sl@0: CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer; sl@0: CleanupStack::PushL(testBuffer); sl@0: sl@0: // Test EmptyBufferL. sl@0: TFileEmptyBufferTestStep testStep(sink, testBuffer, dummySource, testFsSession, testFileName, dataPtr); sl@0: DoFileTest(testStep, _L("File sink EmptyBufferL(1)"), KErrNotSupported); sl@0: CleanupStack::PopAndDestroy(testBuffer); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L("File Sink EmptyBufferL(1) failed")); sl@0: failure = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: // Test valid EmptyBufferL. sl@0: TFileEmptyBufferTestStep testStep2(sink, validBuffer, dummySource, testFsSession, testFileName, dataPtr); sl@0: testStep2.SetAsynchronousWrite(ETrue); sl@0: DoFileTestWithoutAllocFail(testStep2, _L("File sink EmptyBufferL(2)"), KErrNone, 2); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L("File Sink EmptyBufferL(2) failed")); sl@0: failure = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: TFileEmptyBuffer2TestStep testStep3(iSinkType, validBuffer, dummySource, testFsSession, testFileName, dataPtr); sl@0: testStep3.SetAsynchronousWrite(ETrue); sl@0: DoFileTest(testStep3, _L("File sink EmptyBufferL(3)"), KErrNone); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L("File Sink EmptyBufferL(3) failed")); sl@0: failure = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: // Test complete empty. sl@0: TFileEmptyBuffer3TestStep testStep4(iSinkType, validBuffer, dummySource, testFsSession, testFileName, dataPtr); sl@0: testStep4.SetAsynchronousWrite(ETrue); sl@0: DoFileTest(testStep4, _L("File sink EmptyBufferL(4)"), KErrNone); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L("File Sink EmptyBufferL(4) failed")); sl@0: failure = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: // Test multiple write requests. sl@0: RPointerArray bufferArray; sl@0: CleanupClosePushL(bufferArray); sl@0: sl@0: User::LeaveIfError(bufferArray.Append(validBuffer)); sl@0: TFileEmptyBuffer4TestStep testStep5(iSinkType, &bufferArray, dummySource, testFsSession, testFileName, dataPtr); sl@0: testStep5.SetAsynchronousWrite(ETrue); sl@0: testStep5.SetWriteLength(KTestWriteSize); sl@0: DoFileTest(testStep5, _L("File sink EmptyBufferL(5)"), KErrNone); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L("File Sink EmptyBufferL(5) failed")); sl@0: failure = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: // Create valid buffer 2. sl@0: CMMFDescriptorBuffer* validBuffer2 = CMMFDescriptorBuffer::NewL(KTestWriteSize); sl@0: CleanupStack::PushL(validBuffer2); sl@0: sl@0: // Set the length to write. sl@0: validBuffer2->Data().SetLength(KTestWriteSize); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer2)); sl@0: DoFileTest(testStep5, _L("File sink EmptyBufferL(6)"), KErrNone); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L("File Sink EmptyBufferL(6) failed")); sl@0: failure = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: // Create valid buffer 3. sl@0: CMMFDescriptorBuffer* validBuffer3 = CMMFDescriptorBuffer::NewL(KTestWriteSize); sl@0: CleanupStack::PushL(validBuffer3); sl@0: sl@0: // Set the length to write. sl@0: validBuffer3->Data().SetLength(KTestWriteSize); sl@0: sl@0: User::LeaveIfError(bufferArray.Append(validBuffer3)); sl@0: DoFileTest(testStep5, _L("File sink EmptyBufferL(7)"), KErrNone); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L("File Sink EmptyBufferL(7) failed")); sl@0: failure = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: // Create valid buffer 4. sl@0: CMMFDescriptorBuffer* validBuffer4 = CMMFDescriptorBuffer::NewL(KTestWriteSize); sl@0: CleanupStack::PushL(validBuffer4); sl@0: sl@0: // Set the length to write. sl@0: validBuffer4->Data().SetLength(KTestWriteSize); sl@0: sl@0: User::LeaveIfError(bufferArray.Append(validBuffer4)); sl@0: DoFileTest(testStep5, _L("File sink EmptyBufferL(8)"), KErrNone); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L("File Sink EmptyBufferL(8) failed")); sl@0: failure = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: // Create valid buffer 5. sl@0: CMMFDescriptorBuffer* validBuffer5 = CMMFDescriptorBuffer::NewL(KTestWriteSize); sl@0: CleanupStack::PushL(validBuffer5); sl@0: sl@0: // Set the length to write. sl@0: validBuffer5->Data().SetLength(KTestWriteSize); sl@0: sl@0: User::LeaveIfError(bufferArray.Append(validBuffer5)); sl@0: DoFileTest(testStep5, _L("File sink EmptyBufferL(9)"), KErrNone); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L("File Sink EmptyBufferL(9) failed")); sl@0: failure = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: // Test multiple write requests that do not get completed. sl@0: TFileEmptyBuffer5TestStep testStep6(iSinkType, &bufferArray, dummySource, testFsSession, testFileName, dataPtr); sl@0: testStep6.SetAsynchronousWrite(ETrue); sl@0: testStep6.SetWriteLength(KTestWriteSize); sl@0: testStep6.SetMaxRequestCount(3); sl@0: DoFileTest(testStep6, _L("File sink EmptyBufferL(10)"), KErrNone); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L("File Sink EmptyBufferL(10) failed")); sl@0: failure = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: DeleteFileSinkL(iSinkType, testFsSession, testFileName); sl@0: sl@0: dataPtr.SetLength(0); sl@0: // Test multiple write requests, checking correct deletion of completed requests. sl@0: sink = CreateFileSinkL(iSinkType, testFsSession, testFileName); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sink->SinkPrimeL(); sl@0: sl@0: TFileEmptyBuffer6TestStep testStep7(sink, &bufferArray, dummySource, testFsSession, testFileName, dataPtr); sl@0: testStep7.SetAsynchronousWrite(ETrue); sl@0: testStep7.SetWriteLength(KTestWriteSize); sl@0: DoTestStep(testStep7, _L("File sink EmptyBufferL(11)"), KErrNone, 4); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L("File Sink EmptyBufferL(11) failed")); sl@0: failure = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: CleanupStack::PopAndDestroy(5, &bufferArray); // validBuffer5, 4, 3, 2, bufferArray. sl@0: sl@0: DeleteFileSinkL(iSinkType, testFsSession, testFileName); sl@0: sl@0: dataPtr.SetLength(0); sl@0: // Test zero length write. sl@0: TFileEmptyBuffer2TestStep testStep8(iSinkType, zeroBuffer, dummySource, testFsSession, testFileName, dataPtr); sl@0: testStep8.SetAsynchronousWrite(ETrue); sl@0: DoFileTest(testStep8, _L("File sink EmptyBufferL(12)"), KErrNone); sl@0: if (iTestResult != EPass) sl@0: { sl@0: INFO_PRINTF1(_L("File Sink EmptyBufferL(12) failed")); sl@0: failure = ETrue; sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: DeleteFileSinkL(iSinkType, testFsSession, testFileName); sl@0: sl@0: CleanupStack::PopAndDestroy(6, dataDes); // dummySource, validBuffer, zeroBuffer, testFsSession, scheduler, dataDes. sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return (failure ? EFail : EPass); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0112 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0112::CTestStep_MMF_SRSSNK_U_0112() sl@0: : CTestStep_MMF_SRSSNK(EFalse) sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0112"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0112 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0112::~CTestStep_MMF_SRSSNK_U_0112() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0112 sl@0: * sl@0: * Functional test of file sink. sl@0: * BufferFilledL() panic test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0112::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // This test fails if running a debug StdSourcesAndSinks dll. sl@0: // So only perform the test on target. sl@0: sl@0: iTestResult = EFail; sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest101FileName; sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Create file sink. sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfFileSink, configDes); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: // Test BufferFilledL sl@0: TRAPD(err, sink->BufferFilledL(validBuffer)); sl@0: if (err == KErrNone) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: CleanupStack::PopAndDestroy(validBuffer); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileWriteBuffer constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileWriteBuffer::CTestStep_MMF_SRSSNK_FileWriteBuffer(TSinkType aSinkType) sl@0: : iSinkType(aSinkType) sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: if (aSinkType == ESinkTypeFile) sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0113"); sl@0: } sl@0: else sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0132"); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileWriteBuffer destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileWriteBuffer::~CTestStep_MMF_SRSSNK_FileWriteBuffer() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileWriteBuffer sl@0: * sl@0: * Functional test of descriptor sink. sl@0: * WriteBufferL() test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_FileWriteBuffer::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Set the filename and create a file session. sl@0: TFileName testFileName(KTest103FileName); sl@0: sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()); sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configFile; sl@0: configFile().iPath = testFileName; sl@0: sl@0: // Create zero length buffer. sl@0: CMMFDescriptorBuffer* zeroBuffer = CMMFDescriptorBuffer::NewL(0); sl@0: CleanupStack::PushL(zeroBuffer); sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Set it's length sl@0: validBuffer->Data().SetLength(KTestWriteSize); sl@0: sl@0: // Create dummy source. sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: // Create sink. sl@0: CMMFClip* sink = static_cast (CreateFileSinkL(iSinkType, testFsSession, testFileName)); sl@0: CleanupStack::PushL(sink); sl@0: sl@0: // check that Size() can be called before SinkPrimeL() sl@0: TInt size = sink->Size(); sl@0: sl@0: User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sl@0: // Create a test (invalid) buffer. sl@0: CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer; sl@0: CleanupStack::PushL(testBuffer); sl@0: sl@0: // Test WriteBufferL (these tests should fail) sl@0: TFileWriteBufferTestStep testStep(sink, testBuffer, 0, dummySource, testFsSession, testFileName, dataPtr); sl@0: DoFileTest(testStep, _L("File sink WriteBufferL(1)"), KErrNotSupported); sl@0: sl@0: TFileWriteBuffer2TestStep testStep2(sink, testBuffer, 0, dummySource, testFsSession, testFileName, dataPtr); sl@0: DoFileTest(testStep2, _L("File sink WriteBufferL(2)"), KErrNotSupported); sl@0: sl@0: TFileWriteBuffer3TestStep testStep3(sink, testBuffer, 0, testFsSession, testFileName, dataPtr); sl@0: DoFileTest(testStep3, _L("File sink WriteBufferL(3)"), KErrNotSupported); sl@0: CleanupStack::PopAndDestroy(testBuffer); sl@0: sl@0: // Test writing to the beginning, middle and end. sl@0: TFileWriteBufferTestStep testStep4(sink, validBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: DoFileTestWithoutAllocFail(testStep4, _L("File sink WriteBufferL(4)"), KErrNone, 2); sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: TFileWriteBuffer4TestStep testStep5(iSinkType, testFileName, validBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: DoFileTest(testStep5, _L("File sink WriteBufferL(5)"), KErrNone); sl@0: sl@0: testStep5.SetPosition(1); sl@0: DoFileTest(testStep5, _L("File sink WriteBufferL(6)"), KErrNone); sl@0: sl@0: testStep5.SetPosition(KTestDataSize/2); sl@0: DoFileTest(testStep5, _L("File sink WriteBufferL(7)"), KErrNone); sl@0: sl@0: testStep5.SetPosition(KTestDataSize/2 + 1); sl@0: DoFileTest(testStep5, _L("File sink WriteBufferL(8)"), KErrNone); sl@0: sl@0: testStep5.SetPosition(KTestDataSize - 10); sl@0: testStep5.SetWriteLength(10); sl@0: DoFileTest(testStep5, _L("File sink WriteBufferL(9)"), KErrNone); sl@0: sl@0: testStep5.SetPosition(KTestDataSize); sl@0: testStep5.SetWriteLength(0); sl@0: DoFileTest(testStep5, _L("File sink WriteBufferL(10)"), KErrNone); sl@0: sl@0: testStep5.SetPosition(KTestDataSize + 2); sl@0: testStep5.SetWriteLength(0); sl@0: DoFileTest(testStep5, _L("File sink WriteBufferL(11)"), KErrNone); sl@0: sl@0: // Attempt to write more data than is in the buffer. sl@0: TFileWriteBuffer5TestStep testStep6(iSinkType, testFileName, validBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: testStep6.SetPosition(KTestDataSize); sl@0: testStep6.SetWriteLength(KTestOverWriteSize); sl@0: DoFileTest(testStep6, _L("File sink WriteBufferL(12)"), KErrNone); sl@0: sl@0: // Attempt to write a zero length buffer. sl@0: TFileWriteBuffer4TestStep testStep7(iSinkType, testFileName, zeroBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: testStep7.SetWriteLength(0); sl@0: DoFileTest(testStep7, _L("File sink WriteBufferL(13)"), KErrNone); sl@0: sl@0: sl@0: DeleteFileSinkL(iSinkType, testFsSession, testFileName); sl@0: sl@0: // Repeat writes without supplying the length to write. sl@0: dataPtr.SetLength(0); sl@0: sl@0: sink = static_cast (CreateFileSinkL(iSinkType, testFsSession, testFileName)); sl@0: CleanupStack::PushL(sink); sl@0: User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sl@0: TFileWriteBuffer2TestStep testStep8(sink, validBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: DoFileTestWithoutAllocFail(testStep8, _L("File sink WriteBufferL(14)"), KErrNone, 2); sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: TFileWriteBuffer6TestStep testStep9(iSinkType, testFileName, validBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: DoFileTest(testStep9, _L("File sink WriteBufferL(15)"), KErrNone); sl@0: sl@0: testStep9.SetPosition(1); sl@0: DoFileTest(testStep9, _L("File sink WriteBufferL(16)"), KErrNone); sl@0: sl@0: testStep9.SetPosition(KTestDataSize/2); sl@0: DoFileTest(testStep9, _L("File sink WriteBufferL(17)"), KErrNone); sl@0: sl@0: testStep9.SetPosition(KTestDataSize/2 + 1); sl@0: DoFileTest(testStep9, _L("File sink WriteBufferL(18)"), KErrNone); sl@0: sl@0: testStep9.SetPosition(KTestDataSize - 10); sl@0: testStep9.SetWriteLength(10); sl@0: DoFileTest(testStep9, _L("File sink WriteBufferL(19)"), KErrNone); sl@0: sl@0: testStep9.SetPosition(KTestDataSize); sl@0: testStep9.SetWriteLength(0); sl@0: DoFileTest(testStep9, _L("File sink WriteBufferL(20)"), KErrNone); sl@0: sl@0: testStep9.SetPosition(KTestDataSize + 2); sl@0: testStep9.SetWriteLength(0); sl@0: DoFileTest(testStep9, _L("File sink WriteBufferL(21)"), KErrNone); sl@0: sl@0: // Attempt to write a zero length buffer. sl@0: TFileWriteBuffer6TestStep testStep10(iSinkType, testFileName, zeroBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: testStep10.SetWriteLength(0); sl@0: DoFileTest(testStep10, _L("File sink WriteBufferL(22)"), KErrNone); sl@0: sl@0: // Delete the test file. sl@0: DeleteFileSinkL(iSinkType, testFsSession, testFileName); sl@0: sl@0: // Repeat writes without supplying the length, or a source. sl@0: dataPtr.SetLength(0); sl@0: sl@0: sink = static_cast (CreateFileSinkL(iSinkType, testFsSession, testFileName)); sl@0: CleanupStack::PushL(sink); sl@0: User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sl@0: TFileWriteBuffer3TestStep testStep11(sink, validBuffer, 0, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: DoFileTest(testStep11, _L("File sink WriteBufferL(23)"), KErrNone); sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: TFileWriteBuffer7TestStep testStep12(iSinkType, testFileName, validBuffer, 0, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: DoFileTest(testStep12, _L("File sink WriteBufferL(24)"), KErrNone); sl@0: sl@0: testStep12.SetPosition(1); sl@0: DoFileTest(testStep12, _L("File sink WriteBufferL(25)"), KErrNone); sl@0: sl@0: testStep12.SetPosition(KTestDataSize/2); sl@0: DoFileTest(testStep12, _L("File sink WriteBufferL(26)"), KErrNone); sl@0: sl@0: testStep12.SetPosition(KTestDataSize/2 + 1); sl@0: DoFileTest(testStep12, _L("File sink WriteBufferL(27)"), KErrNone); sl@0: sl@0: testStep12.SetPosition(KTestDataSize - 10); sl@0: testStep12.SetWriteLength(10); sl@0: DoFileTest(testStep12, _L("File sink WriteBufferL(28)"), KErrNone); sl@0: sl@0: testStep12.SetPosition(KTestDataSize); sl@0: testStep12.SetWriteLength(0); sl@0: DoFileTest(testStep12, _L("File sink WriteBufferL(29)"), KErrNone); sl@0: sl@0: testStep12.SetPosition(KTestDataSize + 2); sl@0: testStep12.SetWriteLength(0); sl@0: DoFileTest(testStep12, _L("File sink WriteBufferL(30)"), KErrNone); sl@0: sl@0: // Attempt to write a zero length buffer. sl@0: TFileWriteBuffer7TestStep testStep13(iSinkType, testFileName, zeroBuffer, 0, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: testStep13.SetWriteLength(0); sl@0: DoFileTest(testStep13, _L("File sink WriteBufferL(31)"), KErrNone); sl@0: sl@0: // Delete the test file. sl@0: DeleteFileSinkL(iSinkType, testFsSession, testFileName); sl@0: sl@0: // Test multiple write requests. sl@0: dataPtr.SetLength(0); sl@0: RPointerArray bufferArray; sl@0: CleanupClosePushL(bufferArray); sl@0: sl@0: User::LeaveIfError(bufferArray.Append(validBuffer)); sl@0: TFileWriteBuffer8TestStep testStep14(iSinkType, testFileName, &bufferArray, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: TFileWriteBuffer9TestStep testStep15(iSinkType, testFileName, &bufferArray, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: DoFileTest(testStep14, _L("File sink WriteBufferL(32)"), KErrNone); sl@0: DoFileTest(testStep15, _L("File sink WriteBufferL(33)"), KErrNone); sl@0: sl@0: CMMFDescriptorBuffer* validBuffer2 = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer2); sl@0: sl@0: validBuffer2->Data().SetLength(KTestWriteSize); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer2)); sl@0: DoFileTest(testStep14, _L("File sink WriteBufferL(34)"), KErrNone); sl@0: DoFileTest(testStep15, _L("File sink WriteBufferL(35)"), KErrNone); sl@0: sl@0: CMMFDescriptorBuffer* validBuffer3 = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer3); sl@0: sl@0: validBuffer3->Data().SetLength(KTestWriteSize); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer3)); sl@0: DoFileTest(testStep14, _L("File sink WriteBufferL(36)"), KErrNone); sl@0: DoFileTest(testStep15, _L("File sink WriteBufferL(37)"), KErrNone); sl@0: sl@0: CMMFDescriptorBuffer* validBuffer4 = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer4); sl@0: sl@0: validBuffer4->Data().SetLength(KTestWriteSize); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer4)); sl@0: DoFileTest(testStep14, _L("File sink WriteBufferL(38)"), KErrNone); sl@0: DoFileTest(testStep15, _L("File sink WriteBufferL(39)"), KErrNone); sl@0: sl@0: CMMFDescriptorBuffer* validBuffer5 = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer5); sl@0: sl@0: validBuffer5->Data().SetLength(KTestWriteSize); sl@0: User::LeaveIfError(bufferArray.Append(validBuffer5)); sl@0: DoFileTest(testStep14, _L("File sink WriteBufferL(40)"), KErrNone); sl@0: DoFileTest(testStep15, _L("File sink WriteBufferL(41)"), KErrNone); sl@0: sl@0: // Test multiple write requests that do not get completed. sl@0: TFileWriteBuffer10TestStep testStep16(iSinkType, testFileName, &bufferArray, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: DoFileTest(testStep16, _L("File sink WriteBufferL(42)"), KErrNone); sl@0: sl@0: TFileWriteBuffer11TestStep testStep17(iSinkType, testFileName, &bufferArray, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: DoFileTest(testStep17, _L("File sink WriteBufferL(43)"), KErrNone); sl@0: sl@0: // Test multiple write requests, checking correct deletion of completed requests. sl@0: CMMFClip* clip = static_cast (CreateFileSinkL(iSinkType, testFsSession, testFileName)); sl@0: CleanupDeletePushL(clip); sl@0: sl@0: User::LeaveIfError(clip->SinkThreadLogon(*dummySource)); sl@0: TFileWriteBuffer12TestStep testStep18(clip, &bufferArray, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: DoTestStep(testStep18, _L("File sink WriteBufferL(44)"), KErrNone, 4); sl@0: sl@0: CleanupStack::PopAndDestroy(clip); sl@0: sl@0: clip = static_cast (CreateFileSinkL(iSinkType, testFsSession, testFileName)); sl@0: CleanupStack::PushL(clip); sl@0: sl@0: User::LeaveIfError(clip->SinkThreadLogon(*dummySource)); sl@0: TFileWriteBuffer13TestStep testStep19(clip, &bufferArray, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize); sl@0: DoTestStep(testStep19, _L("File sink WriteBufferL(45)"), KErrNone, 4); sl@0: sl@0: CleanupStack::PopAndDestroy(clip); sl@0: sl@0: // Delete the test file. sl@0: DeleteFileSinkL(iSinkType, testFsSession, testFileName); sl@0: sl@0: CleanupStack::PopAndDestroy(11, dataDes); // validBuffer5, 4, 3, 2, bufferArray, dummySource, validBuffer, zeroBuffer, testFsSession, scheduler, dataDes sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0114 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0114::CTestStep_MMF_SRSSNK_U_0114() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0114"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0114 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0114::~CTestStep_MMF_SRSSNK_U_0114() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0114 sl@0: * sl@0: * Functional test of file sink. sl@0: * SinkCustomCommand() test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0114::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest101FileName; sl@0: sl@0: TUid testControllerUid = { KMmfTestControllerUid }; sl@0: RMMFController dummyController; sl@0: TMMFPrioritySettings prioritySettings; sl@0: TMMFMessageDestinationPckg destination; sl@0: User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings)); sl@0: CleanupClosePushL(dummyController); sl@0: sl@0: TBuf8<1> dummyArgs; sl@0: User::LeaveIfError(dummyController.AddDataSink(KUidMmfFileSink, configDes)); sl@0: TInt err = dummyController.CustomCommandSync(destination, KDescriptorSink, dummyArgs, dummyArgs); sl@0: if (err != KErrNotSupported) sl@0: { sl@0: INFO_PRINTF2(_L("File sink SinkCustomCommand: Expecting KErrNotSupported, actually got %d"), err); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(&dummyController); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0115 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0115::CTestStep_MMF_SRSSNK_U_0115() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0115"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0115 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0115::~CTestStep_MMF_SRSSNK_U_0115() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0115 sl@0: * sl@0: * CMMFFile sl@0: * Request size / SetLastBuffer test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0115::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Create source buffer. sl@0: HBufC8* dataDes = HBufC8::NewLC(KTestDataSize); sl@0: TPtr8 dataPtr(dataDes->Des()); sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest101FileName; sl@0: sl@0: // Read the data from the file. sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()) ; sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: RFile testFile; sl@0: User::LeaveIfError(testFile.Open(testFsSession, configDes().iPath, EFileShareReadersOnly)); sl@0: CleanupClosePushL(testFile); sl@0: sl@0: User::LeaveIfError(testFile.Read(dataPtr)); sl@0: CleanupStack::PopAndDestroy(2); // testFile, testFsSession sl@0: sl@0: // Create dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: // Test fill last buffer sl@0: TFillLastBufferTestStep testStep(KUidMmfFileSource, configDes, dummySink, dataPtr); sl@0: testStep.SetAsynchronousRead(ETrue); sl@0: DoFileTest(testStep, _L("File source: Fill last buffer"), KErrNone); sl@0: sl@0: // Create a source. sl@0: CMMFClip* source = STATIC_CAST(CMMFClip*, MDataSource::NewSourceL(KUidMmfFileSource, configDes)); sl@0: CleanupDeletePushL(source); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: // Test read last buffer (API version 1) sl@0: TReadLastBufferTestStep testStep2(source, dummySink, dataPtr); sl@0: testStep2.SetAsynchronousRead(ETrue); sl@0: DoFileTestWithoutAllocFail(testStep2, _L("File source: Read last buffer"), KErrNone, 2); sl@0: sl@0: TReadLastBuffer2TestStep testStep3(source, dummySink, dataPtr); sl@0: testStep3.SetAsynchronousRead(ETrue); sl@0: DoFileTestWithoutAllocFail(testStep3, _L("File source: Read last buffer"), KErrNone, 2); sl@0: sl@0: TReadLastBuffer3TestStep testStep4(source, dataPtr); sl@0: testStep4.SetAsynchronousRead(ETrue); sl@0: DoFileTestWithoutAllocFail(testStep4, _L("File source: Read last buffer"), KErrNone, 2); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(3, dataDes); // dummySink, scheduler, dataDes sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileEvaluateIntent constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileEvaluateIntent::CTestStep_MMF_SRSSNK_FileEvaluateIntent(TSourceType aSourceType) sl@0: : iSourceType(aSourceType) sl@0: { sl@0: if (aSourceType == ESourceTypeFile) sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0116"); sl@0: iSinkType = ESinkTypeFile; sl@0: } sl@0: else sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0140"); sl@0: iSinkType = ESinkTypeFileHandle; sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileEvaluateIntent destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileEvaluateIntent::~CTestStep_MMF_SRSSNK_FileEvaluateIntent() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileEvaluateIntent sl@0: * sl@0: * CMMFFile sl@0: * Evaluate Intent sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_FileEvaluateIntent::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: TFileName testFileName(KTest101FileName); sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()); sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: // Create dummy source sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: sl@0: // Create dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: sl@0: // Create a source. sl@0: CMMFClip* source = static_cast(CreateFileSourceL(iSourceType, testFsSession, testFileName)); sl@0: CleanupDeletePushL(source); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: // we know it is a file source since we have just created it sl@0: CMMFFile* file = static_cast(source); sl@0: sl@0: // file open, for unprotected files this should always return KErrNone sl@0: TInt err = file->EvaluateIntent(EPeek); sl@0: if (err != KErrNone) sl@0: iTestResult = EFail; sl@0: sl@0: source->SourceStopL(); sl@0: sl@0: // file closed sl@0: err = file->EvaluateIntent(EPeek); sl@0: if (((iSinkType == ESinkTypeFile) && (err != KErrNotReady)) || sl@0: ((iSinkType == ESinkTypeFileHandle) && (err != KErrNone))) sl@0: { sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: // Create a sink. sl@0: CMMFClip* sink = static_cast(CreateFileSinkL(iSinkType, testFsSession, testFileName)); sl@0: CleanupDeletePushL(sink); sl@0: User::LeaveIfError(sink->SourceThreadLogon(*dummySource)); sl@0: sink->SinkPrimeL(); sl@0: sl@0: // we know it is a file sink since we have just created it sl@0: file = static_cast(sink); sl@0: sl@0: // file open, for unprotected files this should always return KErrNone sl@0: err = file->EvaluateIntent(EPeek); sl@0: if (err != KErrNone) sl@0: iTestResult = EFail; sl@0: sl@0: sink->SinkStopL(); sl@0: sl@0: // file closed sl@0: err = file->EvaluateIntent(EPeek); sl@0: if (((iSinkType == ESinkTypeFile) && (err != KErrNotReady)) || sl@0: ((iSinkType == ESinkTypeFileHandle) && (err != KErrNone))) sl@0: { sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: sl@0: CleanupStack::PopAndDestroy(4, scheduler); // dummySink, dummySource, testFsSession, scheduler sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileExecuteIntent constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileExecuteIntent::CTestStep_MMF_SRSSNK_FileExecuteIntent(TSourceType aSourceType) sl@0: : iSourceType(aSourceType) sl@0: { sl@0: if (aSourceType == ESourceTypeFile) sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0117"); sl@0: iSinkType = ESinkTypeFile; sl@0: } sl@0: else sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0141"); sl@0: iSinkType = ESinkTypeFileHandle; sl@0: } sl@0: sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileExecuteIntent destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileExecuteIntent::~CTestStep_MMF_SRSSNK_FileExecuteIntent() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileExecuteIntent sl@0: * sl@0: * CMMFFile sl@0: * Execute Intent test sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_FileExecuteIntent::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: TFileName testFileName(KTest101FileName); sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()); sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: // Create dummy source sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: sl@0: // Create dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: sl@0: // Create a source. sl@0: CMMFClip* source = static_cast(CreateFileSourceL(iSourceType, testFsSession, testFileName)); sl@0: CleanupDeletePushL(source); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: // we know it is a file source since we have just created it sl@0: CMMFFile* file = static_cast(source); sl@0: sl@0: // file open, for unprotected files this should always return KErrNone sl@0: TInt err = file->ExecuteIntent(EPeek); sl@0: if (err != KErrNone) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), KErrNone, err); sl@0: } sl@0: sl@0: source->SourceStopL(); sl@0: sl@0: // file closed sl@0: err = file->ExecuteIntent(EPeek); sl@0: if (((iSinkType == ESinkTypeFile) && (err != KErrNotReady)) || sl@0: ((iSinkType == ESinkTypeFileHandle) && (err != KErrNone))) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), iSinkType == ESinkTypeFile ? KErrNotReady : KErrNone, err); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: // Create a sink. sl@0: CMMFClip* sink = static_cast(CreateFileSinkL(iSinkType, testFsSession, testFileName)); sl@0: CleanupDeletePushL(sink); sl@0: User::LeaveIfError(sink->SourceThreadLogon(*dummySource)); sl@0: sink->SinkPrimeL(); sl@0: sl@0: // we know it is a file sink since we have just created it sl@0: file = static_cast(sink); sl@0: sl@0: // file open, for unprotected files this should always return KErrNone sl@0: err = file->ExecuteIntent(EPeek); sl@0: if (err != KErrNone) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), KErrNone, err); sl@0: } sl@0: sl@0: sink->SinkStopL(); sl@0: sl@0: // file closed sl@0: err = file->ExecuteIntent(EPeek); sl@0: if (((iSinkType == ESinkTypeFile) && (err != KErrNotReady)) || sl@0: ((iSinkType == ESinkTypeFileHandle) && (err != KErrNone))) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), iSinkType == ESinkTypeFile ? KErrNotReady : KErrNone, err); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: sl@0: CleanupStack::PopAndDestroy(4, scheduler); // dummySink, dummySource, testFsSession, scheduler sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileIsProtected constructor sl@0: * sl@0: * IsProtected Test sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileIsProtected::CTestStep_MMF_SRSSNK_FileIsProtected(TSourceType aSourceType) sl@0: : iSourceType(aSourceType) sl@0: { sl@0: if (aSourceType == ESourceTypeFile) sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0118"); sl@0: iSinkType = ESinkTypeFile; sl@0: } sl@0: else sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0142"); sl@0: iSinkType = ESinkTypeFileHandle; sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileIsProtected destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_FileIsProtected::~CTestStep_MMF_SRSSNK_FileIsProtected() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_FileIsProtected sl@0: * sl@0: * CMMFFile sl@0: * Execute Intent test sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_FileIsProtected::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: TFileName testFileName(KTest101FileName); sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()); sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: // Create dummy source sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: sl@0: // Create dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: sl@0: // Create a source. sl@0: CMMFClip* source = static_cast(CreateFileSourceL(iSourceType, testFsSession, testFileName)); sl@0: CleanupDeletePushL(source); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: // we know it is a file source since we have just created it sl@0: CMMFFile* file = static_cast(source); sl@0: sl@0: TBool isProtected = EFalse; sl@0: TInt err = KErrNone; sl@0: // file open, for unprotected files this should always be false sl@0: TRAP(err, isProtected = file->IsProtectedL()); sl@0: if (err != KErrNone) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), KErrNone, err); sl@0: } sl@0: else if (isProtected) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF1(_L("Failure, expected unprotected file")); sl@0: } sl@0: sl@0: source->SourceStopL(); sl@0: sl@0: // file closed, should leave KErrNotReady sl@0: TRAP(err, isProtected = file->IsProtectedL()); sl@0: if (((iSinkType == ESinkTypeFile) && (err != KErrNotReady)) || sl@0: ((iSinkType == ESinkTypeFileHandle) && (err != KErrNone))) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), iSinkType == ESinkTypeFile ? KErrNotReady : KErrNone, err); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: // Create a sink. sl@0: CMMFClip* sink = static_cast(CreateFileSinkL(iSinkType, testFsSession, testFileName)); sl@0: CleanupDeletePushL(sink); sl@0: User::LeaveIfError(sink->SourceThreadLogon(*dummySource)); sl@0: sink->SinkPrimeL(); sl@0: sl@0: // we know it is a file sink since we have just created it sl@0: file = static_cast(sink); sl@0: sl@0: // file open, for unprotected files this should always return EFalse sl@0: TRAP(err, isProtected = file->IsProtectedL()); sl@0: if (err != KErrNone) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), KErrNone, err); sl@0: } sl@0: else if (isProtected) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF1(_L("Failure, expected unprotected file")); sl@0: } sl@0: sl@0: sink->SinkStopL(); sl@0: sl@0: // file closed, should leave KErrNotReady sl@0: TRAP(err, isProtected = file->IsProtectedL()); sl@0: if (((iSinkType == ESinkTypeFile) && (err != KErrNotReady)) || sl@0: ((iSinkType == ESinkTypeFileHandle) && (err != KErrNone))) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), iSinkType == ESinkTypeFile ? KErrNotReady : KErrNone, err); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: sl@0: CleanupStack::PopAndDestroy(4, scheduler); // dummySink, dummySource, testFsSession, scheduler sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0119 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0119::CTestStep_MMF_SRSSNK_U_0119() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0119"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0119 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0119::~CTestStep_MMF_SRSSNK_U_0119() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0119 sl@0: * sl@0: * CMMFFile sl@0: * Test file access denied sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0119::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EPass; sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest101FileName; sl@0: sl@0: // lock the file by opening it for writing for the duration of this test sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: sl@0: RFile file; sl@0: User::LeaveIfError(file.Open(fs,KTest101FileName, EFileWrite)); sl@0: CleanupClosePushL(file); sl@0: sl@0: // Create dummy source sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: sl@0: // Create dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: sl@0: // Create a source. sl@0: CMMFClip* source = static_cast(MDataSource::NewSourceL(KUidMmfFileSource, configDes)); sl@0: CleanupDeletePushL(source); sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: TRAPD(err, source->SourcePrimeL()); sl@0: if (err != KErrInUse) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), KErrInUse, err); sl@0: } sl@0: sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: // Create a sink. sl@0: CMMFClip* sink = static_cast(MDataSink::NewSinkL(KUidMmfFileSink, configDes)); sl@0: CleanupDeletePushL(sink); sl@0: User::LeaveIfError(sink->SourceThreadLogon(*dummySource)); sl@0: sl@0: TRAP(err, sink->SinkPrimeL()); sl@0: if (err != KErrInUse) sl@0: sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), KErrInUse, err); sl@0: } sl@0: sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: sl@0: CleanupStack::PopAndDestroy(5, scheduler); // dummySink, dummySource, file, fs, scheduler sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0201 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0201::CTestStep_MMF_SRSSNK_U_0201() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0201"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0201 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0201::~CTestStep_MMF_SRSSNK_U_0201() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0201 sl@0: * sl@0: * Test creation/destruction of descriptor source. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0201::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Test construction/destruction. sl@0: TBuf8<1> configDes; sl@0: TNewSourceTestStep testStep(KUidMmfAudioInput, configDes); sl@0: DoTest(testStep, _L("Construct audio source"), KErrNone); sl@0: sl@0: // Create dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: // Create an audio source. sl@0: MDataSource* source = MDataSource::NewSourceL(KUidMmfAudioInput, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->SourcePrimeL(); sl@0: sl@0: // Test that the source is initialised correctly. sl@0: TSourceTypeTestStep testStep2(source, KUidMmfAudioInput, KMMFFourCCCodePCM16, ETrue); sl@0: DoTest(testStep2, _L("Audio source type"), KErrNone); sl@0: sl@0: TCanCreateSourceBufferTestStep testStep3(source, ETrue); sl@0: DoTest(testStep3, _L("Audio Can create source buffer"), KErrNone); sl@0: sl@0: TSourceSampleConvertTestStep testStep4(source, EFalse); sl@0: DoTest(testStep4, _L("Audio source sample convert"), KErrNone); sl@0: sl@0: // Test that the audio source is initialised correctly. sl@0: CMMFAudioInput* sourceAudioInput = STATIC_CAST(CMMFAudioInput*, source); sl@0: sl@0: // XXX These fns. go bang after construction. This is not good. sl@0: // They are ok, provided we have logged on and called SourcePrimeL(). sl@0: #ifndef SYMBIAN_MULTIMEDIA_A3FDEVSOUND sl@0: if (sourceAudioInput->SoundDevice().Volume() != 0) sl@0: #else sl@0: if (sourceAudioInput->SoundDevice().Volume() != (sourceAudioInput->SoundDevice().MaxVolume() + 1) / 2) sl@0: #endif sl@0: { sl@0: #ifndef SYMBIAN_MULTIMEDIA_A3FDEVSOUND sl@0: INFO_PRINTF1(_L("Audio Input: Device volume != 0\n")); sl@0: #else sl@0: INFO_PRINTF2(_L("Audio Input: Device volume != %d\n"), (sourceAudioInput->SoundDevice().MaxVolume() + 1) / 2); sl@0: #endif sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: if (sourceAudioInput->BytesPlayed() != 0) sl@0: { sl@0: INFO_PRINTF1(_L("Audio Input: Bytes played != 0\n")); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(dummySink); sl@0: CleanupStack::PopAndDestroy(scheduler); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0202 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0202::CTestStep_MMF_SRSSNK_U_0202() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0202"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0202 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0202::~CTestStep_MMF_SRSSNK_U_0202() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0202 sl@0: * sl@0: * Test creation/destruction of audio sink. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0202::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Test construction/destruction. sl@0: TBuf8<1> configDes; sl@0: TNewSinkTestStep testStep(KUidMmfAudioOutput, configDes); sl@0: DoTest(testStep, _L("Construct audio sink"), KErrNone); sl@0: sl@0: // Create a dummy source. sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: // Create an audio sink. sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, configDes); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sink->SinkPrimeL(); sl@0: sl@0: // Test that the sink is initialised correctly. sl@0: TSinkTypeTestStep testStep2(sink, KUidMmfAudioOutput, KMMFFourCCCodePCM16, ETrue); sl@0: DoTest(testStep2, _L("Audio sink type"), KErrNone); sl@0: sl@0: TCanCreateSinkBufferTestStep testStep3(sink, ETrue); sl@0: DoTest(testStep3, _L("Audio Can create sink buffer"), KErrNone); sl@0: sl@0: // Test that the audio sink is initialised correctly. sl@0: CMMFAudioOutput* sinkAudioOutput = STATIC_CAST(CMMFAudioOutput*, sink); sl@0: if (sinkAudioOutput->BytesPlayed() != 0) sl@0: { sl@0: INFO_PRINTF1(_L("Audio Input: Bytes played != 0\n")); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: CleanupStack::PopAndDestroy(dummySource); sl@0: CleanupStack::PopAndDestroy(scheduler); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0203 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0203::CTestStep_MMF_SRSSNK_U_0203() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0203"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0203 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0203::~CTestStep_MMF_SRSSNK_U_0203() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0203 sl@0: * sl@0: * Test audio source misc. fns. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0203::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: const TInt KDevSoundMaxFrameSize = 0x4000; //16K from SoundDeviceBody.h sl@0: sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Create a dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: // Create an audio source. sl@0: TBuf8<1> configDes; sl@0: MDataSource* source = MDataSource::NewSourceL(KUidMmfAudioInput, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: // Test create source buffer. sl@0: TCreateSourceBuffer1TestStep testStep(ESourceTypeAudio, dummySink, KUidMmfPtrBuffer, ETrue, KDevSoundMaxFrameSize); sl@0: sl@0: DoTest(testStep, _L("Audio source CreateSourceBuffer1"), KErrNone); sl@0: sl@0: sl@0: sl@0: TCreateSourceBuffer2TestStep testStep2(ESourceTypeAudio, dummySink, NULL, KUidMmfPtrBuffer, ETrue, KDevSoundMaxFrameSize); sl@0: sl@0: sl@0: sl@0: DoTest(testStep2, _L("Audio source CreateSourceBuffer2"), KErrNone); sl@0: sl@0: CMMFAudioInput* sourceAudioInput = STATIC_CAST(CMMFAudioInput*, source); sl@0: TAudioInputCreateSourceBuffer1TestStep testStep3(sourceAudioInput); sl@0: DoTest(testStep3, _L("Audio source CreateSourceBuffer3"), KErrNone); sl@0: sl@0: TAudioInputCreateSourceBuffer2TestStep testStep4(sourceAudioInput, NULL); sl@0: DoTest(testStep4, _L("Audio source CreateSourceBuffer4"), KErrNone); sl@0: sl@0: // Test the rest... sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: sl@0: TFourCC fourCC = KMMFFourCCCodePCM16; sl@0: TFourCC emptyFourCC; sl@0: sl@0: TBufC8<5> fourCCString(KEmptyFourCCCode); sl@0: TPtr8 fourCCPtr = fourCCString.Des(); sl@0: TPtr8 fourCCPtr1(&fourCCPtr[0], 4); sl@0: emptyFourCC.FourCC(&fourCCPtr1); sl@0: source->NegotiateSourceL(*dummySink); sl@0: sl@0: TMediaId mediaId; sl@0: if ((source->SourceDataTypeCode(mediaId) != fourCC) && (source->SourceDataTypeCode(mediaId) != emptyFourCC)) sl@0: { sl@0: INFO_PRINTF1(_L("Audio Input: NegotiateL source code does not match\n")); sl@0: iTestResult = EFail; sl@0: } sl@0: sl@0: source->SourcePrimeL(); sl@0: source->SourcePlayL(); sl@0: source->SourcePauseL(); sl@0: source->SourceStopL(); sl@0: sl@0: TMMFPrioritySettings prioritySettings; sl@0: source->SetSourcePrioritySettings(prioritySettings); sl@0: sl@0: source->SourceThreadLogoff(); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(dummySink); sl@0: CleanupStack::PopAndDestroy(scheduler); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0204 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0204::CTestStep_MMF_SRSSNK_U_0204() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0204"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0204 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0204::~CTestStep_MMF_SRSSNK_U_0204() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0204 sl@0: * sl@0: * Functional test of audio input sl@0: * FillBuifferL test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0204::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Create valid buffer. sl@0: // NB: a valid buffer will be created by DevSound through asynchronous buffer creation. sl@0: CMMFDescriptorBuffer* validBuffer = NULL; sl@0: sl@0: // Create a dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: // Create an audio source. sl@0: TBuf8<1> configDes; sl@0: MDataSource* source = MDataSource::NewSourceL(KUidMmfAudioInput, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: // Test fill source buffer. sl@0: User::LeaveIfError(source->SourceThreadLogon(*dummySink)); sl@0: source->NegotiateSourceL(*dummySink); sl@0: source->SourcePrimeL(); sl@0: sl@0: // Create a test (invalid) buffer. sl@0: CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer; sl@0: CleanupStack::PushL(testBuffer); sl@0: sl@0: // Invalid fill buffer. sl@0: TAudioInputFillBufferTestStep testStep(source, testBuffer, dummySink); sl@0: DoTest(testStep, _L("Audio Input: FillBufferL"), KErrNotSupported); sl@0: CleanupStack::PopAndDestroy(testBuffer); sl@0: sl@0: sl@0: // If we have buffer cycling switched on the DevSound, allocs will occur as sl@0: // the buffers are switched over. This will cause the __MM_HEAP_MARKENDC() macro to fail. sl@0: TUint expectedAllocs=0; sl@0: sl@0: // Valid fill buffer. sl@0: TAudioInputFillBufferTestStep testStep2(source, validBuffer, dummySink); sl@0: DoTest(testStep2, _L("Audio Input: FillBufferL"), KErrNone,expectedAllocs); sl@0: sl@0: // Valid fill buffer. (Make multiple requests) sl@0: TAudioInputFillBuffer2TestStep testStep3(source, validBuffer, dummySink); sl@0: DoTest(testStep3, _L("Audio Input: FillBufferL"), KErrNone,expectedAllocs); sl@0: sl@0: // XXX Valid fill buffer. (Make multiple requests at once) sl@0: // removed below lines because the audio input currently doesn't support multiple requests. sl@0: // TAudioInputFillBuffer3TestStep testStep4(source, validBuffer, dummySink); sl@0: // DoTest(testStep4, _L("Audio Input: FillBufferL"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: // Repeat tests, creating a source each time. sl@0: // Valid fill buffer. sl@0: TAudioInputFillBuffer4TestStep testStep5(validBuffer, dummySink); sl@0: DoTest(testStep5, _L("Audio Input: FillBufferL"), KErrNone); sl@0: sl@0: // Valid fill buffer. (Make multiple requests) sl@0: TAudioInputFillBuffer5TestStep testStep6(validBuffer, dummySink); sl@0: DoTest(testStep6, _L("Audio Input: FillBufferL"), KErrNone); sl@0: sl@0: // xxx Valid fill buffer. (Make multiple requests at once) sl@0: // removed below lines because the audio input currently doesn't support multiple requests. sl@0: // TAudioInputFillBuffer6TestStep testStep7(validBuffer, dummySink); sl@0: // DoTest(testStep7, _L("Audio Input: FillBufferL"), KErrNone); sl@0: sl@0: // Valid fill buffer + pause + fill (should pass, we can now pause AudioInput and still request data already captured) sl@0: TAudioInputFillBuffer7TestStep testStep8(validBuffer, dummySink); sl@0: DoTest(testStep8, _L("Audio Input: FillBufferL"), KErrNone); sl@0: sl@0: // Valid fill buffer + stop + fill (should fail) sl@0: TAudioInputFillBuffer8TestStep testStep9(validBuffer, dummySink); sl@0: DoTest(testStep9, _L("Audio Input: FillBufferL"), KErrNotReady); sl@0: sl@0: CleanupStack::PopAndDestroy(2, scheduler); // dummySink, scheduler sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0205 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0205::CTestStep_MMF_SRSSNK_U_0205() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0205"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0205 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0205::~CTestStep_MMF_SRSSNK_U_0205() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0205 sl@0: * sl@0: * Functional test of audio input source. sl@0: * BufferEmptiedL() test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0205::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Create source file. sl@0: TBuf8<1> configDes; sl@0: MDataSource* source = MDataSource::NewSourceL(KUidMmfAudioInput, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: // Test BufferEmptiedL sl@0: TRAPD(err, source->BufferEmptiedL(validBuffer)); sl@0: if (err == KErrNone) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(2, validBuffer); // source, validBuffer sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0206 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0206::CTestStep_MMF_SRSSNK_U_0206() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0206"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0206 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0206::~CTestStep_MMF_SRSSNK_U_0206() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0206 sl@0: * sl@0: * Functional test of audio input source. sl@0: * Source custom commands test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0206::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: TUid testControllerUid = { KMmfTestControllerUid }; sl@0: RMMFController dummyController; sl@0: TMMFPrioritySettings prioritySettings; sl@0: TMMFMessageDestinationPckg destination; sl@0: User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings)); sl@0: CleanupClosePushL(dummyController); sl@0: sl@0: TBuf8<1> dummyArgs; sl@0: User::LeaveIfError(dummyController.AddDataSource(KUidMmfAudioInput, dummyArgs)); sl@0: TInt err = dummyController.CustomCommandSync(destination, KDescriptorSource, dummyArgs, dummyArgs); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("File source SourceCustomCommand: Expecting KErrNotSupported, actually got %d"), err); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(); // dummyController sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0207 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0207::CTestStep_MMF_SRSSNK_U_0207() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0207"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0207 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0207::~CTestStep_MMF_SRSSNK_U_0207() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0207 sl@0: * sl@0: * Functional test of audio input source. sl@0: * Misc. fns. test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0207::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Create a dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: // Create source file. sl@0: TBuf8<1> configDes; sl@0: iSource = STATIC_CAST(CMMFAudioInput*, MDataSource::NewSourceL(KUidMmfAudioInput, configDes)); sl@0: CleanupStack::PushL(iSource); sl@0: sl@0: User::LeaveIfError(iSource->SourceThreadLogon(*dummySink)); sl@0: iSource->SourcePrimeL(); sl@0: sl@0: iSource->SoundDevice().InitializeL(*this, EMMFStatePlaying); sl@0: CActiveScheduler::Start(); // wait for InitializeComplete callback sl@0: sl@0: //post InitializeComplete callback sl@0: sl@0: if(iError!=KErrNone) sl@0: iTestResult=EFail; sl@0: sl@0: sl@0: CleanupStack::PopAndDestroy(3,scheduler); // dummySink, iSource, scheduler sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: void CTestStep_MMF_SRSSNK_U_0207::InitializeComplete(TInt aError) sl@0: { sl@0: CActiveScheduler::Stop(); sl@0: iError=aError; sl@0: if(iError==KErrNone) sl@0: { sl@0: TRAP(iError,iSource->SoundDevice().PlayInitL()); sl@0: } sl@0: sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0208 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0208::CTestStep_MMF_SRSSNK_U_0208() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0208"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0208 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0208::~CTestStep_MMF_SRSSNK_U_0208() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0208 sl@0: * sl@0: * Functional test of audio output. sl@0: * Misc. fns. test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: _LIT(KTest208FileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile1.wav"); sl@0: _LIT(KTest208SWFileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile2.wav"); sl@0: // DevSound now calculates it's own buffer size depending on the Sample Rate, sl@0: // bytes per channel & channels etc : sl@0: const TUint KBytesPerSample8 = 2; sl@0: const TUint KChannels8 = 1; sl@0: const TUint KDevSoundDeltaFrameSize = 0x800; //2K sl@0: const TUint KAudioOutputDefaultFrameSize22K = sl@0: (((22*1024*KBytesPerSample8*KChannels8)/4)+ (KDevSoundDeltaFrameSize-1)) &~ (KDevSoundDeltaFrameSize-1); sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0208::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Create a dummy source. sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: // Create an audio sink. sl@0: // Test 1 sl@0: // Test create sink buffer. sl@0: TCreateSinkBufferTestStep1 testStep(KUidMmfPtrBuffer, ETrue, NULL, KAudioOutputDefaultFrameSize22K, dummySource); sl@0: sl@0: sl@0: DoTest(testStep, _L("Audio sink CreateSinkBuffer"), KErrNotSupported); sl@0: sl@0: // Test 2 sl@0: TCreateSinkBufferTestStep2 testStep2(KUidMmfPtrBuffer, ETrue, NULL, KAudioOutputDefaultFrameSize22K); sl@0: sl@0: //DoTest(testStep2, _L("Audio sink CreateSinkBuffer"), KErrArgument); sl@0: //DevSound WP if we prime before the logon then the error should be KErrNotReady sl@0: DoTest(testStep2, _L("Audio sink CreateSinkBuffer"), KErrNotReady); sl@0: sl@0: // Test 3 sl@0: // Create a new sink. sl@0: // This time configured correctly. sl@0: // Create a real source. sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest208FileName; sl@0: MDataSource* realSource = MDataSource::NewSourceL(KUidMmfFileSource, configDes); sl@0: CleanupDeletePushL(realSource); sl@0: sl@0: TUid KWavReadUid = { KMmfUidFormatWAVRead }; sl@0: CMMFFormatDecode* realFormat = CMMFFormatDecode::NewL(KWavReadUid, realSource); sl@0: CleanupStack::PushL(realFormat); sl@0: TCreateSinkBufferTestStep3 testStep3(KUidMmfPtrBuffer, ETrue, realFormat, KAudioOutputDefaultFrameSize22K, dummySource); sl@0: sl@0: DoTest(testStep3, _L("Audio sink CreateSinkBuffer"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(2, realSource); // realFormat, realSource sl@0: sl@0: // Test 4 sl@0: // Create a new sink. sl@0: // This time configured correctly for software conversion. sl@0: // Create a real source. sl@0: // Initialise config data. sl@0: configDes().iPath = KTest208SWFileName; sl@0: realSource = MDataSource::NewSourceL(KUidMmfFileSource, configDes); sl@0: CleanupDeletePushL(realSource); sl@0: sl@0: realFormat = CMMFFormatDecode::NewL(KWavReadUid, realSource); sl@0: CleanupStack::PushL(realFormat); sl@0: sl@0: TCreateSinkBufferTestStep4 testStep4(KUidMmfPtrBuffer, ETrue, realFormat, KAudioOutputDefaultFrameSize22K, dummySource); sl@0: sl@0: DoTest(testStep4, _L("Audio sink CreateSinkBuffer"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(2, realSource); // realFormat, realSource sl@0: sl@0: CleanupStack::PopAndDestroy(dummySource); sl@0: CleanupStack::PopAndDestroy(scheduler); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0209 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0209::CTestStep_MMF_SRSSNK_U_0209() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0209"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0209 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0209::~CTestStep_MMF_SRSSNK_U_0209() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0209 sl@0: * sl@0: * Functional test of audio input sl@0: * EmptyBuifferL test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: const TInt KDevSoundAllocs = 2; sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0209::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Create a dummy source. sl@0: CMMFDummySource* dummySource = new(ELeave) CMMFDummySource; sl@0: CleanupStack::PushL(dummySource); sl@0: sl@0: // Set it to fill buffers it receives. sl@0: dummySource->SetFillBuffer(); sl@0: sl@0: // Create a real source. sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest208FileName; sl@0: MDataSource* realSource = MDataSource::NewSourceL(KUidMmfFileSource, configDes); sl@0: CleanupDeletePushL(realSource); sl@0: sl@0: TUid KWavReadUid = { KMmfUidFormatWAVRead }; sl@0: CMMFFormatDecode* realFormat = CMMFFormatDecode::NewL(KWavReadUid, realSource); sl@0: CleanupStack::PushL(realFormat); sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Create valid buffer. sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Create an audio sink. sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, configDes); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: // Test empty sink buffer. sl@0: User::LeaveIfError(sink->SinkThreadLogon(*dummySource)); sl@0: sink->SinkPrimeL(); sl@0: sink->NegotiateL(*realFormat); sl@0: sl@0: // Create a test (invalid) buffer. sl@0: CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer; sl@0: CleanupStack::PushL(testBuffer); sl@0: sl@0: // Invalid empty buffer. sl@0: TAudioOutputEmptyBufferTestStep testStep(sink, testBuffer, dummySource); sl@0: // Expect two allocs because CMMFDevSound::CBody::SetConfigL() sl@0: // re-allocates it's buffer to match the sample rate of the input file: sl@0: // one alloc is for the new CMMFDescriptorBuffer and the other is for sl@0: // CMMFDescriptorBuffer's internal buffer. sl@0: DoTest(testStep, _L("Audio Output: EmptyBufferL"), KErrNotSupported, KDevSoundAllocs); sl@0: CleanupStack::PopAndDestroy(testBuffer); sl@0: sl@0: // Valid empty buffer. sl@0: TAudioOutputEmptyBufferTestStep testStep2(sink, validBuffer, dummySource); sl@0: testStep2.SetAsynchronousWrite(); sl@0: dummySource->SetActiveScheduler(); sl@0: DoTestStep(testStep2, _L("Audio Output: EmptyBufferL"), KErrNone, KDevSoundAllocs); sl@0: sl@0: // Abandon test if the previous step failed because the remaining tests rely on it's success. sl@0: if (iTestResult != EPass) sl@0: { sl@0: CleanupStack::PopAndDestroy(6, dummySource); // sink, validBuffer, scheduler, realFormat, realSource, dummySource sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: testStep2.SetAsynchronousWrite(); sl@0: dummySource->SetActiveScheduler(); sl@0: DoTest(testStep2, _L("Audio Output: EmptyBufferL"), KErrNone, KDevSoundAllocs); sl@0: sl@0: // Valid empty buffer. (Make multiple requests) sl@0: TAudioOutputEmptyBuffer2TestStep testStep3(sink, validBuffer, dummySource); sl@0: DoTest(testStep3, _L("Audio Output: EmptyBufferL"), KErrNone, KDevSoundAllocs); sl@0: sl@0: // xxx Valid empty buffer. (Make multiple requests at once) sl@0: // removed below lines because the audio output currently doesn't support multiple requests. sl@0: // TAudioOutputFillBuffer3TestStep testStep4(sink, validBuffer, dummySource); sl@0: // DoTest(testStep4, _L("Audio Output: EmptyBufferL"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(sink); sl@0: sl@0: // These next tests create aand destroy their own sinks, sl@0: // so the CMMFDevSound's buffer allocs shouldn't be counted (see above). sl@0: sl@0: // Repeat tests, creating a source each time. sl@0: // Valid empty buffer. sl@0: TAudioOutputEmptyBuffer4TestStep testStep5(validBuffer, dummySource, *realFormat); sl@0: DoTest(testStep5, _L("Audio Output: EmptyBufferL"), KErrNone, 0); sl@0: sl@0: // Valid empty buffer. (Make multiple requests) sl@0: //DevSound WP this test is invalid with HwDevice plugin devsound as you cannot pass sl@0: //in your own buffer and ask the audio utput to empty it because the buffer sl@0: //is owned by audio output. ie the audio output is effectively active and sl@0: //drives the low itself sl@0: // TAudioOutputEmptyBuffer5TestStep testStep6(validBuffer, dummySource, *realFormat); sl@0: // DoTest(testStep6, _L("Audio Output: EmptyBufferL"), KErrNone, 0); sl@0: sl@0: // xxx Valid empty buffer. (Make multiple requests at once) sl@0: // removed below lines because the audio output currently doesn't support multiple requests. sl@0: // TAudioOutputEmptyBuffer6TestStep testStep7(validBuffer, dummySource); sl@0: // DoTest(testStep7, _L("Audio Output: EmptyBufferL"), KErrNone); sl@0: sl@0: // Repeat tests using software conversion. sl@0: // Don't forget to call CreateSinkBufferL! sl@0: sl@0: CleanupStack::PopAndDestroy(5, dummySource); // validBuffer, scheduler, realFormat, realSource, dummySource sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0210 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0210::CTestStep_MMF_SRSSNK_U_0210() sl@0: : CTestStep_MMF_SRSSNK(EFalse) sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0210"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0210 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0210::~CTestStep_MMF_SRSSNK_U_0210() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0210 sl@0: * sl@0: * Functional test of audio output source. sl@0: * BufferFilledL() test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0210::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // This test fails if running a debug StdSourcesAndSinks dll. sl@0: // So only perform the test on target. sl@0: sl@0: CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize); sl@0: CleanupStack::PushL(validBuffer); sl@0: sl@0: // Create sink. sl@0: TBuf8<1> configDes; sl@0: MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, configDes); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: // Test BufferFilledL sl@0: sink->BufferFilledL(validBuffer); sl@0: sl@0: CleanupStack::PopAndDestroy(2, validBuffer); // sink, validBuffer sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0211 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0211::CTestStep_MMF_SRSSNK_U_0211() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0211"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0211 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0211::~CTestStep_MMF_SRSSNK_U_0211() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0211 sl@0: * sl@0: * Functional test of audio output sink. sl@0: * Sink custom commands test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0211::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: TUid testControllerUid = { KMmfTestControllerUid }; sl@0: RMMFController dummyController; sl@0: TMMFPrioritySettings prioritySettings; sl@0: TMMFMessageDestinationPckg destination; sl@0: User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings)); sl@0: CleanupClosePushL(dummyController); sl@0: sl@0: TBuf8<1> dummyArgs; sl@0: User::LeaveIfError(dummyController.AddDataSink(KUidMmfAudioOutput, dummyArgs)); sl@0: TInt err = dummyController.CustomCommandSync(destination, KDescriptorSink, dummyArgs, dummyArgs); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Audio sink SinkCustomCommand: Expecting KErrNotSupported, actually got %d"), err); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(); // dummyController sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0212 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0212::CTestStep_MMF_SRSSNK_U_0212() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0212"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0212 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0212::~CTestStep_MMF_SRSSNK_U_0212() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0212 sl@0: * sl@0: * Functional test of audio output sink. sl@0: * Misc. fns. test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0212::DoTestStepL() sl@0: { sl@0: // All the MDevSoundObserver fns. are untestable. sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0301 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0301::CTestStep_MMF_SRSSNK_U_0301() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0301"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0301 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0301::~CTestStep_MMF_SRSSNK_U_0301() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0301 sl@0: * sl@0: * Functional test of audio output sink. sl@0: * Misc. fns. test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0301::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: TPrimeStopTestStep testStep; sl@0: DoFileTest(testStep, _L("PrimeStop"), KErrNone); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0302 sl@0: * sl@0: * Functional test of audio output sink. sl@0: * Misc. fns. test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0302::CTestStep_MMF_SRSSNK_U_0302() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0302"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0302::~CTestStep_MMF_SRSSNK_U_0302() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0302::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise thread active scheduler. sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: TPrimeStopSinkTestStep testStep; sl@0: DoFileTest(testStep, _L("PrimeStopSinkTest"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(scheduler); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0400 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: _LIT(KTestURLMpg, "http://www.symbian.com/clip/mpg"); sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0400::CTestStep_MMF_SRSSNK_U_0400() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0400"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0400::~CTestStep_MMF_SRSSNK_U_0400() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0400::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: sl@0: CleanupDeletePushL(source); sl@0: sl@0: TPtrC urlPtr = source->Url(); sl@0: if (urlPtr == _L("http://www.symbian.com/clip/mpg")) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0405 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0405::CTestStep_MMF_SRSSNK_U_0405() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0405"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0405::~CTestStep_MMF_SRSSNK_U_0405() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0405::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: TFourCC fourCCCode; sl@0: TMediaId nullId; sl@0: sl@0: fourCCCode = source->SourceDataTypeCode(nullId); sl@0: if (fourCCCode == KMMFFourCCCodeNULL) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0406 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0406::CTestStep_MMF_SRSSNK_U_0406() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0406"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0406::~CTestStep_MMF_SRSSNK_U_0406() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0406::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: TFourCC fourCCCode; sl@0: TMediaId nullMediaId; sl@0: TInt returnValue = 0; sl@0: sl@0: returnValue = source->SetSourceDataTypeCode(fourCCCode, nullMediaId); sl@0: if (returnValue == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0407 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0407::CTestStep_MMF_SRSSNK_U_0407() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0407"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0407::~CTestStep_MMF_SRSSNK_U_0407() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0407::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: TMediaId nullId; sl@0: sl@0: TRAPD(err, source->FillBufferL(NULL, NULL, nullId)); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0408 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0408::CTestStep_MMF_SRSSNK_U_0408() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0408"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0408::~CTestStep_MMF_SRSSNK_U_0408() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0408::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: sl@0: TRAPD(err, source->BufferEmptiedL(NULL)); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0409 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0409::CTestStep_MMF_SRSSNK_U_0409() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0409"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0409::~CTestStep_MMF_SRSSNK_U_0409() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0409::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: sl@0: TBool srcBuf = source->CanCreateSourceBuffer(); sl@0: if (!srcBuf) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0410 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0410::CTestStep_MMF_SRSSNK_U_0410() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0410"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0410::~CTestStep_MMF_SRSSNK_U_0410() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0410::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: TMediaId nullId; sl@0: TBool ref = ETrue; sl@0: sl@0: TRAPD(err, source->CreateSourceBufferL(nullId, ref)); // EABI warning removal sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0411 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0411::CTestStep_MMF_SRSSNK_U_0411() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0411"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0411::~CTestStep_MMF_SRSSNK_U_0411() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0411::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: TMediaId nullId; sl@0: CMMFDataBuffer* buf2 = CMMFDataBuffer::NewL(); sl@0: CleanupStack::PushL(buf2); sl@0: TBool ref = ETrue; sl@0: sl@0: TRAPD(err, source->CreateSourceBufferL(nullId, *buf2, ref)); // EABI warning removal sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(4); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0412 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0412::CTestStep_MMF_SRSSNK_U_0412() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0412"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0412::~CTestStep_MMF_SRSSNK_U_0412() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0412::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: sl@0: MAsyncEventHandler* s = NULL; sl@0: TInt returnValue = source->SourceThreadLogon(*s); sl@0: if (returnValue == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0413 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0413::CTestStep_MMF_SRSSNK_U_0413() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0413"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0413::~CTestStep_MMF_SRSSNK_U_0413() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0413::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: sl@0: source->SourceThreadLogoff(); sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0414 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0414::CTestStep_MMF_SRSSNK_U_0414() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0414"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0414::~CTestStep_MMF_SRSSNK_U_0414() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0414::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: TRAPD(err, source->NegotiateSourceL(*sink)); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(4); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0415 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0415::CTestStep_MMF_SRSSNK_U_0415() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0415"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0415::~CTestStep_MMF_SRSSNK_U_0415() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0415::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: TBool returnValue = ETrue; sl@0: sl@0: returnValue = source->SourceSampleConvert(); sl@0: if (returnValue == EFalse) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0416 sl@0: * sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0416::CTestStep_MMF_SRSSNK_U_0416() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0416"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0416::~CTestStep_MMF_SRSSNK_U_0416() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0416::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: sl@0: TRAPD(err, source->SourcePrimeL()); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0417 sl@0: * sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0417::CTestStep_MMF_SRSSNK_U_0417() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0417"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0417::~CTestStep_MMF_SRSSNK_U_0417() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0417::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: sl@0: TRAPD(err, source->SourcePlayL()); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0418 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0418::CTestStep_MMF_SRSSNK_U_0418() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0418"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0418::~CTestStep_MMF_SRSSNK_U_0418() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0418::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: sl@0: TRAPD(err, source->SourcePauseL()); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0419 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0419::CTestStep_MMF_SRSSNK_U_0419() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0419"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0419::~CTestStep_MMF_SRSSNK_U_0419() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0419::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: sl@0: TRAPD(err, source->SourceStopL()); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0420 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0420::CTestStep_MMF_SRSSNK_U_0420() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0420"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0420::~CTestStep_MMF_SRSSNK_U_0420() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0420::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: TMMFPrioritySettings settings; sl@0: sl@0: TRAPD(err, source->SetSourcePrioritySettings(settings)); sl@0: if (err == KErrNone) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0421 sl@0: * Functional Test of URL Source sl@0: * sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0421::CTestStep_MMF_SRSSNK_U_0421() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0421"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0421::~CTestStep_MMF_SRSSNK_U_0421() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0421::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest101FileName; sl@0: sl@0: TUid testControllerUid = { KMmfTestControllerUid }; sl@0: RMMFController dummyController; sl@0: TMMFPrioritySettings prioritySettings; sl@0: TMMFMessageDestinationPckg destination; sl@0: User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings)); sl@0: CleanupClosePushL(dummyController); sl@0: sl@0: TBuf8<1> dummyArgs; sl@0: User::LeaveIfError(dummyController.AddDataSource(KUidMmfUrlSource, configDes)); sl@0: TInt err = dummyController.CustomCommandSync(destination, KDescriptorSource, dummyArgs, dummyArgs); sl@0: sl@0: if (err == KErrNotSupported) sl@0: { sl@0: INFO_PRINTF2(_L("File source SourceCustomCommand: Expected KErrNotSupported, Error: %d"), err); sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(); // dummyController sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /* sl@0: * Sinks sl@0: * sl@0: * sl@0: */ sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0500 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0500::CTestStep_MMF_SRSSNK_U_0500() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0500"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0500::~CTestStep_MMF_SRSSNK_U_0500() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0500::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: sl@0: CleanupDeletePushL(sink); sl@0: sl@0: TPtrC urlPtr = sink->Url(); sl@0: if (urlPtr == _L("http://www.symbian.com/clip/mpg")) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0505 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0505::CTestStep_MMF_SRSSNK_U_0505() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0505"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0505::~CTestStep_MMF_SRSSNK_U_0505() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0505::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: TMediaId nullId; sl@0: sl@0: TFourCC fourCCCode = sink->SinkDataTypeCode(nullId); sl@0: if (fourCCCode == KMMFFourCCCodeNULL) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0506 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0506::CTestStep_MMF_SRSSNK_U_0506() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0506"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0506::~CTestStep_MMF_SRSSNK_U_0506() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0506::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: TMediaId nullId; sl@0: TFourCC fourCCCode; sl@0: sl@0: sl@0: TInt returnValue = sink->SetSinkDataTypeCode(fourCCCode, nullId); sl@0: if (returnValue == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0507 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0507::CTestStep_MMF_SRSSNK_U_0507() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0507"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0507::~CTestStep_MMF_SRSSNK_U_0507() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0507::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: TMediaId nullId; sl@0: sl@0: TRAPD(err, sink->EmptyBufferL(NULL, NULL, nullId)); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0508 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0508::CTestStep_MMF_SRSSNK_U_0508() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0508"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0508::~CTestStep_MMF_SRSSNK_U_0508() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0508::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: TRAPD(err, sink->BufferFilledL(NULL)); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0509 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0509::CTestStep_MMF_SRSSNK_U_0509() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0509"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0509::~CTestStep_MMF_SRSSNK_U_0509() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0509::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: TBool canCreate = sink->CanCreateSinkBuffer(); sl@0: if (canCreate == EFalse) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0510 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0510::CTestStep_MMF_SRSSNK_U_0510() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0510"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0510::~CTestStep_MMF_SRSSNK_U_0510() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0510::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: TMediaId nullId; sl@0: TBool reference; sl@0: sl@0: TRAPD(err, sink->CreateSinkBufferL(nullId, reference)); // EABI warning removal sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0511 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0511::CTestStep_MMF_SRSSNK_U_0511() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0511"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0511::~CTestStep_MMF_SRSSNK_U_0511() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0511::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: MAsyncEventHandler* s = NULL; sl@0: TInt returnValue = sink->SinkThreadLogon(*s); sl@0: if (returnValue == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0512 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0512::CTestStep_MMF_SRSSNK_U_0512() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0512"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0512::~CTestStep_MMF_SRSSNK_U_0512() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0512::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: TRAPD(err, sink->SinkThreadLogoff()); sl@0: if (err == KErrNone) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0513 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0513::CTestStep_MMF_SRSSNK_U_0513() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0513"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0513::~CTestStep_MMF_SRSSNK_U_0513() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0513::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(source); sl@0: sl@0: TRAPD(err, sink->NegotiateL(*source)); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(4); sl@0: sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0514 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0514::CTestStep_MMF_SRSSNK_U_0514() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0514"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0514::~CTestStep_MMF_SRSSNK_U_0514() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0514::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: TRAPD(err, sink->SinkPrimeL()); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0515 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0515::CTestStep_MMF_SRSSNK_U_0515() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0515"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0515::~CTestStep_MMF_SRSSNK_U_0515() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0515::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: TRAPD(err, sink->SinkPlayL()); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0516 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0516::CTestStep_MMF_SRSSNK_U_0516() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0516"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0516::~CTestStep_MMF_SRSSNK_U_0516() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0516::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: TRAPD(err, sink->SinkPauseL()); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0517 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0517::CTestStep_MMF_SRSSNK_U_0517() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0517"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0517::~CTestStep_MMF_SRSSNK_U_0517() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0517::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: sl@0: TRAPD(err, sink->SinkStopL()); sl@0: if (err == KErrNotSupported) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0518 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0518::CTestStep_MMF_SRSSNK_U_0518() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0518"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0518::~CTestStep_MMF_SRSSNK_U_0518() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0518::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1); sl@0: CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); sl@0: sl@0: CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0))); sl@0: CleanupDeletePushL(sink); sl@0: TMMFPrioritySettings settings; sl@0: sl@0: TRAPD(err, sink->SetSinkPrioritySettings(settings)); sl@0: if (err == KErrNone) sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0519 sl@0: * Functional Test of URL Sink sl@0: * sl@0: * sl@0: * @xxxx sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0519::CTestStep_MMF_SRSSNK_U_0519() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0519"); sl@0: } sl@0: sl@0: CTestStep_MMF_SRSSNK_U_0519::~CTestStep_MMF_SRSSNK_U_0519() sl@0: { sl@0: } sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0519::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: iTestResult = EFail; sl@0: // Initialise config data. sl@0: TMMFFileConfig configDes; sl@0: configDes().iPath = KTest101FileName; sl@0: sl@0: TUid testControllerUid = { KMmfTestControllerUid }; sl@0: RMMFController dummyController; sl@0: TMMFPrioritySettings prioritySettings; sl@0: TMMFMessageDestinationPckg destination; sl@0: User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings)); sl@0: CleanupClosePushL(dummyController); sl@0: sl@0: TBuf8<1> dummyArgs; sl@0: User::LeaveIfError(dummyController.AddDataSink(KUidMmfUrlSink, configDes)); sl@0: TInt err = dummyController.CustomCommandSync(destination, KDescriptorSink, dummyArgs, dummyArgs); sl@0: sl@0: if (err != KErrNotSupported) sl@0: { sl@0: INFO_PRINTF2(_L("File source SourceCustomCommand: Expecting KErrNotSupported, Error: %d"), err); sl@0: } sl@0: else sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(); // dummyController sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_MultipleStop constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_MultipleStop::CTestStep_MMF_SRSSNK_MultipleStop() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iSourceType = ESourceTypeFile; sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0520"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_MultipleStop destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_MultipleStop::~CTestStep_MMF_SRSSNK_MultipleStop() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_MultipleStop sl@0: * sl@0: * Functional test of file source. sl@0: * Misc. functions test. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_MultipleStop::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configFile; sl@0: configFile().iPath = KTest101FileName; sl@0: sl@0: TInt fileSize; sl@0: OpenFileL(KTest101FileName, EFileRead); sl@0: User::LeaveIfError(iFile.Size(fileSize)); sl@0: CloseFile(); sl@0: User::LeaveIfError(iFs.Connect()); sl@0: CleanupClosePushL(iFs); sl@0: sl@0: // Create source. sl@0: MDataSource* source = CreateFileSourceL(iSourceType, iFs, KTest101FileName); sl@0: CleanupDeletePushL(source); sl@0: sl@0: source->SourcePrimeL(); sl@0: source->SourcePlayL(); sl@0: source->SourcePauseL(); sl@0: sl@0: // call stop twice make sure no leaves occur sl@0: source->SourceStopL(); sl@0: source->SourceStopL(); sl@0: sl@0: CleanupStack::PopAndDestroy(2, &iFs); // iFs, source sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0600 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0600::CTestStep_MMF_SRSSNK_U_0600() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0600"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0600 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0600::~CTestStep_MMF_SRSSNK_U_0600() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0600 sl@0: * sl@0: * CMMFFile::iFilePath and iFileDrive should be initialised for KMMFileHandleSourceUid sl@0: * and KFileHandleUid sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0600::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: _LIT(KTestFileDrive, "C:"); sl@0: _LIT(KTestFilePath, "\\mm\\mmf\\testfiles\\srssnk\\"); sl@0: sl@0: TFileName testFileName(KTest101FileName); sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()); sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: // Create a file source (KFileHandleUid) sl@0: CMMFFile* source = static_cast(CreateFileSourceL(ESourceTypeFileHandle, testFsSession, testFileName)); sl@0: CleanupStack::PushL(source); sl@0: sl@0: //Check that its FilePath & FileDrive have been populated sl@0: if ((source->FilePath() != KTestFilePath) || (source->FileDrive() != KTestFileDrive)) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF3(_L("Test failed for KFileHandleUid. Path=%S, Drive=%S"), &source->FilePath(), &source->FileDrive()); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: // Create a file handle source (KMMFileHandleSourceUid) sl@0: source = static_cast(CreateFileHandleSourceL(testFsSession, testFileName)); sl@0: CleanupStack::PushL(source); sl@0: sl@0: //Check that its FilePath & FileDrive have been populated sl@0: if ((source->FilePath() != KTestFilePath) || (source->FileDrive() != KTestFileDrive)) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF3(_L("Test failed for KMMFileHandleSourceUid. Path=%S, Drive=%S"), &source->FilePath(), &source->FileDrive()); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(2, &testFsSession); // testFsSession, source sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0521 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0521::CTestStep_MMF_SRSSNK_U_0521() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0521"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0521 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0521::~CTestStep_MMF_SRSSNK_U_0521() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0521 sl@0: * sl@0: * CR0854 - Provide access to the file data via the CData object sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0521::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: TFileName testFileName(KTest101FileName); sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()); sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: // Create a file source (KFileHandleUid) sl@0: CMMFFile* source = static_cast(CreateFileSourceL(ESourceTypeFileHandle, testFsSession, testFileName)); sl@0: CleanupStack::PushL(source); sl@0: source->SourcePrimeL(); sl@0: CData *data = NULL; sl@0: sl@0: TInt err = source->Data(data); sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF2(_L("Test failed err =%d"), err); sl@0: } sl@0: else sl@0: { sl@0: iTestResult = EPass; sl@0: TInt value = 0; sl@0: err = data->GetAttribute(EIsProtected, value); sl@0: if (err != KErrNone || value) sl@0: { sl@0: INFO_PRINTF3(_L("Test failed err =%d value = %d"), err, value); sl@0: iTestResult = EFail; sl@0: } sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(2,&testFsSession); // source, testFsSession sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0522 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0522::CTestStep_MMF_SRSSNK_U_0522() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0522"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0522 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0522::~CTestStep_MMF_SRSSNK_U_0522() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0522 sl@0: * sl@0: * CR0854 - Provide access to the file data via the CData object sl@0: * sl@0: * @xxxx sl@0: */ sl@0: sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0522::DoTestStepL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: RFs testFsSession; sl@0: User::LeaveIfError(testFsSession.Connect()) ; sl@0: CleanupClosePushL(testFsSession); sl@0: sl@0: TFileName testFileName(KTest103FileName); sl@0: CMMFFile* sink = static_cast(CreateFileSinkL(ESinkTypeFile, testFsSession, testFileName)); sl@0: CleanupStack::PushL(sink); sl@0: sl@0: // Test that the file has been opened correctly. sl@0: sink->SinkPrimeL(); sl@0: CData *data = NULL; sl@0: TInt err = sink->Data(data); sl@0: sl@0: if(err != KErrNotSupported ) sl@0: { sl@0: iTestResult = EFail; sl@0: INFO_PRINTF2(_L("Test failed err =%d"), err); sl@0: } sl@0: else sl@0: { sl@0: iTestResult = EPass; sl@0: } sl@0: CleanupStack::PopAndDestroy(2,&testFsSession); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0523 constructor sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0523::CTestStep_MMF_SRSSNK_U_0523() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0523"); sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0523 destructor sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0523::~CTestStep_MMF_SRSSNK_U_0523() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0523 sl@0: * sl@0: * PDEF102849 - Invalid Remaining Space value obtained for E:\ (memory card) sl@0: * sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0523::DoTestStepL() sl@0: { sl@0: _LIT(KTestFileName, "E:\\unittest\\mmf\\srssnk\\MMFTestFile1.dat"); sl@0: sl@0: __MM_HEAP_MARK; sl@0: sl@0: TInt64 freeSpace = 0; sl@0: sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()) ; sl@0: CleanupClosePushL(fs); sl@0: sl@0: // Create new e: drive to test fix if working on emulator sl@0: #ifdef __WINS__ sl@0: sl@0: _LIT(KSubstPath, "C:\\"); sl@0: sl@0: if (fs.SetSubst(KSubstPath, EDriveE) != KErrNone) sl@0: { sl@0: CleanupStack::PopAndDestroy(); // fs; sl@0: __MM_HEAP_MARKEND; sl@0: return EFail; sl@0: } sl@0: sl@0: #endif sl@0: sl@0: // Get the free space on the drive. sl@0: TFileName testFileName(KTestFileName); sl@0: TParsePtr parser(testFileName); sl@0: TDriveUnit drive(parser.Drive()); sl@0: TVolumeInfo volInfo; sl@0: sl@0: if (fs.Volume(volInfo, drive) == KErrNone) sl@0: { sl@0: freeSpace = volInfo.iFree; sl@0: } sl@0: sl@0: // Initialise config data. sl@0: TMMFFileConfig configFile; sl@0: configFile().iPath = KTestFileName; sl@0: sl@0: CMMFFile* source = static_cast(CreateFileSourceL(ESourceTypeFile, fs, KTestFileName)); sl@0: CleanupStack::PushL(source); sl@0: sl@0: // do bytes free test sl@0: TClipBytesFreeTestStep testStep(source, freeSpace); sl@0: DoFileTest(testStep, _L("E: drive BytesFree"), KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(2, &fs); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return iTestResult; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0524 constructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0524::CTestStep_MMF_SRSSNK_U_0524() sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName = _L("MM-MMF-SRSSNK-U-0524"); sl@0: iIsAllocTest = EFalse; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0524 destructor sl@0: * sl@0: * @xxxx sl@0: * sl@0: */ sl@0: CTestStep_MMF_SRSSNK_U_0524::~CTestStep_MMF_SRSSNK_U_0524() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * CTestStep_MMF_SRSSNK_U_0524 sl@0: * sl@0: * Test audio source misc. fns. sl@0: * sl@0: * @xxxx sl@0: */ sl@0: TVerdict CTestStep_MMF_SRSSNK_U_0524::DoTestStepL() sl@0: { sl@0: sl@0: const TInt KDevSoundMaxFrameSize = 0x4000; //16K from SoundDeviceBody.h sl@0: sl@0: CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(scheduler); sl@0: CActiveScheduler::Install(scheduler); sl@0: sl@0: // Create a dummy sink. sl@0: CMMFDummySink* dummySink = new(ELeave) CMMFDummySink; sl@0: CleanupStack::PushL(dummySink); sl@0: sl@0: // Create an audio source. sl@0: TBuf8<1> configDes; sl@0: MDataSource* source = MDataSource::NewSourceL(KUidMmfAudioInput, configDes); sl@0: CleanupDeletePushL(source); sl@0: sl@0: TCreateSourceBuffer3TestStep testStep(ESourceTypeAudio, dummySink, KUidMmfDescriptorBuffer, ETrue, KDevSoundMaxFrameSize); sl@0: DoTestStep(testStep, _L("Audio source CreateSourceBuffer1"), KErrNone); sl@0: CleanupStack::PopAndDestroy(source); sl@0: sl@0: CleanupStack::PopAndDestroy(dummySink); sl@0: CleanupStack::PopAndDestroy(scheduler); sl@0: sl@0: return iTestResult; sl@0: } sl@0: sl@0: TVerdict TCreateSourceBuffer3TestStep::DoTestStepL() sl@0: { sl@0: MDataSource* source = NULL; sl@0: sl@0: source = CreateSourceL(iSourceType, NULL); sl@0: sl@0: User::LeaveIfError(source->SourceThreadLogon(*this)); sl@0: sl@0: source->SourcePrimeL(); sl@0: TRAPD(err,source->NegotiateSourceL(*iSink)); sl@0: sl@0: return (err == KErrNone ? EPass : EFail); sl@0: } sl@0: sl@0: TInt TCreateSourceBuffer3TestStep::SendEventToClient(const TMMFEvent& aEvent) sl@0: { sl@0: if (aEvent.iErrorCode == KErrNoMemory) sl@0: { sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: return KErrNone; sl@0: }