os/mm/mmlibs/mmfw/tsrc/mmfunittest/srssnk/TSU_MMF_SRSSNK.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// The test specification for these tests can be found in:
sl@0
    15
// V:\Dev\GT\GT 0137 Multimedia Codec - Msrvr\Testing\Unit Test Specifications\
sl@0
    16
// Typhoon\SGL.GT0137.134 Rev1.00 MMF SRSSNK Unit Test Specification.xls 
sl@0
    17
// Changes made to the test harness as a result of the DevSound WP AudioInput/Output
sl@0
    18
// modifications have been marked with DevSound WP Change along with an explanation
sl@0
    19
// of why the code changed
sl@0
    20
// Main changes caused by:
sl@0
    21
// 7.0s test seemed to assume the Prime could come after the thread logon
sl@0
    22
// this assumption is invalid, but happened to work on the 7.0s audio I/O as
sl@0
    23
// the prime did very little
sl@0
    24
// assumed Prime does very little including no memory allocation
sl@0
    25
// assmued that once the active scheduler started no further memory
sl@0
    26
// was allocated and hence no callbacks if an OOM condition occured during play
sl@0
    27
// assumed test could drive Empty/FillBufferL calls and could own and set
sl@0
    28
// buffers - in 8.0s buffers are ultimately owned by HwDevice not test app
sl@0
    29
// so cannot make multiple calls to Empty/FillBuffer
sl@0
    30
// assumed audio output could only accept pcm16 - not true on 8.0
sl@0
    31
// 
sl@0
    32
//
sl@0
    33
sl@0
    34
// EPOC includes
sl@0
    35
#include <e32base.h>
sl@0
    36
#include <caf/caf.h>
sl@0
    37
sl@0
    38
using namespace ContentAccess;
sl@0
    39
sl@0
    40
// Test system includes
sl@0
    41
#include "TSU_MMF_SRSSNK.h"
sl@0
    42
#include "TSU_MMF_SRSSNKSuite.h"
sl@0
    43
sl@0
    44
 //INC085391
sl@0
    45
#include "mmfclientutility.h"
sl@0
    46
sl@0
    47
// __REQUIREDFORDEBUG macro gets rid of warnings in release builds
sl@0
    48
#if defined(_DEBUG)
sl@0
    49
#define __REQUIREDFORDEBUG(X) X
sl@0
    50
#else
sl@0
    51
#define __REQUIREDFORDEBUG(X)
sl@0
    52
#endif
sl@0
    53
sl@0
    54
const TInt KStartFileFailAt = 8;	// start at zero when RFile::Duplicate() problem is fixed
sl@0
    55
sl@0
    56
_LIT8(KEmptyFourCCCode, "    ");
sl@0
    57
sl@0
    58
_LIT(KTest101FileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile1.dat");
sl@0
    59
sl@0
    60
MDataSource* CreateFileSourceL(TSourceType aSourceType, RFs& aFs, const TDesC& aFileName)
sl@0
    61
	{
sl@0
    62
	ASSERT(aSourceType == ESourceTypeFile || aSourceType == ESourceTypeFileHandle);
sl@0
    63
sl@0
    64
	MDataSource* source;
sl@0
    65
sl@0
    66
	if (aSourceType == ESourceTypeFile)
sl@0
    67
		{
sl@0
    68
		TMMFFileConfig configFile;
sl@0
    69
		configFile().iPath = aFileName;
sl@0
    70
		source = MDataSource::NewSourceL(KUidMmfFileSource, configFile);
sl@0
    71
		}
sl@0
    72
	else
sl@0
    73
		{
sl@0
    74
		User::LeaveIfError(aFs.ShareProtected());
sl@0
    75
		TMMFFileHandleConfig configFile;
sl@0
    76
		RFile file;
sl@0
    77
		User::LeaveIfError(file.Open(aFs, aFileName, EFileRead|EFileShareReadersOnly));
sl@0
    78
		CleanupClosePushL(file);
sl@0
    79
		configFile().iFile = &file;
sl@0
    80
		source = MDataSource::NewSourceL(KUidMmfFileSource, configFile);
sl@0
    81
		CleanupStack::PopAndDestroy(&file);
sl@0
    82
sl@0
    83
		}
sl@0
    84
	return source;
sl@0
    85
	}
sl@0
    86
sl@0
    87
MDataSource* CreateFileHandleSourceL(RFs& aFs, const TDesC& aFileName)
sl@0
    88
	{
sl@0
    89
	User::LeaveIfError(aFs.ShareProtected());
sl@0
    90
	RFile file;
sl@0
    91
	User::LeaveIfError(file.Open(aFs, aFileName, EFileRead|EFileShareReadersOnly));
sl@0
    92
	CleanupClosePushL(file);
sl@0
    93
	CMMFileSourceSink* fileSourceSink = CMMFileSourceSink::NewLC(KMMFileHandleSourceUid, file);
sl@0
    94
	MDataSource* source = MDataSource::NewSourceL(KUidMmfFileSource, fileSourceSink->SourceSinkData());
sl@0
    95
	CleanupStack::PopAndDestroy(2, &file); //fileSourceSink
sl@0
    96
sl@0
    97
	return source;
sl@0
    98
	}
sl@0
    99
sl@0
   100
MDataSink* CreateFileSinkL(TSinkType aSinkType, RFs& aFs, const TDesC& aFileName)
sl@0
   101
	{
sl@0
   102
	MDataSink* sink;
sl@0
   103
sl@0
   104
	if (aSinkType == ESinkTypeFile)
sl@0
   105
		{
sl@0
   106
		TMMFFileConfig configFile;
sl@0
   107
		configFile().iPath = aFileName;
sl@0
   108
		sink = MDataSink::NewSinkL(KUidMmfFileSink, configFile);
sl@0
   109
		}
sl@0
   110
	else
sl@0
   111
		{
sl@0
   112
		User::LeaveIfError(aFs.ShareProtected());
sl@0
   113
		RFile file;
sl@0
   114
		TMMFFileHandleConfig fileConfig(&file);
sl@0
   115
		TInt err = file.Open(aFs, aFileName, EFileWrite|EFileRead|EFileShareAny);
sl@0
   116
		if (err == KErrNotFound)
sl@0
   117
			{
sl@0
   118
			User::LeaveIfError(file.Create(aFs, aFileName, EFileWrite|EFileRead|EFileShareAny));
sl@0
   119
			}
sl@0
   120
		else
sl@0
   121
			{
sl@0
   122
			User::LeaveIfError(err);
sl@0
   123
			}
sl@0
   124
		CleanupClosePushL(file);
sl@0
   125
		sink = MDataSink::NewSinkL(KUidMmfFileSink, fileConfig);
sl@0
   126
		CleanupStack::PopAndDestroy(&file);
sl@0
   127
sl@0
   128
		}
sl@0
   129
	return sink;
sl@0
   130
	}
sl@0
   131
sl@0
   132
sl@0
   133
sl@0
   134
void TTestStep::DoTestPreambleL()
sl@0
   135
	{
sl@0
   136
	}
sl@0
   137
sl@0
   138
TVerdict TTestStep::DoTestPostambleL(TBool /*aCheck*/)
sl@0
   139
	{
sl@0
   140
	return EPass;
sl@0
   141
	}
sl@0
   142
sl@0
   143
TVerdict TTestStep::DoNegativeTestPostambleL()
sl@0
   144
	{
sl@0
   145
	return DoTestPostambleL(EFalse);
sl@0
   146
	}
sl@0
   147
sl@0
   148
MDataSource* TTestStep::CreateSourceL(TSourceType aSourceType, HBufC8* aDes)
sl@0
   149
	{
sl@0
   150
	MDataSource* source = NULL;
sl@0
   151
	switch(aSourceType)
sl@0
   152
		{
sl@0
   153
		case ESourceTypeDes:
sl@0
   154
			{
sl@0
   155
			TPtr8 dataPtr(aDes->Des());
sl@0
   156
			// Initialise config data.
sl@0
   157
			TMMFDescriptorConfig configDes;
sl@0
   158
			configDes().iDes = &dataPtr;
sl@0
   159
			configDes().iDesThreadId = RThread().Id();
sl@0
   160
			source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes);
sl@0
   161
			}
sl@0
   162
			break;
sl@0
   163
		case ESourceTypeFile:
sl@0
   164
			{
sl@0
   165
			// Initialise config data.
sl@0
   166
			TMMFFileConfig configDes;
sl@0
   167
			configDes().iPath = KTest101FileName;
sl@0
   168
			source = MDataSource::NewSourceL(KUidMmfFileSource, configDes);
sl@0
   169
			}
sl@0
   170
			break;
sl@0
   171
sl@0
   172
		case ESourceTypeFileHandle:
sl@0
   173
			{
sl@0
   174
			TMMFFileHandleConfig fileConfig;
sl@0
   175
			RFs fs;
sl@0
   176
			User::LeaveIfError(fs.Connect());
sl@0
   177
			CleanupClosePushL(fs);
sl@0
   178
			RFile file;
sl@0
   179
			User::LeaveIfError(file.Open(fs, KTest101FileName, EFileRead|EFileShareReadersOnly));
sl@0
   180
			CleanupClosePushL(file);
sl@0
   181
			fileConfig().iFile = &file;
sl@0
   182
			source = MDataSource::NewSourceL(KUidMmfFileSource, fileConfig);
sl@0
   183
			CleanupStack::PopAndDestroy(2, &fs);
sl@0
   184
			}
sl@0
   185
			break;
sl@0
   186
sl@0
   187
		case ESourceTypeAudio:
sl@0
   188
			{
sl@0
   189
			TBuf8<1> configDes;
sl@0
   190
			source = MDataSource::NewSourceL(KUidMmfAudioInput, configDes);
sl@0
   191
sl@0
   192
			//DevSound WP - needs resetting as of OOM occurs buffer may not be filled ok
sl@0
   193
			static_cast<CMMFDummySink*>(iSink)->ResetBufferFilledOk();
sl@0
   194
			}
sl@0
   195
			break;
sl@0
   196
		default:
sl@0
   197
			User::Leave(KErrGeneral);
sl@0
   198
		}
sl@0
   199
	return source;
sl@0
   200
	}
sl@0
   201
sl@0
   202
sl@0
   203
void TReadBufferTestStep::RandomiseBuffer()
sl@0
   204
	{
sl@0
   205
	if ((iBuffer->Type() == KUidMmfTransferBuffer) ||
sl@0
   206
	(iBuffer->Type() == KUidMmfDescriptorBuffer))
sl@0
   207
		{
sl@0
   208
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
   209
sl@0
   210
		// Re-randomise data buffer.
sl@0
   211
		TDes8& dataDes = buffer->Data();
sl@0
   212
		TUint8* dataPtr = CONST_CAST(TUint8*, dataDes.Ptr());
sl@0
   213
		TInt bufferMaxLength = dataDes.MaxLength();
sl@0
   214
		for (TInt i = 0 ; i<bufferMaxLength ; i++)
sl@0
   215
			dataPtr[i] = TUint8(Math::Rand(iSeed));
sl@0
   216
sl@0
   217
		dataDes.SetLength(bufferMaxLength);
sl@0
   218
		}
sl@0
   219
	}
sl@0
   220
sl@0
   221
TInt TReadBufferTestStep::CheckBuffer()
sl@0
   222
	{
sl@0
   223
	TInt readLength = iBuffer->BufferSize();
sl@0
   224
	CMMFDescriptorBuffer* buffer = STATIC_CAST(CMMFDescriptorBuffer*, iBuffer);
sl@0
   225
sl@0
   226
	const TUint8* sourcePtr = iSourceDes.Ptr();
sl@0
   227
	return Mem::Compare(sourcePtr+iPosition, readLength, buffer->Data().Ptr(), readLength);
sl@0
   228
	}
sl@0
   229
sl@0
   230
sl@0
   231
void TWriteBufferTestStep::RandomiseBuffer()
sl@0
   232
	{
sl@0
   233
	if ((iBuffer->Type() == KUidMmfTransferBuffer) ||
sl@0
   234
	(iBuffer->Type() == KUidMmfDescriptorBuffer))
sl@0
   235
		{
sl@0
   236
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
   237
sl@0
   238
		// Re-randomise data buffer.
sl@0
   239
		TDes8& dataDes = buffer->Data();
sl@0
   240
		TUint8* dataPtr = CONST_CAST(TUint8*, dataDes.Ptr());
sl@0
   241
		TInt bufferMaxLength = dataDes.MaxLength();
sl@0
   242
		for (TInt i = 0 ; i<bufferMaxLength ; i++)
sl@0
   243
			dataPtr[i] = TUint8(Math::Rand(iSeed));
sl@0
   244
		}
sl@0
   245
	}
sl@0
   246
sl@0
   247
TInt TWriteBufferToDescriptorTestStep::CheckDestinationL()
sl@0
   248
	{
sl@0
   249
	TInt length = iDestinationDes.Length();
sl@0
   250
	if (length != iCopyOfDestinationDes.Length())
sl@0
   251
		return -1;
sl@0
   252
sl@0
   253
	return Mem::Compare(iDestinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
   254
	}
sl@0
   255
sl@0
   256
TInt TWriteBufferToFileTestStep::CheckDestinationL()
sl@0
   257
	{
sl@0
   258
	TInt length = iCopyOfDestinationDes.Length();
sl@0
   259
sl@0
   260
	// Read the file into a descriptor.
sl@0
   261
	RFile destinationFile;
sl@0
   262
	TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead|EFileShareAny);
sl@0
   263
	CleanupClosePushL(destinationFile);
sl@0
   264
	if (err != KErrNone)
sl@0
   265
		{
sl@0
   266
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
   267
sl@0
   268
		if (err == KErrNotFound)
sl@0
   269
			return (length != 0) ? -1 : 0;
sl@0
   270
sl@0
   271
		User::Leave(err);
sl@0
   272
		}
sl@0
   273
sl@0
   274
	TInt destinationFileSize;
sl@0
   275
	User::LeaveIfError(destinationFile.Size(destinationFileSize));
sl@0
   276
sl@0
   277
	// Check that the file length is correct.
sl@0
   278
	if (destinationFileSize != length)
sl@0
   279
		{
sl@0
   280
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
   281
		return -1;
sl@0
   282
		}
sl@0
   283
sl@0
   284
	HBufC8* destinationHBuf = HBufC8::NewLC(length);
sl@0
   285
	TPtr8 destinationDes = destinationHBuf->Des();
sl@0
   286
	User::LeaveIfError(destinationFile.Read(destinationDes));
sl@0
   287
sl@0
   288
	// Check that the file data matches.
sl@0
   289
	err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
   290
	CleanupStack::PopAndDestroy(destinationHBuf);
sl@0
   291
	CleanupStack::PopAndDestroy(&destinationFile);
sl@0
   292
sl@0
   293
	return err;
sl@0
   294
	}
sl@0
   295
sl@0
   296
void TWriteBufferToFileTestStep::DoTestPreambleL()
sl@0
   297
	{
sl@0
   298
	if (iSink != NULL)
sl@0
   299
		iSink->SinkPrimeL();
sl@0
   300
	}
sl@0
   301
sl@0
   302
//
sl@0
   303
// Tests that use ECom to create sources/sinks should call
sl@0
   304
// REcomSession::FinalClose in the PostambleL.
sl@0
   305
//
sl@0
   306
TVerdict TFileTestStep::DoTestPostambleL(TBool /*aCheck*/)
sl@0
   307
	{
sl@0
   308
	REComSession::FinalClose();
sl@0
   309
	return EPass;
sl@0
   310
	}
sl@0
   311
sl@0
   312
// TNewSourceTestStep
sl@0
   313
// Attempt to create a new data source, using the supplied Uid and config data.
sl@0
   314
// Delete the source after creation (test for memory leak in construction)
sl@0
   315
TVerdict TNewSourceTestStep::DoTestStepL()
sl@0
   316
	{
sl@0
   317
	MDataSource* source = MDataSource::NewSourceL(iUid, *iConfigDes);
sl@0
   318
sl@0
   319
	delete source;
sl@0
   320
	return EPass;
sl@0
   321
	}
sl@0
   322
sl@0
   323
// TSourceTypeTestStep
sl@0
   324
// Check that the data source type and data type codes are initialised correctly.
sl@0
   325
TVerdict TSourceTypeTestStep::DoTestStepL()
sl@0
   326
	{
sl@0
   327
	TUid dataSourceType = iSource->DataSourceType();
sl@0
   328
	if (dataSourceType != iUid)
sl@0
   329
		return EFail;
sl@0
   330
sl@0
   331
	TMediaId mediaId;
sl@0
   332
	TFourCC fourCC = iSource->SourceDataTypeCode(mediaId);
sl@0
   333
	if (fourCC != iFourCC)
sl@0
   334
		return EFail;
sl@0
   335
sl@0
   336
	fourCC = 0x4E554C4C; // 'LLUN'
sl@0
   337
	TInt err = iSource->SetSourceDataTypeCode(fourCC, mediaId);
sl@0
   338
	if (iCanSetSourceDataType)
sl@0
   339
		{
sl@0
   340
		if (err != KErrNone)
sl@0
   341
			User::Leave(err);
sl@0
   342
sl@0
   343
		if (iSource->SourceDataTypeCode(mediaId) != fourCC)
sl@0
   344
			return EFail;
sl@0
   345
sl@0
   346
		User::LeaveIfError(iSource->SetSourceDataTypeCode(iFourCC, mediaId));
sl@0
   347
		}
sl@0
   348
	else
sl@0
   349
		{
sl@0
   350
		if (err != KErrNotSupported)
sl@0
   351
			{
sl@0
   352
			if (err == KErrNone)
sl@0
   353
				return EFail;
sl@0
   354
sl@0
   355
			User::Leave(err);
sl@0
   356
			}
sl@0
   357
sl@0
   358
		if (iSource->SourceDataTypeCode(mediaId) != iFourCC)
sl@0
   359
			return EFail;
sl@0
   360
		}
sl@0
   361
sl@0
   362
	return EPass;
sl@0
   363
	}
sl@0
   364
sl@0
   365
// TCanCreateSourceBufferTestStep
sl@0
   366
// Test that MDataSource::CanCreateSourceBuffer returns the expected value. (either ETrue or EFalse)
sl@0
   367
TVerdict TCanCreateSourceBufferTestStep::DoTestStepL()
sl@0
   368
	{
sl@0
   369
	return (iSource->CanCreateSourceBuffer() == iCanCreateSourceBuffer) ? EPass : EFail;
sl@0
   370
	}
sl@0
   371
sl@0
   372
// TSourceSampleConvertTestStep
sl@0
   373
// Test that MDataSource::SourceSampleConvert returns the expected value. (either ETrue or EFalse)
sl@0
   374
TVerdict TSourceSampleConvertTestStep::DoTestStepL()
sl@0
   375
	{
sl@0
   376
	return (iSource->SourceSampleConvert() == iSourceSampleConvert) ? EPass : EFail;
sl@0
   377
	}
sl@0
   378
sl@0
   379
TInt TCreateSourceBuffer1TestStep::SendEventToClient(const TMMFEvent& aEvent)
sl@0
   380
	{
sl@0
   381
	// This callback won't get called for this test
sl@0
   382
	//	DevSoundWP - yes it will
sl@0
   383
	if (aEvent.iErrorCode == KErrNoMemory)
sl@0
   384
		CActiveScheduler::Stop();
sl@0
   385
//	ASSERT(aEvent.iErrorCode == KErrNone);
sl@0
   386
	return 0;
sl@0
   387
	}
sl@0
   388
sl@0
   389
sl@0
   390
TVerdict TCreateSourceBuffer1TestStep::DoTestStepL()
sl@0
   391
	{
sl@0
   392
	TMediaId mediaId;
sl@0
   393
	TBool ref;
sl@0
   394
	MDataSource* source = NULL;
sl@0
   395
	HBufC8* dataDes = NULL;
sl@0
   396
sl@0
   397
sl@0
   398
	if (iSourceType == ESourceTypeDes)
sl@0
   399
		{
sl@0
   400
		dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
   401
		}
sl@0
   402
sl@0
   403
	source = CreateSourceL(iSourceType, dataDes);
sl@0
   404
	CleanupDeletePushL(source);
sl@0
   405
sl@0
   406
	CMMFBuffer* nullBuffer = source->CreateSourceBufferL(mediaId, ref);
sl@0
   407
sl@0
   408
	TInt err = source->SourceThreadLogon(*this);
sl@0
   409
	User::LeaveIfError(err);
sl@0
   410
	TBool loggedOn = ETrue;
sl@0
   411
sl@0
   412
	source->NegotiateSourceL(*iSink);
sl@0
   413
sl@0
   414
	//DevSound WP - Must Prime before calling FillBufferL
sl@0
   415
	source->SourcePrimeL();
sl@0
   416
sl@0
   417
	//DevSound WP - Audio Input effectively drives flow in v8.0
sl@0
   418
	//so just make first call to FillBufferL and then call active scheduler
sl@0
   419
	source->FillBufferL(nullBuffer, iSink, mediaId);	// first call inits DevSound
sl@0
   420
	//source->FillBufferL(nullBuffer, iSink, mediaId);	// second call starts recording
sl@0
   421
sl@0
   422
	CActiveScheduler::Start();	// wait for BufferFilledL callback
sl@0
   423
sl@0
   424
	CMMFBuffer* buffer = static_cast<CMMFDummySink*>(iSink)->MmfBuffer();
sl@0
   425
sl@0
   426
	TVerdict result = EPass;
sl@0
   427
	if ((buffer) && (static_cast<CMMFDummySink*>(iSink)->BufferFilledOk()))
sl@0
   428
		{
sl@0
   429
		if (ref != iExpectedRef)
sl@0
   430
			result = EFail;
sl@0
   431
sl@0
   432
		if (buffer->Type() != iExpectedType)
sl@0
   433
			result = EFail;
sl@0
   434
sl@0
   435
	
sl@0
   436
		//	if (buffer->Status() != EAvailable)
sl@0
   437
		//	result = EFail;
sl@0
   438
sl@0
   439
sl@0
   440
sl@0
   441
sl@0
   442
		buffer = NULL;
sl@0
   443
sl@0
   444
		//DevSound WP done this	source->SourcePrimeL();
sl@0
   445
		source->SourcePlayL();
sl@0
   446
		source->SourcePauseL();
sl@0
   447
		source->SourceStopL();
sl@0
   448
		}
sl@0
   449
sl@0
   450
sl@0
   451
	TMMFPrioritySettings prioritySettings;
sl@0
   452
	source->SetSourcePrioritySettings(prioritySettings);
sl@0
   453
	if (loggedOn)
sl@0
   454
		source->SourceThreadLogoff();
sl@0
   455
sl@0
   456
//	if (buffer != NULL) DevSound WP  it's not your buffer to delete
sl@0
   457
//		result = EFail;		// buffer not deleted
sl@0
   458
sl@0
   459
	CleanupStack::PopAndDestroy(source);
sl@0
   460
	if (dataDes)
sl@0
   461
		CleanupStack::PopAndDestroy(dataDes);
sl@0
   462
sl@0
   463
	return result;
sl@0
   464
	}
sl@0
   465
sl@0
   466
TInt TCreateSourceBuffer2TestStep::SendEventToClient(const TMMFEvent& aEvent)
sl@0
   467
	{
sl@0
   468
	// This callback won't get called for this test
sl@0
   469
	//DevSound WP - this callback can get called as an OOM condition can occur
sl@0
   470
	//on the alloc tests after the active scheduler has started
sl@0
   471
	//ASSERT(aEvent.iErrorCode == KErrNone);
sl@0
   472
	//	DevSoundWP - if it is OOM need to stop active scheduler
sl@0
   473
	if (aEvent.iErrorCode == KErrNoMemory)
sl@0
   474
		CActiveScheduler::Stop();
sl@0
   475
	return 0;
sl@0
   476
	}
sl@0
   477
sl@0
   478
TVerdict TCreateSourceBuffer2TestStep::DoTestStepL()
sl@0
   479
	{
sl@0
   480
	TMediaId mediaId;
sl@0
   481
	TBool ref;
sl@0
   482
	MDataSource* source = NULL;
sl@0
   483
	HBufC8* dataDes = NULL;
sl@0
   484
sl@0
   485
	if (iSourceType == ESourceTypeDes)
sl@0
   486
		{
sl@0
   487
		dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
   488
		}
sl@0
   489
sl@0
   490
	source = CreateSourceL(iSourceType, dataDes);
sl@0
   491
	CleanupDeletePushL(source);
sl@0
   492
sl@0
   493
	CMMFBuffer* nullBuffer = source->CreateSourceBufferL(mediaId, *iSinkBuffer, ref);
sl@0
   494
sl@0
   495
	TInt err = source->SourceThreadLogon(*this);
sl@0
   496
	User::LeaveIfError(err);
sl@0
   497
	TBool loggedOn = ETrue;
sl@0
   498
sl@0
   499
	source->NegotiateSourceL(*iSink);
sl@0
   500
sl@0
   501
	//DevSound WP - Must Prime before calling FillBufferL
sl@0
   502
	source->SourcePrimeL();
sl@0
   503
sl@0
   504
	//DevSound WP - Audio Input effectively drives flow in v8.0
sl@0
   505
	//so just make first call to FillBufferL and then call active scheduler
sl@0
   506
	source->FillBufferL(nullBuffer, iSink, mediaId);	// first call inits DevSound
sl@0
   507
	//source->FillBufferL(nullBuffer, iSink, mediaId);	// second call starts recording
sl@0
   508
sl@0
   509
	CActiveScheduler::Start();	// wait for BufferFilledL callback
sl@0
   510
sl@0
   511
	CMMFBuffer* buffer = static_cast<CMMFDummySink*>(iSink)->MmfBuffer();
sl@0
   512
sl@0
   513
	TVerdict result = EPass;
sl@0
   514
	//DevSound WP	if (buffer)
sl@0
   515
	//an OOM can occur during AS in which case buffer is not valid
sl@0
   516
	if ((buffer) && (static_cast<CMMFDummySink*>(iSink)->BufferFilledOk()))
sl@0
   517
		{
sl@0
   518
		if (ref != iExpectedRef)
sl@0
   519
			result = EFail;
sl@0
   520
sl@0
   521
		if (buffer->Type() != iExpectedType)
sl@0
   522
			result = EFail;
sl@0
   523
sl@0
   524
	
sl@0
   525
		buffer = NULL;
sl@0
   526
sl@0
   527
		source->SourcePlayL();
sl@0
   528
		source->SourcePauseL();
sl@0
   529
		source->SourceStopL();
sl@0
   530
		}
sl@0
   531
sl@0
   532
	TMMFPrioritySettings prioritySettings;
sl@0
   533
	source->SetSourcePrioritySettings(prioritySettings);
sl@0
   534
	if (loggedOn)
sl@0
   535
		source->SourceThreadLogoff();
sl@0
   536
sl@0
   537
//DevSound WP buffer not null if OOM
sl@0
   538
	//if (buffer != NULL)
sl@0
   539
	//result = EFail;		// buffer not deleted
sl@0
   540
sl@0
   541
	CleanupStack::PopAndDestroy(source);
sl@0
   542
	if (dataDes)
sl@0
   543
		CleanupStack::PopAndDestroy(dataDes);
sl@0
   544
sl@0
   545
	return result;
sl@0
   546
	}
sl@0
   547
sl@0
   548
TVerdict TSourceThreadLogonTestStep::DoTestStepL()
sl@0
   549
	{
sl@0
   550
	User::LeaveIfError(iSource->SourceThreadLogon(*iEventHandler));
sl@0
   551
sl@0
   552
	iSource->SourceThreadLogoff();
sl@0
   553
sl@0
   554
	return EPass;
sl@0
   555
	}
sl@0
   556
sl@0
   557
TVerdict TNegotiateSourceTestStep::DoTestStepL()
sl@0
   558
	{
sl@0
   559
	iSource->NegotiateSourceL(*iSink);
sl@0
   560
	return EPass;
sl@0
   561
	}
sl@0
   562
sl@0
   563
TVerdict TFillBufferTestStep::DoTestStepL()
sl@0
   564
	{
sl@0
   565
	RandomiseBuffer();
sl@0
   566
sl@0
   567
	TMediaId mediaId;
sl@0
   568
	TRAPD(err, iSource->FillBufferL(iBuffer, iSink, mediaId));
sl@0
   569
	if (iAsynchronousRead && (err == KErrNone))
sl@0
   570
		CActiveScheduler::Start();
sl@0
   571
sl@0
   572
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
   573
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
   574
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
   575
		return EFail;
sl@0
   576
sl@0
   577
	if (err != KErrNone)
sl@0
   578
		User::Leave(err);
sl@0
   579
sl@0
   580
	if (!sinkBufferFilledOk)
sl@0
   581
		{
sl@0
   582
		if ((err = dummySink->Error()) != KErrNone)
sl@0
   583
			User::Leave(err);
sl@0
   584
sl@0
   585
		return EFail;
sl@0
   586
		}
sl@0
   587
sl@0
   588
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
   589
	TInt readLength = buffer->BufferSize();
sl@0
   590
	if (readLength != iReadLength)
sl@0
   591
		return EFail;
sl@0
   592
sl@0
   593
	err = CheckBuffer();
sl@0
   594
	iPosition += readLength;
sl@0
   595
	return (err == 0) ? EPass : EFail;
sl@0
   596
	}
sl@0
   597
sl@0
   598
TVerdict TFillLastBufferTestStep::DoTestStepL()
sl@0
   599
	{
sl@0
   600
	// Create big buffer.
sl@0
   601
	CMMFDescriptorBuffer* bigBuffer = CMMFDescriptorBuffer::NewL(KTestOverDataSize);
sl@0
   602
	CleanupStack::PushL(bigBuffer);
sl@0
   603
sl@0
   604
	// Create valid buffer.
sl@0
   605
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
   606
	CleanupStack::PushL(validBuffer);
sl@0
   607
sl@0
   608
	// Randomise the valid buffer.
sl@0
   609
	iBuffer = validBuffer;
sl@0
   610
	RandomiseBuffer();
sl@0
   611
sl@0
   612
	// Create a descriptor source.
sl@0
   613
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
   614
	MDataSource* source = MDataSource::NewSourceL(iSourceUid, iConfigDes);
sl@0
   615
	CleanupDeletePushL(source);
sl@0
   616
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
   617
	source->SourcePrimeL();
sl@0
   618
sl@0
   619
	iPosition = 0;
sl@0
   620
	TMediaId mediaId;
sl@0
   621
	TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
   622
	if (iAsynchronousRead && (err == KErrNone))
sl@0
   623
		CActiveScheduler::Start();
sl@0
   624
sl@0
   625
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
   626
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
   627
		{
sl@0
   628
		CleanupStack::PopAndDestroy(source);
sl@0
   629
		CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   630
		return EFail;
sl@0
   631
		}
sl@0
   632
sl@0
   633
	if (err != KErrNone)
sl@0
   634
		{
sl@0
   635
		CleanupStack::PopAndDestroy(source);
sl@0
   636
		User::Leave(err);
sl@0
   637
		}
sl@0
   638
sl@0
   639
	if (!sinkBufferFilledOk)
sl@0
   640
		{
sl@0
   641
		CleanupStack::PopAndDestroy(source);
sl@0
   642
sl@0
   643
		if ((err = dummySink->Error()) != KErrNone)
sl@0
   644
			User::Leave(err);
sl@0
   645
sl@0
   646
		CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   647
		return EFail;
sl@0
   648
		}
sl@0
   649
sl@0
   650
	if (iBuffer->LastBuffer())
sl@0
   651
		{
sl@0
   652
		CleanupStack::PopAndDestroy(source);
sl@0
   653
sl@0
   654
		CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   655
		return EFail;
sl@0
   656
		}
sl@0
   657
sl@0
   658
	err = CheckBuffer();
sl@0
   659
	if (err)
sl@0
   660
		{
sl@0
   661
		CleanupStack::PopAndDestroy(source);
sl@0
   662
sl@0
   663
		CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   664
		return EFail;
sl@0
   665
		}
sl@0
   666
sl@0
   667
	// Randomise the big buffer.
sl@0
   668
	iBuffer = bigBuffer;
sl@0
   669
	RandomiseBuffer();
sl@0
   670
sl@0
   671
	TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
   672
	if (iAsynchronousRead && (err == KErrNone))
sl@0
   673
		CActiveScheduler::Start();
sl@0
   674
sl@0
   675
	sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
   676
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
   677
		{
sl@0
   678
		CleanupStack::PopAndDestroy(source);
sl@0
   679
sl@0
   680
		CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   681
		return EFail;
sl@0
   682
		}
sl@0
   683
sl@0
   684
	if (err != KErrNone)
sl@0
   685
		{
sl@0
   686
		CleanupStack::PopAndDestroy(source);
sl@0
   687
sl@0
   688
		User::Leave(err);
sl@0
   689
		}
sl@0
   690
sl@0
   691
	if (!sinkBufferFilledOk)
sl@0
   692
		{
sl@0
   693
		CleanupStack::PopAndDestroy(source);
sl@0
   694
sl@0
   695
		if ((err = dummySink->Error()) != KErrNone)
sl@0
   696
			User::Leave(err);
sl@0
   697
sl@0
   698
		CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   699
		return EFail;
sl@0
   700
		}
sl@0
   701
sl@0
   702
	if (!iBuffer->LastBuffer())
sl@0
   703
		{
sl@0
   704
		CleanupStack::PopAndDestroy(source);
sl@0
   705
sl@0
   706
		CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   707
		return EFail;
sl@0
   708
		}
sl@0
   709
sl@0
   710
	iPosition += KTestBufferSize;
sl@0
   711
	err = CheckBuffer();
sl@0
   712
	if (err)
sl@0
   713
		{
sl@0
   714
		CleanupStack::PopAndDestroy(source);
sl@0
   715
sl@0
   716
		CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   717
		return EFail;
sl@0
   718
		}
sl@0
   719
sl@0
   720
	CleanupStack::PopAndDestroy(source);
sl@0
   721
sl@0
   722
	// Test last buffer with request size.
sl@0
   723
	source = STATIC_CAST(CMMFClip*, MDataSource::NewSourceL(iSourceUid, iConfigDes));
sl@0
   724
	CleanupDeletePushL(source);
sl@0
   725
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
   726
	source->SourcePrimeL();
sl@0
   727
sl@0
   728
	TBool lastBuffer;
sl@0
   729
	validBuffer->SetRequestSizeL(KTestReadSize);
sl@0
   730
sl@0
   731
	iPosition = 0;
sl@0
   732
	iBuffer = validBuffer;
sl@0
   733
	do
sl@0
   734
		{
sl@0
   735
		RandomiseBuffer();
sl@0
   736
		TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
   737
		if (iAsynchronousRead && (err == KErrNone))
sl@0
   738
			CActiveScheduler::Start();
sl@0
   739
sl@0
   740
		sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
   741
		if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
   742
			{
sl@0
   743
			CleanupStack::PopAndDestroy(source);
sl@0
   744
sl@0
   745
			CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   746
			return EFail;
sl@0
   747
			}
sl@0
   748
sl@0
   749
		if (err != KErrNone)
sl@0
   750
			{
sl@0
   751
			CleanupStack::PopAndDestroy(source);
sl@0
   752
sl@0
   753
			User::Leave(err);
sl@0
   754
			}
sl@0
   755
sl@0
   756
		if (!sinkBufferFilledOk)
sl@0
   757
			{
sl@0
   758
			CleanupStack::PopAndDestroy(source);
sl@0
   759
sl@0
   760
			if ((err = dummySink->Error()) != KErrNone)
sl@0
   761
				User::Leave(err);
sl@0
   762
sl@0
   763
			CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   764
			return EFail;
sl@0
   765
			}
sl@0
   766
sl@0
   767
		lastBuffer = (KTestDataSize-iPosition)<KTestReadSize;
sl@0
   768
		if (iBuffer->LastBuffer() != lastBuffer)
sl@0
   769
			{
sl@0
   770
			CleanupStack::PopAndDestroy(source);
sl@0
   771
sl@0
   772
			CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   773
			return EFail;
sl@0
   774
			}
sl@0
   775
sl@0
   776
		err = CheckBuffer();
sl@0
   777
		if (err)
sl@0
   778
			{
sl@0
   779
			CleanupStack::PopAndDestroy(source);
sl@0
   780
sl@0
   781
			CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   782
			return EFail;
sl@0
   783
			}
sl@0
   784
sl@0
   785
		iPosition+= validBuffer->BufferSize();
sl@0
   786
		}
sl@0
   787
	while (validBuffer->BufferSize() != 0);
sl@0
   788
sl@0
   789
	CleanupStack::PopAndDestroy(source);
sl@0
   790
sl@0
   791
	CleanupStack::PopAndDestroy(2, bigBuffer); // validBuffer, bigBuffer
sl@0
   792
	return EPass;
sl@0
   793
	}
sl@0
   794
sl@0
   795
TVerdict TReadLastBufferTestStep::DoTestStepL()
sl@0
   796
	{
sl@0
   797
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource);
sl@0
   798
sl@0
   799
	// Create valid buffer.
sl@0
   800
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
   801
	CleanupStack::PushL(validBuffer);
sl@0
   802
sl@0
   803
	// Randomise the valid buffer.
sl@0
   804
	iBuffer = validBuffer;
sl@0
   805
	RandomiseBuffer();
sl@0
   806
sl@0
   807
	// Test last buffer without request size.
sl@0
   808
	iPosition = 0;
sl@0
   809
	TRAPD(err, clip->ReadBufferL(KTestBufferSize, iBuffer, iPosition, iSink));
sl@0
   810
	if (iAsynchronousRead && (err == KErrNone))
sl@0
   811
		CActiveScheduler::Start();
sl@0
   812
sl@0
   813
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
   814
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
   815
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
   816
		{
sl@0
   817
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   818
		return EFail;
sl@0
   819
		}
sl@0
   820
sl@0
   821
	if (err != KErrNone)
sl@0
   822
		User::Leave(err);
sl@0
   823
sl@0
   824
	if (!sinkBufferFilledOk)
sl@0
   825
		{
sl@0
   826
		if ((err = dummySink->Error()) != KErrNone)
sl@0
   827
			User::Leave(err);
sl@0
   828
sl@0
   829
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   830
		return EFail;
sl@0
   831
		}
sl@0
   832
sl@0
   833
	if (iBuffer->LastBuffer() || (iBuffer->BufferSize() < TUint(KTestBufferSize)))
sl@0
   834
		{
sl@0
   835
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   836
		return EFail;
sl@0
   837
		}
sl@0
   838
sl@0
   839
	err = CheckBuffer();
sl@0
   840
	if (err)
sl@0
   841
		{
sl@0
   842
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   843
		return EFail;
sl@0
   844
		}
sl@0
   845
sl@0
   846
	iPosition = KTestDataSize-10;
sl@0
   847
	TRAP(err, clip->ReadBufferL(KTestReadSize, iBuffer, iPosition, iSink));
sl@0
   848
	if (iAsynchronousRead && (err == KErrNone))
sl@0
   849
		CActiveScheduler::Start();
sl@0
   850
sl@0
   851
	sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
   852
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
   853
		{
sl@0
   854
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   855
		return EFail;
sl@0
   856
		}
sl@0
   857
sl@0
   858
	if (err != KErrNone)
sl@0
   859
		User::Leave(err);
sl@0
   860
sl@0
   861
	if (!sinkBufferFilledOk)
sl@0
   862
		{
sl@0
   863
		if ((err = dummySink->Error()) != KErrNone)
sl@0
   864
			User::Leave(err);
sl@0
   865
sl@0
   866
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   867
		return EFail;
sl@0
   868
		}
sl@0
   869
sl@0
   870
	if (!validBuffer->LastBuffer() || (iBuffer->BufferSize() != 10))
sl@0
   871
		{
sl@0
   872
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   873
		return EFail;
sl@0
   874
		}
sl@0
   875
sl@0
   876
	err = CheckBuffer();
sl@0
   877
	if (err)
sl@0
   878
		{
sl@0
   879
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   880
		return EFail;
sl@0
   881
		}
sl@0
   882
	CleanupStack::PopAndDestroy(validBuffer);
sl@0
   883
sl@0
   884
	validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
   885
	CleanupStack::PushL(validBuffer);
sl@0
   886
sl@0
   887
	// Randomise the valid buffer.
sl@0
   888
	iBuffer = validBuffer;
sl@0
   889
	RandomiseBuffer();
sl@0
   890
sl@0
   891
	// Test last buffer with request size.
sl@0
   892
	validBuffer->SetRequestSizeL(KTestReadSize);
sl@0
   893
sl@0
   894
	iPosition = 0;
sl@0
   895
	TRAP(err, clip->ReadBufferL(KTestReadSize, iBuffer, iPosition, iSink));
sl@0
   896
	if (iAsynchronousRead && (err == KErrNone))
sl@0
   897
		CActiveScheduler::Start();
sl@0
   898
sl@0
   899
	sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
   900
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
   901
		{
sl@0
   902
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   903
		return EFail;
sl@0
   904
		}
sl@0
   905
sl@0
   906
	if (err != KErrNone)
sl@0
   907
		User::Leave(err);
sl@0
   908
sl@0
   909
	if (!sinkBufferFilledOk)
sl@0
   910
		{
sl@0
   911
		if ((err = dummySink->Error()) != KErrNone)
sl@0
   912
			User::Leave(err);
sl@0
   913
sl@0
   914
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   915
		return EFail;
sl@0
   916
		}
sl@0
   917
sl@0
   918
	if (iBuffer->LastBuffer() || (iBuffer->BufferSize() < TUint(KTestReadSize)))
sl@0
   919
		{
sl@0
   920
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   921
		return EFail;
sl@0
   922
		}
sl@0
   923
sl@0
   924
	err = CheckBuffer();
sl@0
   925
	if (err)
sl@0
   926
		{
sl@0
   927
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   928
		return EFail;
sl@0
   929
		}
sl@0
   930
sl@0
   931
	iPosition = KTestDataSize - 10;
sl@0
   932
	TRAP(err, clip->ReadBufferL(KTestReadSize, iBuffer, iPosition, iSink));
sl@0
   933
	if (iAsynchronousRead && (err == KErrNone))
sl@0
   934
		CActiveScheduler::Start();
sl@0
   935
sl@0
   936
	sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
   937
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
   938
		{
sl@0
   939
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   940
		return EFail;
sl@0
   941
		}
sl@0
   942
sl@0
   943
	if (err != KErrNone)
sl@0
   944
		User::Leave(err);
sl@0
   945
sl@0
   946
	if (!sinkBufferFilledOk)
sl@0
   947
		{
sl@0
   948
		if ((err = dummySink->Error()) != KErrNone)
sl@0
   949
			User::Leave(err);
sl@0
   950
sl@0
   951
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   952
		return EFail;
sl@0
   953
		}
sl@0
   954
sl@0
   955
	if (!iBuffer->LastBuffer() || (iBuffer->BufferSize() != 10))
sl@0
   956
		{
sl@0
   957
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   958
		return EFail;
sl@0
   959
		}
sl@0
   960
sl@0
   961
	err = CheckBuffer();
sl@0
   962
	if (err)
sl@0
   963
		{
sl@0
   964
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   965
		return EFail;
sl@0
   966
		}
sl@0
   967
sl@0
   968
	CleanupStack::PopAndDestroy(validBuffer);
sl@0
   969
	return EPass;
sl@0
   970
	}
sl@0
   971
sl@0
   972
TVerdict TReadLastBuffer2TestStep::DoTestStepL()
sl@0
   973
	{
sl@0
   974
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource);
sl@0
   975
sl@0
   976
	// Create valid buffer.
sl@0
   977
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
   978
	CleanupStack::PushL(validBuffer);
sl@0
   979
sl@0
   980
	// Randomise the valid buffer.
sl@0
   981
	iBuffer = validBuffer;
sl@0
   982
	RandomiseBuffer();
sl@0
   983
sl@0
   984
	// Test last buffer without request size.
sl@0
   985
	iPosition = 0;
sl@0
   986
	TRAPD(err, clip->ReadBufferL(iBuffer, iPosition, iSink));
sl@0
   987
	if (iAsynchronousRead && (err == KErrNone))
sl@0
   988
		CActiveScheduler::Start();
sl@0
   989
sl@0
   990
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
   991
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
   992
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
   993
		{
sl@0
   994
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
   995
		return EFail;
sl@0
   996
		}
sl@0
   997
sl@0
   998
	if (err != KErrNone)
sl@0
   999
		User::Leave(err);
sl@0
  1000
sl@0
  1001
	if (!sinkBufferFilledOk)
sl@0
  1002
		{
sl@0
  1003
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  1004
			User::Leave(err);
sl@0
  1005
sl@0
  1006
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1007
		return EFail;
sl@0
  1008
		}
sl@0
  1009
sl@0
  1010
	if (iBuffer->LastBuffer() || (iBuffer->BufferSize() != TUint(KTestBufferSize)))
sl@0
  1011
		{
sl@0
  1012
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1013
		return EFail;
sl@0
  1014
		}
sl@0
  1015
sl@0
  1016
	err = CheckBuffer();
sl@0
  1017
	if (err)
sl@0
  1018
		{
sl@0
  1019
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1020
		return EFail;
sl@0
  1021
		}
sl@0
  1022
sl@0
  1023
	iPosition = KTestDataSize-10;
sl@0
  1024
	TRAP(err, clip->ReadBufferL(iBuffer, iPosition, iSink));
sl@0
  1025
	if (iAsynchronousRead && (err == KErrNone))
sl@0
  1026
		CActiveScheduler::Start();
sl@0
  1027
sl@0
  1028
	sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  1029
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  1030
		{
sl@0
  1031
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1032
		return EFail;
sl@0
  1033
		}
sl@0
  1034
sl@0
  1035
	if (err != KErrNone)
sl@0
  1036
		User::Leave(err);
sl@0
  1037
sl@0
  1038
	if (!sinkBufferFilledOk)
sl@0
  1039
		{
sl@0
  1040
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  1041
			User::Leave(err);
sl@0
  1042
sl@0
  1043
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1044
		return EFail;
sl@0
  1045
		}
sl@0
  1046
sl@0
  1047
	if (!validBuffer->LastBuffer() || (iBuffer->BufferSize() != 10))
sl@0
  1048
		{
sl@0
  1049
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1050
		return EFail;
sl@0
  1051
		}
sl@0
  1052
sl@0
  1053
	err = CheckBuffer();
sl@0
  1054
	if (err)
sl@0
  1055
		{
sl@0
  1056
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1057
		return EFail;
sl@0
  1058
		}
sl@0
  1059
	CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1060
sl@0
  1061
	validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  1062
	CleanupStack::PushL(validBuffer);
sl@0
  1063
sl@0
  1064
	// Randomise the valid buffer.
sl@0
  1065
	iBuffer = validBuffer;
sl@0
  1066
	RandomiseBuffer();
sl@0
  1067
sl@0
  1068
	// Test last buffer with request size.
sl@0
  1069
	validBuffer->SetRequestSizeL(KTestReadSize);
sl@0
  1070
sl@0
  1071
	iPosition = 0;
sl@0
  1072
	TRAP(err, clip->ReadBufferL(iBuffer, iPosition, iSink));
sl@0
  1073
	if (iAsynchronousRead && (err == KErrNone))
sl@0
  1074
		CActiveScheduler::Start();
sl@0
  1075
sl@0
  1076
	sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  1077
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  1078
		{
sl@0
  1079
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1080
		return EFail;
sl@0
  1081
		}
sl@0
  1082
sl@0
  1083
	if (err != KErrNone)
sl@0
  1084
		User::Leave(err);
sl@0
  1085
sl@0
  1086
	if (!sinkBufferFilledOk)
sl@0
  1087
		{
sl@0
  1088
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  1089
			User::Leave(err);
sl@0
  1090
sl@0
  1091
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1092
		return EFail;
sl@0
  1093
		}
sl@0
  1094
sl@0
  1095
	if (iBuffer->LastBuffer() || (iBuffer->BufferSize() != TUint(KTestReadSize)))
sl@0
  1096
		{
sl@0
  1097
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1098
		return EFail;
sl@0
  1099
		}
sl@0
  1100
sl@0
  1101
	err = CheckBuffer();
sl@0
  1102
	if (err)
sl@0
  1103
		{
sl@0
  1104
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1105
		return EFail;
sl@0
  1106
		}
sl@0
  1107
sl@0
  1108
	iPosition = KTestDataSize - 10;
sl@0
  1109
	TRAP(err, clip->ReadBufferL(iBuffer, iPosition, iSink));
sl@0
  1110
	if (iAsynchronousRead && (err == KErrNone))
sl@0
  1111
		CActiveScheduler::Start();
sl@0
  1112
sl@0
  1113
	sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  1114
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  1115
		{
sl@0
  1116
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1117
		return EFail;
sl@0
  1118
		}
sl@0
  1119
sl@0
  1120
	if (err != KErrNone)
sl@0
  1121
		User::Leave(err);
sl@0
  1122
sl@0
  1123
	if (!sinkBufferFilledOk)
sl@0
  1124
		{
sl@0
  1125
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  1126
			User::Leave(err);
sl@0
  1127
sl@0
  1128
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1129
		return EFail;
sl@0
  1130
		}
sl@0
  1131
sl@0
  1132
	if (!iBuffer->LastBuffer() || (iBuffer->BufferSize() != 10))
sl@0
  1133
		{
sl@0
  1134
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1135
		return EFail;
sl@0
  1136
		}
sl@0
  1137
sl@0
  1138
	err = CheckBuffer();
sl@0
  1139
	if (err)
sl@0
  1140
		{
sl@0
  1141
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1142
		return EFail;
sl@0
  1143
		}
sl@0
  1144
sl@0
  1145
	CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1146
	return EPass;
sl@0
  1147
	}
sl@0
  1148
sl@0
  1149
TVerdict TReadLastBuffer3TestStep::DoTestStepL()
sl@0
  1150
	{
sl@0
  1151
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource);
sl@0
  1152
sl@0
  1153
	// Create valid buffer.
sl@0
  1154
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  1155
	CleanupStack::PushL(validBuffer);
sl@0
  1156
sl@0
  1157
	// Randomise the valid buffer.
sl@0
  1158
	iBuffer = validBuffer;
sl@0
  1159
	RandomiseBuffer();
sl@0
  1160
sl@0
  1161
	// Test last buffer without request size.
sl@0
  1162
	iPosition = 0;
sl@0
  1163
	clip->ReadBufferL(iBuffer, iPosition);
sl@0
  1164
sl@0
  1165
	if (iBuffer->LastBuffer() || (iBuffer->BufferSize() != TUint(KTestBufferSize)))
sl@0
  1166
		{
sl@0
  1167
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1168
		return EFail;
sl@0
  1169
		}
sl@0
  1170
sl@0
  1171
	TInt err = CheckBuffer();
sl@0
  1172
	if (err)
sl@0
  1173
		{
sl@0
  1174
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1175
		return EFail;
sl@0
  1176
		}
sl@0
  1177
sl@0
  1178
	iPosition = KTestDataSize-10;
sl@0
  1179
	clip->ReadBufferL(iBuffer, iPosition);
sl@0
  1180
sl@0
  1181
	if (!validBuffer->LastBuffer() || (iBuffer->BufferSize() != 10))
sl@0
  1182
		{
sl@0
  1183
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1184
		return EFail;
sl@0
  1185
		}
sl@0
  1186
sl@0
  1187
	err = CheckBuffer();
sl@0
  1188
	if (err)
sl@0
  1189
		{
sl@0
  1190
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1191
		return EFail;
sl@0
  1192
		}
sl@0
  1193
	CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1194
sl@0
  1195
	validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  1196
	CleanupStack::PushL(validBuffer);
sl@0
  1197
sl@0
  1198
	// Randomise the valid buffer.
sl@0
  1199
	iBuffer = validBuffer;
sl@0
  1200
	RandomiseBuffer();
sl@0
  1201
sl@0
  1202
	// Test last buffer with request size.
sl@0
  1203
	validBuffer->SetRequestSizeL(KTestReadSize);
sl@0
  1204
sl@0
  1205
	iPosition = 0;
sl@0
  1206
	clip->ReadBufferL(iBuffer, iPosition);
sl@0
  1207
sl@0
  1208
	if (iBuffer->LastBuffer() || (iBuffer->BufferSize() != TUint(KTestReadSize)))
sl@0
  1209
		{
sl@0
  1210
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1211
		return EFail;
sl@0
  1212
		}
sl@0
  1213
sl@0
  1214
	err = CheckBuffer();
sl@0
  1215
	if (err)
sl@0
  1216
		{
sl@0
  1217
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1218
		return EFail;
sl@0
  1219
		}
sl@0
  1220
sl@0
  1221
	iPosition = KTestDataSize - 10;
sl@0
  1222
	clip->ReadBufferL(iBuffer, iPosition);
sl@0
  1223
sl@0
  1224
	if (!iBuffer->LastBuffer() || (iBuffer->BufferSize() != 10))
sl@0
  1225
		{
sl@0
  1226
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1227
		return EFail;
sl@0
  1228
		}
sl@0
  1229
sl@0
  1230
	err = CheckBuffer();
sl@0
  1231
	if (err)
sl@0
  1232
		{
sl@0
  1233
		CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1234
		return EFail;
sl@0
  1235
		}
sl@0
  1236
sl@0
  1237
	CleanupStack::PopAndDestroy(validBuffer);
sl@0
  1238
	return EPass;
sl@0
  1239
	}
sl@0
  1240
sl@0
  1241
sl@0
  1242
TVerdict TNewSinkTestStep::DoTestStepL()
sl@0
  1243
	{
sl@0
  1244
	MDataSink* sink = MDataSink::NewSinkL(iUid, *iConfigDes);
sl@0
  1245
	delete sink;
sl@0
  1246
sl@0
  1247
	return EPass;
sl@0
  1248
	}
sl@0
  1249
sl@0
  1250
TVerdict TSinkTypeTestStep::DoTestStepL()
sl@0
  1251
	{
sl@0
  1252
	TUid dataSinkType = iSink->DataSinkType();
sl@0
  1253
	if (dataSinkType != iUid)
sl@0
  1254
		return EFail;
sl@0
  1255
sl@0
  1256
	TMediaId mediaId;
sl@0
  1257
	TFourCC fourCC = iSink->SinkDataTypeCode(mediaId);
sl@0
  1258
	if (fourCC != iFourCC)
sl@0
  1259
		return EFail;
sl@0
  1260
sl@0
  1261
	fourCC = 0x4E554C4C; // 'LLUN'
sl@0
  1262
	TInt err = iSink->SetSinkDataTypeCode(fourCC, mediaId);
sl@0
  1263
	if (iCanSetSinkDataType)
sl@0
  1264
		{
sl@0
  1265
		if (err != KErrNone)
sl@0
  1266
			User::Leave(err);
sl@0
  1267
sl@0
  1268
		if (iSink->SinkDataTypeCode(mediaId) != fourCC)
sl@0
  1269
			return EFail;
sl@0
  1270
sl@0
  1271
		User::LeaveIfError(iSink->SetSinkDataTypeCode(iFourCC, mediaId));
sl@0
  1272
		}
sl@0
  1273
	else
sl@0
  1274
		{
sl@0
  1275
		if (err != KErrNotSupported)
sl@0
  1276
			{
sl@0
  1277
			if (err == KErrNone)
sl@0
  1278
				return EFail;
sl@0
  1279
sl@0
  1280
			User::Leave(err);
sl@0
  1281
			}
sl@0
  1282
sl@0
  1283
		if (iSink->SinkDataTypeCode(mediaId) != iFourCC)
sl@0
  1284
			return EFail;
sl@0
  1285
		}
sl@0
  1286
sl@0
  1287
	return EPass;
sl@0
  1288
	}
sl@0
  1289
sl@0
  1290
TVerdict TCanCreateSinkBufferTestStep::DoTestStepL()
sl@0
  1291
	{
sl@0
  1292
	return (iSink->CanCreateSinkBuffer() == iCanCreateSinkBuffer) ? EPass : EFail;
sl@0
  1293
	}
sl@0
  1294
sl@0
  1295
TVerdict TCreateSinkBufferTestStep0::DoTestStepL()
sl@0
  1296
	{
sl@0
  1297
	TVerdict result = EPass;
sl@0
  1298
	TMediaId mediaId;
sl@0
  1299
	TBool ref;
sl@0
  1300
sl@0
  1301
	// Create sink buffer
sl@0
  1302
	CMMFBuffer* nullBuffer = iSink->CreateSinkBufferL(mediaId, ref);
sl@0
  1303
	User::LeaveIfError( iSink->SinkThreadLogon(*(static_cast<CMMFDummySource*>(iSource))) );
sl@0
  1304
	TBool loggedOn = ETrue;
sl@0
  1305
sl@0
  1306
	iSink->EmptyBufferL(nullBuffer, iSource, mediaId);
sl@0
  1307
sl@0
  1308
	CMMFBuffer* buffer = static_cast<CMMFDummySource*>(iSource)->MmfBuffer();
sl@0
  1309
sl@0
  1310
	if (ref != iExpectedRef)
sl@0
  1311
		result = EFail;
sl@0
  1312
sl@0
  1313
	if (!buffer)
sl@0
  1314
		{
sl@0
  1315
		RDebug::Print(_L("*** TCreateSinkBufferTestStep:  iSink->CreateSinkBufferL returned NULL"));
sl@0
  1316
		result = EFail;
sl@0
  1317
		}
sl@0
  1318
sl@0
  1319
	if (result != EFail)
sl@0
  1320
		{
sl@0
  1321
		if (buffer->Type() != iExpectedType)
sl@0
  1322
			result = EFail;
sl@0
  1323
sl@0
  1324
		if (buffer->Status() != EAvailable)
sl@0
  1325
			result = EFail;
sl@0
  1326
sl@0
  1327
		if (buffer->Type() == KUidMmfDescriptorBuffer)
sl@0
  1328
			{
sl@0
  1329
			CMMFDataBuffer* dataBuffer = STATIC_CAST(CMMFDataBuffer*, buffer);
sl@0
  1330
			TDes8& data = dataBuffer->Data();
sl@0
  1331
sl@0
  1332
			if (data.MaxLength() != iExpectedMaxLength)
sl@0
  1333
				result = EFail;
sl@0
  1334
			}
sl@0
  1335
sl@0
  1336
		buffer = NULL;
sl@0
  1337
		}
sl@0
  1338
sl@0
  1339
	if (loggedOn)
sl@0
  1340
		iSink->SinkThreadLogoff();
sl@0
  1341
sl@0
  1342
	if (buffer != NULL)
sl@0
  1343
		result = EFail;		// buffer not deleted
sl@0
  1344
sl@0
  1345
	return result;
sl@0
  1346
	}
sl@0
  1347
sl@0
  1348
sl@0
  1349
TVerdict TCreateSinkBufferTestStep::DoTestPostambleL(TBool /*aCheck*/)
sl@0
  1350
	{
sl@0
  1351
	REComSession::FinalClose();
sl@0
  1352
	return EPass;
sl@0
  1353
	}
sl@0
  1354
sl@0
  1355
sl@0
  1356
TVerdict TCreateSinkBufferTestStep1::DoTestStepL()
sl@0
  1357
	{
sl@0
  1358
	TVerdict result = EPass;
sl@0
  1359
	TMediaId mediaId;
sl@0
  1360
	TBool ref;
sl@0
  1361
sl@0
  1362
	TBuf8<1> dummyConfigDes;
sl@0
  1363
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, dummyConfigDes);
sl@0
  1364
	CleanupDeletePushL(sink);
sl@0
  1365
sl@0
  1366
	//DevSound WP can't call prime before login	sink->SinkPrimeL();
sl@0
  1367
sl@0
  1368
	// Create sink buffer
sl@0
  1369
	CMMFBuffer* nullBuffer = sink->CreateSinkBufferL(mediaId, ref);
sl@0
  1370
	User::LeaveIfError( sink->SinkThreadLogon(*(static_cast<CMMFDummySource*>(iSource))) );
sl@0
  1371
	TCleanupItem threadLogOff(DoDataSinkThreadLogoff, sink);
sl@0
  1372
	CleanupStack::PushL(threadLogOff);
sl@0
  1373
sl@0
  1374
	//DevSound WP	sink->SinkPrimeL(); this should go after negotiate
sl@0
  1375
	TCleanupItem sinkStop(DoDataSinkStop, sink);
sl@0
  1376
	CleanupStack::PushL(sinkStop);
sl@0
  1377
	if (!iSource)
sl@0
  1378
		User::Leave(KErrNoMemory);
sl@0
  1379
	if (iFormat)
sl@0
  1380
		sink->NegotiateL(*iFormat);
sl@0
  1381
	else
sl@0
  1382
		sink->NegotiateL(*iSource);
sl@0
  1383
	sink->SinkPrimeL();//DevSound WP moved from above
sl@0
  1384
	sink->SinkPlayL();
sl@0
  1385
	sink->EmptyBufferL(nullBuffer, iSource, mediaId);
sl@0
  1386
	CActiveScheduler::Start();
sl@0
  1387
sl@0
  1388
	CMMFBuffer* buffer = static_cast<CMMFDummySource*>(iSource)->MmfBuffer();
sl@0
  1389
sl@0
  1390
	if (ref != iExpectedRef)
sl@0
  1391
		result = EFail;
sl@0
  1392
sl@0
  1393
	if (!buffer)
sl@0
  1394
		{
sl@0
  1395
		RDebug::Print(_L("*** TCreateSinkBufferTestStep:  sink->CreateSinkBufferL returned NULL"));
sl@0
  1396
		result = EFail;
sl@0
  1397
		}
sl@0
  1398
sl@0
  1399
	if (result != EFail)
sl@0
  1400
		{
sl@0
  1401
		if (buffer->Type() != iExpectedType)
sl@0
  1402
			result = EFail;
sl@0
  1403
sl@0
  1404
		//	DevSound WP buffers are owned and controller by
sl@0
  1405
		//	HwPlugins test should not make assumptions
sl@0
  1406
		//  if (buffer->Status() != EAvailable)
sl@0
  1407
		//	result = EFail;
sl@0
  1408
sl@0
  1409
		if (buffer->Type() == KUidMmfDescriptorBuffer)
sl@0
  1410
			{
sl@0
  1411
			/*
sl@0
  1412
			DevSound WP buffers are owned and controller by
sl@0
  1413
			HwPlugins test should not make assumptions
sl@0
  1414
			CMMFDataBuffer* dataBuffer = STATIC_CAST(CMMFDataBuffer*, buffer);
sl@0
  1415
			TDes8& data = dataBuffer->Data();
sl@0
  1416
sl@0
  1417
			if (data.MaxLength() != iExpectedMaxLength)
sl@0
  1418
				result = EFail;
sl@0
  1419
			*/
sl@0
  1420
			}
sl@0
  1421
sl@0
  1422
		buffer = NULL;
sl@0
  1423
		}
sl@0
  1424
sl@0
  1425
	// Re-test after logging on. (iNeedsSWConversion = ETrue)
sl@0
  1426
	User::LeaveIfError(sink->SinkThreadLogon(*(static_cast<CMMFDummySource*>(iSource))));
sl@0
  1427
sl@0
  1428
	CleanupStack::PopAndDestroy(3, sink);	// sinkStop, threadLogOff, sink
sl@0
  1429
sl@0
  1430
	//	if (buffer != NULL) DevSound WP might not be null if was never created
sl@0
  1431
	//		result = EFail; also not test apps buffer to delete
sl@0
  1432
sl@0
  1433
	return result;
sl@0
  1434
	}
sl@0
  1435
sl@0
  1436
TVerdict TCreateSinkBufferTestStep2::DoTestStepL()
sl@0
  1437
	{
sl@0
  1438
	TVerdict result = EPass;
sl@0
  1439
	TMediaId mediaId;
sl@0
  1440
	TBool ref;
sl@0
  1441
sl@0
  1442
	TBuf8<1> dummyConfigDes;
sl@0
  1443
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, dummyConfigDes);
sl@0
  1444
	CleanupDeletePushL(sink);
sl@0
  1445
	sink->SinkPrimeL();
sl@0
  1446
sl@0
  1447
	// Create sink buffer
sl@0
  1448
	CMMFBuffer* nullBuffer = sink->CreateSinkBufferL(mediaId, ref);
sl@0
  1449
	User::LeaveIfError( sink->SinkThreadLogon(*(static_cast<CMMFDummySource*>(iSource))) );
sl@0
  1450
	TCleanupItem threadLogOff(DoDataSinkThreadLogoff, sink);
sl@0
  1451
	CleanupStack::PushL(threadLogOff);
sl@0
  1452
sl@0
  1453
	sink->SinkPrimeL();
sl@0
  1454
	TCleanupItem sinkStop(DoDataSinkStop, sink);
sl@0
  1455
	CleanupStack::PushL(sinkStop);
sl@0
  1456
	if (!iSource)
sl@0
  1457
		User::Leave(KErrArgument);
sl@0
  1458
	if (iFormat)
sl@0
  1459
		sink->NegotiateL(*iFormat);
sl@0
  1460
	else
sl@0
  1461
		sink->NegotiateL(*iSource);
sl@0
  1462
	sink->SinkPlayL();
sl@0
  1463
	sink->EmptyBufferL(nullBuffer, iSource, mediaId);
sl@0
  1464
	CActiveScheduler::Start();
sl@0
  1465
sl@0
  1466
	CMMFBuffer* buffer = static_cast<CMMFDummySource*>(iSource)->MmfBuffer();
sl@0
  1467
sl@0
  1468
	if (ref != iExpectedRef)
sl@0
  1469
		result = EFail;
sl@0
  1470
sl@0
  1471
	if (!buffer)
sl@0
  1472
		{
sl@0
  1473
		RDebug::Print(_L("*** TCreateSinkBufferTestStep:  sink->CreateSinkBufferL returned NULL"));
sl@0
  1474
		result = EFail;
sl@0
  1475
		}
sl@0
  1476
sl@0
  1477
	if (result != EFail)
sl@0
  1478
		{
sl@0
  1479
		if (buffer->Type() != iExpectedType)
sl@0
  1480
			result = EFail;
sl@0
  1481
sl@0
  1482
		if (buffer->Status() != EAvailable)
sl@0
  1483
			result = EFail;
sl@0
  1484
sl@0
  1485
		if (buffer->Type() == KUidMmfDescriptorBuffer)
sl@0
  1486
			{
sl@0
  1487
			CMMFDataBuffer* dataBuffer = STATIC_CAST(CMMFDataBuffer*, buffer);
sl@0
  1488
			TDes8& data = dataBuffer->Data();
sl@0
  1489
sl@0
  1490
			if (data.MaxLength() != iExpectedMaxLength)
sl@0
  1491
				result = EFail;
sl@0
  1492
			}
sl@0
  1493
sl@0
  1494
		buffer = NULL;
sl@0
  1495
		}
sl@0
  1496
sl@0
  1497
	// Test the rest...
sl@0
  1498
	TFourCC fourCC = KMMFFourCCCodePCM16;
sl@0
  1499
	TFourCC emptyFourCC;
sl@0
  1500
sl@0
  1501
	TBufC8<5> fourCCString(KEmptyFourCCCode);
sl@0
  1502
	TPtr8 fourCCPtr = fourCCString.Des();
sl@0
  1503
	TPtr8 fourCCPtr1(&fourCCPtr[0], 4);
sl@0
  1504
	emptyFourCC.FourCC(&fourCCPtr1);
sl@0
  1505
	TInt err = sink->SinkThreadLogon(*(static_cast<CMMFDummySource*>(iSource)));
sl@0
  1506
	if (err != KErrNone)
sl@0
  1507
		{
sl@0
  1508
	  //RDebug::Print(_L("Audio Output: Expecting error %d, got %d"), KErrNone, err);(Commented under DEF105143)
sl@0
  1509
		result = EFail;
sl@0
  1510
		}
sl@0
  1511
sl@0
  1512
	TRAP(err, sink->NegotiateL(*iSource));
sl@0
  1513
	if (err != KErrNotSupported)
sl@0
  1514
		{
sl@0
  1515
	//	RDebug::Print(_L("Audio Output: Expecting error %d, got %d"), KErrNotSupported, err);(Commented under DEF105143)
sl@0
  1516
		result = EFail;
sl@0
  1517
		}
sl@0
  1518
sl@0
  1519
	if ((sink->SinkDataTypeCode(mediaId) != fourCC) && (sink->SinkDataTypeCode(mediaId) != emptyFourCC))
sl@0
  1520
		{
sl@0
  1521
		RDebug::Print(_L("Audio Output: NegotiateL sink code does not match\n"));
sl@0
  1522
		result = EFail;
sl@0
  1523
		}
sl@0
  1524
sl@0
  1525
	sink->SinkPrimeL();
sl@0
  1526
	TRAP(err, sink->SinkPlayL());
sl@0
  1527
	if (err != KErrNotSupported)
sl@0
  1528
		{
sl@0
  1529
	//	RDebug::Print(_L("Audio Output: Expecting error %d, got %d"), KErrNotSupported, err);(Commented under DEF105143)
sl@0
  1530
		result = EFail;
sl@0
  1531
		}
sl@0
  1532
	sink->SinkPauseL();
sl@0
  1533
	sink->SinkStopL();
sl@0
  1534
sl@0
  1535
	TMMFPrioritySettings prioritySettings;
sl@0
  1536
	sink->SetSinkPrioritySettings(prioritySettings);
sl@0
  1537
	sink->SinkThreadLogoff();
sl@0
  1538
sl@0
  1539
	CleanupStack::PopAndDestroy(3, sink);	// sinkStop, threadLogOff, sink
sl@0
  1540
sl@0
  1541
	if (buffer != NULL)
sl@0
  1542
		result = EFail;
sl@0
  1543
sl@0
  1544
	return result;
sl@0
  1545
	}
sl@0
  1546
sl@0
  1547
TVerdict TCreateSinkBufferTestStep3::DoTestStepL()
sl@0
  1548
	{
sl@0
  1549
	TVerdict result = EPass;
sl@0
  1550
	TMediaId mediaId;
sl@0
  1551
	TBool ref;
sl@0
  1552
	// DevSoundWP - The source file is pcmu8 not pcm16
sl@0
  1553
	// on 7.0s audio output this didn't matter as it could only
sl@0
  1554
	// accept pcm16 - 8.0 can accept pcmu8 as well
sl@0
  1555
	// TFourCC fourCC = KMMFFourCCCodePCM16;
sl@0
  1556
	TFourCC fourCC = KMMFFourCCCodePCMU8;
sl@0
  1557
	TFourCC emptyFourCC;
sl@0
  1558
	TMMFPrioritySettings prioritySettings;
sl@0
  1559
sl@0
  1560
	TBuf8<1> dummyConfigDes;
sl@0
  1561
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, dummyConfigDes);
sl@0
  1562
	CleanupDeletePushL(sink);
sl@0
  1563
sl@0
  1564
	//DevSound WP - need to rest this as buffer may not be emptied ok if OOM in AS occurs
sl@0
  1565
	static_cast<CMMFDummySource*>(iSource)->ResetBufferEmptiedOk();
sl@0
  1566
sl@0
  1567
	//DevSound WP must call logon before prime
sl@0
  1568
	User::LeaveIfError( sink->SinkThreadLogon(*(static_cast<CMMFDummySource*>(iSource))) );
sl@0
  1569
	sink->SinkPrimeL();
sl@0
  1570
sl@0
  1571
	// Create sink buffer
sl@0
  1572
	CMMFBuffer* nullBuffer = sink->CreateSinkBufferL(mediaId, ref);
sl@0
  1573
	//DevSound WP must call logon before prime
sl@0
  1574
//	User::LeaveIfError( sink->SinkThreadLogon(*(static_cast<CMMFDummySource*>(iSource))) );
sl@0
  1575
	TCleanupItem threadLogOff(DoDataSinkThreadLogoff, sink);
sl@0
  1576
	CleanupStack::PushL(threadLogOff);
sl@0
  1577
sl@0
  1578
	sink->SinkPrimeL();
sl@0
  1579
	TCleanupItem sinkStop(DoDataSinkStop, sink);
sl@0
  1580
	CleanupStack::PushL(sinkStop);
sl@0
  1581
	if (!iSource)
sl@0
  1582
		User::Leave(KErrNoMemory);
sl@0
  1583
	if (iFormat)
sl@0
  1584
		sink->NegotiateL(*iFormat);
sl@0
  1585
	else
sl@0
  1586
		sink->NegotiateL(*iSource);
sl@0
  1587
	sink->SinkPlayL();
sl@0
  1588
	sink->EmptyBufferL(nullBuffer, iSource, mediaId);
sl@0
  1589
	CActiveScheduler::Start();
sl@0
  1590
sl@0
  1591
	CMMFBuffer* buffer = static_cast<CMMFDummySource*>(iSource)->MmfBuffer();
sl@0
  1592
sl@0
  1593
	if ((buffer) && (static_cast<CMMFDummySource*>(iSource)->BufferEmptiedOk()))
sl@0
  1594
		{//DevSound WP buffer not emptied ok if OOM in AS
sl@0
  1595
sl@0
  1596
		if (ref != iExpectedRef)
sl@0
  1597
			result = EFail;
sl@0
  1598
sl@0
  1599
		if (!buffer)
sl@0
  1600
			{
sl@0
  1601
			RDebug::Print(_L("*** TCreateSinkBufferTestStep:  sink->CreateSinkBufferL returned NULL"));
sl@0
  1602
			result = EFail;
sl@0
  1603
			}
sl@0
  1604
sl@0
  1605
		if (result != EFail)
sl@0
  1606
			{
sl@0
  1607
			if (buffer->Type() != iExpectedType)
sl@0
  1608
				result = EFail;
sl@0
  1609
sl@0
  1610
			if (buffer->Status() != EAvailable)
sl@0
  1611
				result = EFail;
sl@0
  1612
	
sl@0
  1613
			buffer = NULL;
sl@0
  1614
			}
sl@0
  1615
sl@0
  1616
		// Test the rest...
sl@0
  1617
		if ((sink->SinkDataTypeCode(mediaId) != fourCC) && (sink->SinkDataTypeCode(mediaId) != emptyFourCC))
sl@0
  1618
			{
sl@0
  1619
			RDebug::Print(_L("Audio Output: NegotiateL sink code does not match\n"));
sl@0
  1620
			result = EFail;
sl@0
  1621
			}
sl@0
  1622
sl@0
  1623
		User::LeaveIfError(sink->SinkThreadLogon(*(static_cast<CMMFDummySource*>(iSource))));
sl@0
  1624
		sink->SinkPrimeL();
sl@0
  1625
		sink->SinkPlayL();
sl@0
  1626
		sink->SinkPauseL();
sl@0
  1627
		sink->SinkStopL();
sl@0
  1628
sl@0
  1629
		sink->SetSinkPrioritySettings(prioritySettings);
sl@0
  1630
		}
sl@0
  1631
sl@0
  1632
	CleanupStack::PopAndDestroy(3, sink);	// sinkStop, threadLogOff, sink
sl@0
  1633
sl@0
  1634
//	if (buffer != NULL) DevSound WP  OOM in AS may not be null
sl@0
  1635
//		result = EFail;
sl@0
  1636
sl@0
  1637
	return result;
sl@0
  1638
	}
sl@0
  1639
sl@0
  1640
sl@0
  1641
TVerdict TCreateSinkBufferTestStep4::DoTestStepL()
sl@0
  1642
	{
sl@0
  1643
	TVerdict result = EPass;
sl@0
  1644
	TMediaId mediaId;
sl@0
  1645
	TBool ref;
sl@0
  1646
sl@0
  1647
	// DevSoundWP - The source file is pcmu8 not pcm16
sl@0
  1648
	// however the sample rate is non standard and so
sl@0
  1649
	// the conversion is done in audio output which means the
sl@0
  1650
	// datatype is still pcm16
sl@0
  1651
	TFourCC fourCC = KMMFFourCCCodePCM16;
sl@0
  1652
	//TFourCC fourCC = KMMFFourCCCodePCMU8;
sl@0
  1653
sl@0
  1654
	TFourCC emptyFourCC;
sl@0
  1655
	TMMFPrioritySettings prioritySettings;
sl@0
  1656
sl@0
  1657
	TBuf8<1> dummyConfigDes;
sl@0
  1658
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, dummyConfigDes);
sl@0
  1659
	CleanupDeletePushL(sink);
sl@0
  1660
	//	DevSoundWP Prime should be after logon sink->SinkPrimeL();
sl@0
  1661
sl@0
  1662
	// Create sink buffer
sl@0
  1663
	CMMFBuffer* nullBuffer = sink->CreateSinkBufferL(mediaId, ref);
sl@0
  1664
sl@0
  1665
	//DevSound WP needs resetting as buffer is not emptied ok during OOM in AS
sl@0
  1666
	static_cast<CMMFDummySource*>(iSource)->ResetBufferEmptiedOk();
sl@0
  1667
sl@0
  1668
	User::LeaveIfError( sink->SinkThreadLogon(*(static_cast<CMMFDummySource*>(iSource))) );
sl@0
  1669
	TCleanupItem threadLogOff(DoDataSinkThreadLogoff, sink);
sl@0
  1670
	CleanupStack::PushL(threadLogOff);
sl@0
  1671
sl@0
  1672
	sink->SinkPrimeL();
sl@0
  1673
	TCleanupItem sinkStop(DoDataSinkStop, sink);
sl@0
  1674
	CleanupStack::PushL(sinkStop);
sl@0
  1675
	if (!iSource)
sl@0
  1676
		User::Leave(KErrNoMemory);
sl@0
  1677
	if (iFormat)
sl@0
  1678
		sink->NegotiateL(*iFormat);
sl@0
  1679
	else
sl@0
  1680
		sink->NegotiateL(*iSource);
sl@0
  1681
	sink->SinkPlayL();
sl@0
  1682
	sink->EmptyBufferL(nullBuffer, iSource, mediaId);
sl@0
  1683
	CActiveScheduler::Start();
sl@0
  1684
sl@0
  1685
	CMMFBuffer* buffer = static_cast<CMMFDummySource*>(iSource)->MmfBuffer();
sl@0
  1686
sl@0
  1687
	if ((buffer) && (static_cast<CMMFDummySource*>(iSource)->BufferEmptiedOk()))
sl@0
  1688
		{//DevSound WP buffer not emptied ok if OOM in AS
sl@0
  1689
sl@0
  1690
		if (ref != iExpectedRef)
sl@0
  1691
			result = EFail;
sl@0
  1692
sl@0
  1693
		if (!buffer)
sl@0
  1694
			{
sl@0
  1695
			RDebug::Print(_L("*** TCreateSinkBufferTestStep:  sink->CreateSinkBufferL returned NULL"));
sl@0
  1696
			result = EFail;
sl@0
  1697
			}
sl@0
  1698
sl@0
  1699
		if (result != EFail)
sl@0
  1700
			{
sl@0
  1701
			if (buffer->Type() != iExpectedType)
sl@0
  1702
				result = EFail;
sl@0
  1703
sl@0
  1704
			if (buffer->Status() != EAvailable)
sl@0
  1705
				result = EFail;
sl@0
  1706
sl@0
  1707
			/*
sl@0
  1708
		DevSound WP buffers are owned and controller by
sl@0
  1709
		HwPlugins test should not make assumptions
sl@0
  1710
#ifdef __USE_MMF_TRANSFERBUFFERS__
sl@0
  1711
		if (buffer->Type() == KUidMmfTransferBuffer)
sl@0
  1712
#else
sl@0
  1713
		if (buffer->Type() == KUidMmfDescriptorBuffer)
sl@0
  1714
#endif
sl@0
  1715
			{
sl@0
  1716
			CMMFDataBuffer* dataBuffer = STATIC_CAST(CMMFDataBuffer*, buffer);
sl@0
  1717
			TDes8& data = dataBuffer->Data();
sl@0
  1718
sl@0
  1719
			if (data.MaxLength() != iExpectedMaxLength)
sl@0
  1720
				result = EFail;
sl@0
  1721
			}
sl@0
  1722
		else
sl@0
  1723
			result = EFail;
sl@0
  1724
		*/
sl@0
  1725
sl@0
  1726
sl@0
  1727
			buffer = NULL;
sl@0
  1728
			}
sl@0
  1729
sl@0
  1730
		// Test the rest...
sl@0
  1731
		if ((sink->SinkDataTypeCode(mediaId) != fourCC) && (sink->SinkDataTypeCode(mediaId) != emptyFourCC))
sl@0
  1732
			{
sl@0
  1733
			RDebug::Print(_L("Audio Output: NegotiateL sink code does not match\n"));
sl@0
  1734
			result = EFail;
sl@0
  1735
			}
sl@0
  1736
sl@0
  1737
		User::LeaveIfError(sink->SinkThreadLogon(*(static_cast<CMMFDummySource*>(iSource))));
sl@0
  1738
		sink->SinkPrimeL();
sl@0
  1739
		sink->SinkPlayL();
sl@0
  1740
		sink->SinkPauseL();
sl@0
  1741
		sink->SinkStopL();
sl@0
  1742
sl@0
  1743
		sink->SetSinkPrioritySettings(prioritySettings);
sl@0
  1744
sl@0
  1745
		}
sl@0
  1746
sl@0
  1747
	CleanupStack::PopAndDestroy(3, sink);	// sinkStop, threadLogOff, sink
sl@0
  1748
sl@0
  1749
//	if (buffer != NULL) DevSound WP if OOM in AS may not be null
sl@0
  1750
//		result = EFail;
sl@0
  1751
sl@0
  1752
	return result;
sl@0
  1753
	}
sl@0
  1754
sl@0
  1755
sl@0
  1756
TVerdict TSinkThreadLogonTestStep::DoTestStepL()
sl@0
  1757
	{
sl@0
  1758
	User::LeaveIfError(iSink->SinkThreadLogon(*iEventHandler));
sl@0
  1759
sl@0
  1760
	iSink->SinkThreadLogoff();
sl@0
  1761
sl@0
  1762
	return EPass;
sl@0
  1763
	}
sl@0
  1764
sl@0
  1765
TVerdict TNegotiateTestStep::DoTestStepL()
sl@0
  1766
	{
sl@0
  1767
	iSink->NegotiateL(*iSource);
sl@0
  1768
	return EPass;
sl@0
  1769
	}
sl@0
  1770
sl@0
  1771
TVerdict TEmptyBufferTestStep::DoTestStepL()
sl@0
  1772
	{
sl@0
  1773
	RandomiseBuffer();
sl@0
  1774
sl@0
  1775
	TMediaId mediaId;
sl@0
  1776
	TRAPD(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  1777
sl@0
  1778
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  1779
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  1780
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  1781
		return EFail;
sl@0
  1782
sl@0
  1783
	if (err != KErrNone)
sl@0
  1784
		{
sl@0
  1785
		TInt destinationLength = iDestinationDes.MaxLength();
sl@0
  1786
		if (Mem::Compare(iDestinationDes.Ptr(), destinationLength, iCopyOfDestinationDes.Ptr(), destinationLength))
sl@0
  1787
			return EFail;
sl@0
  1788
sl@0
  1789
		User::Leave(err);
sl@0
  1790
		}
sl@0
  1791
sl@0
  1792
	if (!sourceBufferEmptiedOk)
sl@0
  1793
		return EFail;
sl@0
  1794
sl@0
  1795
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  1796
	TInt writeLength = buffer->BufferSize();
sl@0
  1797
	if (writeLength != iWriteLength)
sl@0
  1798
		return EFail;
sl@0
  1799
sl@0
  1800
	if (iCopyOfDestinationDes.Length()<(iPosition+iWriteLength))
sl@0
  1801
		iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  1802
sl@0
  1803
	TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength);
sl@0
  1804
	iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  1805
	iPosition += writeLength;
sl@0
  1806
	return EPass;
sl@0
  1807
	}
sl@0
  1808
sl@0
  1809
sl@0
  1810
// TClipBytesFreeTestStep
sl@0
  1811
// Test that the number of bytes free is what we expect.
sl@0
  1812
// Zero bytes free is also an acceptable result, when file failures are expected.
sl@0
  1813
TVerdict TClipBytesFreeTestStep::DoTestStepL()
sl@0
  1814
	{
sl@0
  1815
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink);
sl@0
  1816
	TInt64 bytesFree = clip->BytesFree();
sl@0
  1817
sl@0
  1818
	// tolerance incase another process accesses file system during test
sl@0
  1819
	TInt64 tolerance = 8192;		// 2 blocks of 4096 bytes
sl@0
  1820
sl@0
  1821
	// FileServer file failure simulation is currently only supported on WINS
sl@0
  1822
	// so ignore the iFileFailureExpected on target builds
sl@0
  1823
sl@0
  1824
	TVerdict result = EFail;
sl@0
  1825
	if ((bytesFree == iExpectedBytesFree) || (Abs(bytesFree - iExpectedBytesFree) <= tolerance))
sl@0
  1826
		{
sl@0
  1827
		result = EPass;
sl@0
  1828
		}
sl@0
  1829
	else if (iFileFailureExpected && (bytesFree == 0))
sl@0
  1830
		{
sl@0
  1831
		result = EPass;
sl@0
  1832
		}
sl@0
  1833
sl@0
  1834
	return result;
sl@0
  1835
	}
sl@0
  1836
sl@0
  1837
// TClipSizeTestStep
sl@0
  1838
// Test that the size of the clip is what we expect.
sl@0
  1839
// Zero bytes free is also an acceptable result, when file failures are expected.
sl@0
  1840
TVerdict TClipSizeTestStep::DoTestStepL()
sl@0
  1841
	{
sl@0
  1842
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource);
sl@0
  1843
	TInt size = clip->Size();
sl@0
  1844
sl@0
  1845
	return (size == iExpectedSize)  || ((size == 0) && iFileFailureExpected) ? EPass : EFail;
sl@0
  1846
	}
sl@0
  1847
sl@0
  1848
// TClipDeleteTestStep
sl@0
  1849
// Attempt to delete the clip.
sl@0
  1850
// The test leaves if there is an error.
sl@0
  1851
TVerdict TClipDeleteTestStep::DoTestStepL()
sl@0
  1852
	{
sl@0
  1853
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink);
sl@0
  1854
	User::LeaveIfError(clip->Delete());
sl@0
  1855
sl@0
  1856
	return EPass;
sl@0
  1857
	}
sl@0
  1858
sl@0
  1859
// TClipSetSizeTestStep
sl@0
  1860
// Attempt to set the size of the clip
sl@0
  1861
// Test that the results are correct, in the case when setting the size is supported.
sl@0
  1862
// In the case when it is not supported check that the size does not change.
sl@0
  1863
TVerdict TClipSetSizeTestStep::DoTestStepL()
sl@0
  1864
	{
sl@0
  1865
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink);
sl@0
  1866
sl@0
  1867
	TInt size;
sl@0
  1868
	TInt oldSize = clip->Size();
sl@0
  1869
	if (oldSize <= 0)
sl@0
  1870
		{
sl@0
  1871
		if (iFileFailureExpected && (oldSize == 0))
sl@0
  1872
			User::Leave(KErrFileFail);
sl@0
  1873
sl@0
  1874
		return EFail;
sl@0
  1875
		}
sl@0
  1876
sl@0
  1877
	TInt newSize = oldSize+1;
sl@0
  1878
	TInt err = clip->SetSize(newSize);
sl@0
  1879
	if (iCanSetSize)
sl@0
  1880
		{
sl@0
  1881
		if (err != KErrNone)
sl@0
  1882
			User::Leave(err);
sl@0
  1883
sl@0
  1884
		if ((size = clip->Size()) != newSize)
sl@0
  1885
			{
sl@0
  1886
			if (iFileFailureExpected && (size == 0))
sl@0
  1887
				User::Leave(KErrFileFail);
sl@0
  1888
sl@0
  1889
			return EFail;
sl@0
  1890
			}
sl@0
  1891
		}
sl@0
  1892
	else
sl@0
  1893
		{
sl@0
  1894
		if (err != KErrNotSupported)
sl@0
  1895
			{
sl@0
  1896
			if (err == KErrNone)
sl@0
  1897
				return EFail;
sl@0
  1898
sl@0
  1899
			User::Leave(err);
sl@0
  1900
			}
sl@0
  1901
sl@0
  1902
		if ((size = clip->Size()) != oldSize)
sl@0
  1903
			{
sl@0
  1904
			if (iFileFailureExpected && (size == 0))
sl@0
  1905
				User::Leave(KErrFileFail);
sl@0
  1906
sl@0
  1907
			return EFail;
sl@0
  1908
			}
sl@0
  1909
		}
sl@0
  1910
sl@0
  1911
	return EPass;
sl@0
  1912
	}
sl@0
  1913
sl@0
  1914
sl@0
  1915
TVerdict TClipReadBufferTestStep::DoTestStepL()
sl@0
  1916
	{
sl@0
  1917
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource);
sl@0
  1918
sl@0
  1919
	RandomiseBuffer();
sl@0
  1920
	TRAPD(err, clip->ReadBufferL(iReadLength, iBuffer, iPosition, iSink));
sl@0
  1921
	if (iAsynchronousRead && (err == KErrNone))
sl@0
  1922
		CActiveScheduler::Start();
sl@0
  1923
sl@0
  1924
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  1925
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  1926
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  1927
		return EFail;
sl@0
  1928
sl@0
  1929
	if (err != KErrNone)
sl@0
  1930
		User::Leave(err);
sl@0
  1931
sl@0
  1932
	if (!sinkBufferFilledOk)
sl@0
  1933
		{
sl@0
  1934
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  1935
			User::Leave(err);
sl@0
  1936
sl@0
  1937
		return EFail;
sl@0
  1938
		}
sl@0
  1939
sl@0
  1940
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  1941
	TInt readLength = buffer->BufferSize();
sl@0
  1942
	if (readLength < iReadLength) // Reading more data than we asked for is ok.
sl@0
  1943
		return EFail;
sl@0
  1944
sl@0
  1945
	err = CheckBuffer();
sl@0
  1946
	return (err == 0) ? EPass : EFail;
sl@0
  1947
	}
sl@0
  1948
sl@0
  1949
TVerdict TClipReadBuffer2TestStep::DoTestStepL()
sl@0
  1950
	{
sl@0
  1951
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource);
sl@0
  1952
sl@0
  1953
	RandomiseBuffer();
sl@0
  1954
	TRAPD(err, clip->ReadBufferL(iBuffer, iPosition, iSink));
sl@0
  1955
	if (iAsynchronousRead && (err == KErrNone))
sl@0
  1956
		CActiveScheduler::Start();
sl@0
  1957
sl@0
  1958
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  1959
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  1960
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  1961
		return EFail;
sl@0
  1962
sl@0
  1963
	if (err != KErrNone)
sl@0
  1964
		User::Leave(err);
sl@0
  1965
sl@0
  1966
	if (!sinkBufferFilledOk)
sl@0
  1967
		{
sl@0
  1968
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  1969
			User::Leave(err);
sl@0
  1970
sl@0
  1971
		return EFail;
sl@0
  1972
		}
sl@0
  1973
sl@0
  1974
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  1975
	TInt readLength = buffer->BufferSize();
sl@0
  1976
	if (readLength != iReadLength)
sl@0
  1977
		return EFail;
sl@0
  1978
sl@0
  1979
	err = CheckBuffer();
sl@0
  1980
	return (err == 0) ? EPass : EFail;
sl@0
  1981
	}
sl@0
  1982
sl@0
  1983
TVerdict TClipReadBuffer3TestStep::DoTestStepL()
sl@0
  1984
	{
sl@0
  1985
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource);
sl@0
  1986
sl@0
  1987
	RandomiseBuffer();
sl@0
  1988
	clip->ReadBufferL(iBuffer, iPosition);
sl@0
  1989
sl@0
  1990
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  1991
	TInt readLength = buffer->BufferSize();
sl@0
  1992
	if (readLength != iReadLength)
sl@0
  1993
		return EFail;
sl@0
  1994
sl@0
  1995
	TInt err = CheckBuffer();
sl@0
  1996
	return (err == 0) ? EPass : EFail;
sl@0
  1997
	}
sl@0
  1998
sl@0
  1999
TVerdict TClipReadBuffer4TestStep::DoTestStepL()
sl@0
  2000
	{
sl@0
  2001
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource);
sl@0
  2002
sl@0
  2003
	RandomiseBuffer();
sl@0
  2004
	TRAPD(err, clip->ReadBufferL(iReadLength, iBuffer, iPosition, iSink));
sl@0
  2005
sl@0
  2006
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  2007
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  2008
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  2009
		return EFail;
sl@0
  2010
sl@0
  2011
	if (err != KErrNone)
sl@0
  2012
		User::Leave(err);
sl@0
  2013
sl@0
  2014
	if (!sinkBufferFilledOk)
sl@0
  2015
		return EFail;
sl@0
  2016
sl@0
  2017
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2018
	TInt readLength = buffer->BufferSize();
sl@0
  2019
	if (readLength != iExpectedReadLength)
sl@0
  2020
		return EFail;
sl@0
  2021
sl@0
  2022
	err = CheckBuffer();
sl@0
  2023
	return (err == 0) ? EPass : EFail;
sl@0
  2024
	}
sl@0
  2025
sl@0
  2026
sl@0
  2027
TVerdict TDescriptorClipWriteBufferTestStep::DoTestStepL()
sl@0
  2028
	{
sl@0
  2029
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink);
sl@0
  2030
sl@0
  2031
	RandomiseBuffer();
sl@0
  2032
	TRAPD(err, clip->WriteBufferL(iWriteLength, iBuffer, iPosition, iSource));
sl@0
  2033
sl@0
  2034
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  2035
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  2036
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  2037
		return EFail;
sl@0
  2038
sl@0
  2039
	if (err != KErrNone)
sl@0
  2040
		User::Leave(err);
sl@0
  2041
sl@0
  2042
	if (!sourceBufferEmptiedOk)
sl@0
  2043
		return EFail;
sl@0
  2044
sl@0
  2045
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2046
sl@0
  2047
	TInt position = iPosition;
sl@0
  2048
	if (iCopyOfDestinationDes.Length()<iPosition)
sl@0
  2049
		position = iCopyOfDestinationDes.Length();
sl@0
  2050
sl@0
  2051
	if (iCopyOfDestinationDes.Length()<(position+iWriteLength))
sl@0
  2052
		iCopyOfDestinationDes.SetLength(position+iWriteLength);
sl@0
  2053
sl@0
  2054
	TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength);
sl@0
  2055
	iCopyOfDestinationDes.Replace(position, iWriteLength, bufferData);
sl@0
  2056
	return EPass;
sl@0
  2057
	}
sl@0
  2058
sl@0
  2059
TVerdict TDescriptorClipWriteBuffer2TestStep::DoTestStepL()
sl@0
  2060
	{
sl@0
  2061
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink);
sl@0
  2062
sl@0
  2063
	RandomiseBuffer();
sl@0
  2064
	TRAPD(err, clip->WriteBufferL(iBuffer, iPosition, iSource));
sl@0
  2065
sl@0
  2066
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  2067
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  2068
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  2069
		return EFail;
sl@0
  2070
sl@0
  2071
	if (err != KErrNone)
sl@0
  2072
		User::Leave(err);
sl@0
  2073
sl@0
  2074
	if (!sourceBufferEmptiedOk)
sl@0
  2075
		return EFail;
sl@0
  2076
sl@0
  2077
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2078
	TInt writeLength = buffer->BufferSize();
sl@0
  2079
	if (writeLength != iWriteLength)
sl@0
  2080
		return EFail;
sl@0
  2081
sl@0
  2082
	TInt position = iPosition;
sl@0
  2083
	if (iCopyOfDestinationDes.Length()<iPosition)
sl@0
  2084
		position = iCopyOfDestinationDes.Length();
sl@0
  2085
sl@0
  2086
	if (iCopyOfDestinationDes.Length()<(position+iWriteLength))
sl@0
  2087
		iCopyOfDestinationDes.SetLength(position+iWriteLength);
sl@0
  2088
sl@0
  2089
	TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength);
sl@0
  2090
	iCopyOfDestinationDes.Replace(position, iWriteLength, bufferData);
sl@0
  2091
	return EPass;
sl@0
  2092
	}
sl@0
  2093
sl@0
  2094
TVerdict TDescriptorClipWriteBuffer3TestStep::DoTestStepL()
sl@0
  2095
	{
sl@0
  2096
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink);
sl@0
  2097
sl@0
  2098
	RandomiseBuffer();
sl@0
  2099
	clip->WriteBufferL(iBuffer, iPosition);
sl@0
  2100
sl@0
  2101
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2102
	TInt writeLength = buffer->BufferSize();
sl@0
  2103
	if (writeLength != iWriteLength)
sl@0
  2104
		return EFail;
sl@0
  2105
sl@0
  2106
	TInt position = iPosition;
sl@0
  2107
	if (iCopyOfDestinationDes.Length()<iPosition)
sl@0
  2108
		position = iCopyOfDestinationDes.Length();
sl@0
  2109
sl@0
  2110
	if (iCopyOfDestinationDes.Length()<(position+iWriteLength))
sl@0
  2111
		iCopyOfDestinationDes.SetLength(position+iWriteLength);
sl@0
  2112
sl@0
  2113
	TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength);
sl@0
  2114
	iCopyOfDestinationDes.Replace(position, iWriteLength, bufferData);
sl@0
  2115
	return EPass;
sl@0
  2116
	}
sl@0
  2117
sl@0
  2118
TVerdict TNewFileSourceTestStep::DoTestStepL()
sl@0
  2119
	{
sl@0
  2120
	CMMFFile* source = STATIC_CAST(CMMFFile*, MDataSource::NewSourceL(iUid, *iConfigDes));
sl@0
  2121
	CleanupStack::PushL(source);
sl@0
  2122
	source->SourcePrimeL();
sl@0
  2123
sl@0
  2124
	CleanupStack::PopAndDestroy(source);
sl@0
  2125
	return EPass;
sl@0
  2126
	}
sl@0
  2127
sl@0
  2128
TInt TFileSourceThreadLogonThread(TAny* initPtr)
sl@0
  2129
	{
sl@0
  2130
	TThreadData &threadData = *REINTERPRET_CAST(TThreadData*, initPtr);
sl@0
  2131
	CMMFFile* source = threadData.iFilePtr;
sl@0
  2132
	MAsyncEventHandler* eventHandler = threadData.iEventHandler;
sl@0
  2133
sl@0
  2134
	threadData.iErr = KErrNone;
sl@0
  2135
sl@0
  2136
	threadData.iErr = source->SourceThreadLogon(*eventHandler);
sl@0
  2137
	if (threadData.iErr == KErrNone)
sl@0
  2138
		{
sl@0
  2139
		threadData.iFileSize = source->Size();
sl@0
  2140
		source->SourceThreadLogoff();
sl@0
  2141
		}
sl@0
  2142
sl@0
  2143
sl@0
  2144
	return 0;
sl@0
  2145
	}
sl@0
  2146
sl@0
  2147
TVerdict TFileSourceThreadLogonTestStep::DoTestStepL()
sl@0
  2148
	{
sl@0
  2149
sl@0
  2150
	TThreadData threadData; // Is this going to work on target? (or do we need to package the data and use RThread::ReadL/WriteL?)
sl@0
  2151
	threadData.iFilePtr = STATIC_CAST(CMMFFile*, iSource);
sl@0
  2152
	threadData.iEventHandler = iEventHandler;
sl@0
  2153
	
sl@0
  2154
	TRequestStatus logonStatus;
sl@0
  2155
	
sl@0
  2156
	RThread sourceThread;
sl@0
  2157
	User::LeaveIfError(sourceThread.Create(_L("TFileSourceThreadLogonThread"), TFileSourceThreadLogonThread, KDefaultStackSize, NULL, &threadData));
sl@0
  2158
	CleanupClosePushL(sourceThread);
sl@0
  2159
sl@0
  2160
	sourceThread.Logon(logonStatus);
sl@0
  2161
	if(logonStatus != KRequestPending)
sl@0
  2162
		{
sl@0
  2163
		User::Leave(logonStatus.Int());
sl@0
  2164
		}
sl@0
  2165
	sourceThread.Resume();
sl@0
  2166
	
sl@0
  2167
	User::WaitForRequest(logonStatus);
sl@0
  2168
	if(logonStatus != KErrNone)
sl@0
  2169
		{
sl@0
  2170
		User::Leave(logonStatus.Int());
sl@0
  2171
		}
sl@0
  2172
	
sl@0
  2173
	if (threadData.iErr != KErrNone)
sl@0
  2174
		User::Leave(threadData.iErr);
sl@0
  2175
sl@0
  2176
	if ((threadData.iFileSize != iFileSize))
sl@0
  2177
		{
sl@0
  2178
		if (!iFileFailureExpected)
sl@0
  2179
			return EFail;
sl@0
  2180
sl@0
  2181
		if (threadData.iFileSize != 0)
sl@0
  2182
			return EFail;
sl@0
  2183
		}
sl@0
  2184
sl@0
  2185
	CleanupStack::PopAndDestroy(1); // sourceThread
sl@0
  2186
	return EPass;
sl@0
  2187
	}
sl@0
  2188
sl@0
  2189
TVerdict TFileFillBufferTestStep::DoTestStepL()
sl@0
  2190
	{
sl@0
  2191
	RandomiseBuffer();
sl@0
  2192
sl@0
  2193
	TMediaId mediaId;
sl@0
  2194
sl@0
  2195
	RFs fs;
sl@0
  2196
	User::LeaveIfError(fs.Connect());
sl@0
  2197
	CleanupClosePushL(fs);
sl@0
  2198
	MDataSource* source = CreateFileSourceL(iSourceType, fs, iFileName);
sl@0
  2199
	CleanupDeletePushL(source);
sl@0
  2200
sl@0
  2201
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  2202
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  2203
	source->SourcePrimeL();
sl@0
  2204
sl@0
  2205
	TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  2206
	if (iAsynchronousRead && (err == KErrNone))
sl@0
  2207
		CActiveScheduler::Start();
sl@0
  2208
	CleanupStack::PopAndDestroy(2, &fs); // source, fs
sl@0
  2209
sl@0
  2210
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  2211
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  2212
		return EFail;
sl@0
  2213
sl@0
  2214
	if (err != KErrNone)
sl@0
  2215
		User::Leave(err);
sl@0
  2216
sl@0
  2217
	if (!sinkBufferFilledOk)
sl@0
  2218
		{
sl@0
  2219
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  2220
			User::Leave(err);
sl@0
  2221
sl@0
  2222
		return EFail;
sl@0
  2223
		}
sl@0
  2224
sl@0
  2225
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2226
	TInt readLength = buffer->BufferSize();
sl@0
  2227
	if (readLength != iReadLength)
sl@0
  2228
		return EFail;
sl@0
  2229
sl@0
  2230
	err = CheckBuffer();
sl@0
  2231
	return (err == 0) ? EPass : EFail;
sl@0
  2232
	}
sl@0
  2233
sl@0
  2234
TVerdict TFileFillBuffer2TestStep::DoTestStepL()
sl@0
  2235
	{
sl@0
  2236
	TMediaId mediaId;
sl@0
  2237
	RFs fs;
sl@0
  2238
	User::LeaveIfError(fs.Connect());
sl@0
  2239
	CleanupClosePushL(fs);
sl@0
  2240
	MDataSource* source = CreateFileSourceL(iSourceType, fs, iFileName);
sl@0
  2241
	CleanupDeletePushL(source);
sl@0
  2242
sl@0
  2243
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  2244
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  2245
	source->SourcePrimeL();
sl@0
  2246
sl@0
  2247
	TInt readLength;
sl@0
  2248
	TVerdict result = EPass;
sl@0
  2249
	iPosition = 0;
sl@0
  2250
	do
sl@0
  2251
		{
sl@0
  2252
		RandomiseBuffer();
sl@0
  2253
sl@0
  2254
		TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  2255
		if (iAsynchronousRead && (err == KErrNone))
sl@0
  2256
			CActiveScheduler::Start();
sl@0
  2257
sl@0
  2258
		TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  2259
		if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  2260
			{
sl@0
  2261
			result = EFail;
sl@0
  2262
			break;
sl@0
  2263
			}
sl@0
  2264
sl@0
  2265
		if (err != KErrNone)
sl@0
  2266
			User::Leave(err);
sl@0
  2267
sl@0
  2268
		if (!sinkBufferFilledOk)
sl@0
  2269
			{
sl@0
  2270
			if ((err = dummySink->Error()) != KErrNone)
sl@0
  2271
				User::Leave(err);
sl@0
  2272
sl@0
  2273
			result = EFail;
sl@0
  2274
			break;
sl@0
  2275
			}
sl@0
  2276
sl@0
  2277
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2278
		readLength = buffer->BufferSize();
sl@0
  2279
sl@0
  2280
		err = CheckBuffer();
sl@0
  2281
		iPosition += readLength;
sl@0
  2282
sl@0
  2283
		if (err != 0)
sl@0
  2284
			{
sl@0
  2285
			result = EFail;
sl@0
  2286
			break;
sl@0
  2287
			}
sl@0
  2288
		}
sl@0
  2289
	while (readLength != 0);
sl@0
  2290
sl@0
  2291
	CleanupStack::PopAndDestroy(2, &fs); // source, fs
sl@0
  2292
	return result;
sl@0
  2293
	}
sl@0
  2294
sl@0
  2295
TVerdict TFileFillBuffer3TestStep::DoTestStepL()
sl@0
  2296
	{
sl@0
  2297
	TMediaId mediaId;
sl@0
  2298
	RFs fs;
sl@0
  2299
	User::LeaveIfError(fs.Connect());
sl@0
  2300
	CleanupClosePushL(fs);
sl@0
  2301
	MDataSource* source = CreateFileSourceL(iSourceType, fs, iFileName);
sl@0
  2302
	CleanupDeletePushL(source);
sl@0
  2303
sl@0
  2304
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  2305
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  2306
	source->SourcePrimeL();
sl@0
  2307
sl@0
  2308
	RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  2309
	TInt maxRequestCount = bufferArray.Count();
sl@0
  2310
	TInt err = KErrNone;
sl@0
  2311
	iPosition = 0;
sl@0
  2312
	TInt requestCount;
sl@0
  2313
	for (requestCount = 0 ; requestCount<maxRequestCount ; requestCount++)
sl@0
  2314
		{
sl@0
  2315
		iBuffer = bufferArray[requestCount];
sl@0
  2316
		RandomiseBuffer();
sl@0
  2317
sl@0
  2318
		TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  2319
		if (err != KErrNone)
sl@0
  2320
			break;
sl@0
  2321
		}
sl@0
  2322
sl@0
  2323
	if (requestCount)
sl@0
  2324
		{
sl@0
  2325
		if (requestCount>iMaxRequestCount)
sl@0
  2326
			requestCount = iMaxRequestCount;
sl@0
  2327
sl@0
  2328
		dummySink->SetExpectedFillCount(requestCount);
sl@0
  2329
		CActiveScheduler::Start();
sl@0
  2330
		}
sl@0
  2331
sl@0
  2332
	CleanupStack::PopAndDestroy(2, &fs);
sl@0
  2333
sl@0
  2334
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  2335
	if (!requestCount && sinkBufferFilledOk)
sl@0
  2336
		return EFail;
sl@0
  2337
sl@0
  2338
	if (!sinkBufferFilledOk && requestCount)
sl@0
  2339
		{
sl@0
  2340
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  2341
			User::Leave(err);
sl@0
  2342
sl@0
  2343
		return EFail;
sl@0
  2344
		}
sl@0
  2345
sl@0
  2346
	TInt completionCount;
sl@0
  2347
	for (completionCount = 0 ; completionCount<requestCount ; completionCount++)
sl@0
  2348
		{
sl@0
  2349
		iBuffer = bufferArray[completionCount];
sl@0
  2350
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2351
		TInt readLength = buffer->BufferSize();
sl@0
  2352
		if (readLength != iReadLength)
sl@0
  2353
			return EFail;
sl@0
  2354
sl@0
  2355
		err = CheckBuffer();
sl@0
  2356
		iPosition += readLength;
sl@0
  2357
		if (err != 0)
sl@0
  2358
			return EFail;
sl@0
  2359
		}
sl@0
  2360
sl@0
  2361
	if (err != KErrNone)
sl@0
  2362
		User::Leave(err);
sl@0
  2363
sl@0
  2364
	return EPass;
sl@0
  2365
	}
sl@0
  2366
sl@0
  2367
TVerdict TFileFillBuffer4TestStep::DoTestStepL()
sl@0
  2368
	{
sl@0
  2369
	TMediaId mediaId;
sl@0
  2370
	RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  2371
	TInt maxRequestCount = bufferArray.Count();
sl@0
  2372
	TInt err = KErrNone;
sl@0
  2373
	TInt requestCount;
sl@0
  2374
	for (requestCount = 0 ; requestCount<maxRequestCount ; requestCount++)
sl@0
  2375
		{
sl@0
  2376
		iBuffer = bufferArray[requestCount];
sl@0
  2377
		RandomiseBuffer();
sl@0
  2378
sl@0
  2379
		TRAP(err, iSource->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  2380
		if (err != KErrNone)
sl@0
  2381
			break;
sl@0
  2382
		}
sl@0
  2383
sl@0
  2384
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  2385
	if (requestCount)
sl@0
  2386
		{
sl@0
  2387
		if (requestCount>iMaxRequestCount)
sl@0
  2388
			requestCount = iMaxRequestCount;
sl@0
  2389
sl@0
  2390
		dummySink->SetExpectedFillCount(requestCount);
sl@0
  2391
		CActiveScheduler::Start();
sl@0
  2392
		}
sl@0
  2393
sl@0
  2394
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  2395
	if (!requestCount && sinkBufferFilledOk)
sl@0
  2396
		return EFail;
sl@0
  2397
sl@0
  2398
	if (!sinkBufferFilledOk && requestCount)
sl@0
  2399
		{
sl@0
  2400
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  2401
			User::Leave(err);
sl@0
  2402
sl@0
  2403
		return EFail;
sl@0
  2404
		}
sl@0
  2405
sl@0
  2406
	TInt completionCount;
sl@0
  2407
	for (completionCount = 0 ; completionCount<requestCount ; completionCount++)
sl@0
  2408
		{
sl@0
  2409
		iBuffer = bufferArray[completionCount];
sl@0
  2410
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2411
		TInt readLength = buffer->BufferSize();
sl@0
  2412
		if (readLength != iReadLength)
sl@0
  2413
			return EFail;
sl@0
  2414
sl@0
  2415
		err = CheckBuffer();
sl@0
  2416
		iPosition += readLength;
sl@0
  2417
		if (err != 0)
sl@0
  2418
			return EFail;
sl@0
  2419
		}
sl@0
  2420
sl@0
  2421
	if (err != KErrNone)
sl@0
  2422
		User::Leave(err);
sl@0
  2423
sl@0
  2424
	iSource->FillBufferL(bufferArray[completionCount], iSink, mediaId);
sl@0
  2425
	return EPass;
sl@0
  2426
	}
sl@0
  2427
sl@0
  2428
TVerdict TFileReadBufferTestStep::DoTestStepL()
sl@0
  2429
	{
sl@0
  2430
	RFs fs;
sl@0
  2431
	User::LeaveIfError(fs.Connect());
sl@0
  2432
	CleanupClosePushL(fs);
sl@0
  2433
	CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, fs, iFileName));
sl@0
  2434
	CleanupDeletePushL(source);
sl@0
  2435
sl@0
  2436
	CMMFDummySink* sink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  2437
	User::LeaveIfError(source->SourceThreadLogon(*sink));
sl@0
  2438
	source->SourcePrimeL();
sl@0
  2439
sl@0
  2440
	RandomiseBuffer();
sl@0
  2441
	TRAPD(err, source->ReadBufferL(iReadLength, iBuffer, iPosition, iSink));
sl@0
  2442
	if (iAsynchronousRead && (err == KErrNone))
sl@0
  2443
		CActiveScheduler::Start();
sl@0
  2444
	CleanupStack::PopAndDestroy(2, &fs);
sl@0
  2445
sl@0
  2446
	TBool sinkBufferFilledOk = sink->BufferFilledOk();
sl@0
  2447
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  2448
		return EFail;
sl@0
  2449
sl@0
  2450
	if (err != KErrNone)
sl@0
  2451
		User::Leave(err);
sl@0
  2452
sl@0
  2453
	if (!sinkBufferFilledOk)
sl@0
  2454
		{
sl@0
  2455
		if ((err = sink->Error()) != KErrNone)
sl@0
  2456
			User::Leave(err);
sl@0
  2457
sl@0
  2458
		return EFail;
sl@0
  2459
		}
sl@0
  2460
sl@0
  2461
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2462
	TInt readLength = buffer->BufferSize();
sl@0
  2463
	if (readLength < iReadLength) // Reading more data than we asked for is ok.
sl@0
  2464
		return EFail;
sl@0
  2465
sl@0
  2466
	err = CheckBuffer();
sl@0
  2467
	return (err == 0) ? EPass : EFail;
sl@0
  2468
	}
sl@0
  2469
sl@0
  2470
TVerdict TFileReadBuffer2TestStep::DoTestStepL()
sl@0
  2471
	{
sl@0
  2472
	RFs fs;
sl@0
  2473
	User::LeaveIfError(fs.Connect());
sl@0
  2474
	CleanupClosePushL(fs);
sl@0
  2475
	CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, fs, iFileName));
sl@0
  2476
	CleanupDeletePushL(source);
sl@0
  2477
sl@0
  2478
	CMMFDummySink* sink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  2479
	User::LeaveIfError(source->SourceThreadLogon(*sink));
sl@0
  2480
	source->SourcePrimeL();
sl@0
  2481
sl@0
  2482
	RandomiseBuffer();
sl@0
  2483
	TRAPD(err, source->ReadBufferL(iBuffer, iPosition, iSink));
sl@0
  2484
	if (iAsynchronousRead && (err == KErrNone))
sl@0
  2485
		CActiveScheduler::Start();
sl@0
  2486
	CleanupStack::PopAndDestroy(2, &fs); // source, fs
sl@0
  2487
sl@0
  2488
	TBool sinkBufferFilledOk = sink->BufferFilledOk();
sl@0
  2489
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  2490
		return EFail;
sl@0
  2491
sl@0
  2492
	if (err != KErrNone)
sl@0
  2493
		User::Leave(err);
sl@0
  2494
sl@0
  2495
	if (!sinkBufferFilledOk)
sl@0
  2496
		{
sl@0
  2497
		if ((err = sink->Error()) != KErrNone)
sl@0
  2498
			User::Leave(err);
sl@0
  2499
sl@0
  2500
		return EFail;
sl@0
  2501
		}
sl@0
  2502
sl@0
  2503
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2504
	TInt readLength = buffer->BufferSize();
sl@0
  2505
	if (readLength != iReadLength)
sl@0
  2506
		return EFail;
sl@0
  2507
sl@0
  2508
	err = CheckBuffer();
sl@0
  2509
	return (err == 0) ? EPass : EFail;
sl@0
  2510
	}
sl@0
  2511
sl@0
  2512
TVerdict TFileReadBuffer3TestStep::DoTestStepL()
sl@0
  2513
	{
sl@0
  2514
	RFs fs;
sl@0
  2515
	User::LeaveIfError(fs.Connect());
sl@0
  2516
	CleanupClosePushL(fs);
sl@0
  2517
	CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, fs, iFileName));
sl@0
  2518
	CleanupDeletePushL(source);
sl@0
  2519
	source->SourcePrimeL();
sl@0
  2520
sl@0
  2521
	RandomiseBuffer();
sl@0
  2522
	source->ReadBufferL(iBuffer, iPosition);
sl@0
  2523
	CleanupStack::PopAndDestroy(2, &fs); //source, fs
sl@0
  2524
sl@0
  2525
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2526
	TInt readLength = buffer->BufferSize();
sl@0
  2527
	if (readLength != iReadLength)
sl@0
  2528
		return EFail;
sl@0
  2529
sl@0
  2530
	TInt err = CheckBuffer();
sl@0
  2531
	return (err == 0) ? EPass : EFail;
sl@0
  2532
	}
sl@0
  2533
sl@0
  2534
TVerdict TFileReadBuffer4TestStep::DoTestStepL()
sl@0
  2535
	{
sl@0
  2536
	RFs fs;
sl@0
  2537
	User::LeaveIfError(fs.Connect());
sl@0
  2538
	CleanupClosePushL(fs);
sl@0
  2539
	CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, fs, iFileName));
sl@0
  2540
	CleanupDeletePushL(source);
sl@0
  2541
sl@0
  2542
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  2543
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  2544
	source->SourcePrimeL();
sl@0
  2545
sl@0
  2546
	RandomiseBuffer();
sl@0
  2547
	TRAPD(err, source->ReadBufferL(iReadLength, iBuffer, iPosition, iSink));
sl@0
  2548
	if (iAsynchronousRead && (err == KErrNone))
sl@0
  2549
		CActiveScheduler::Start();
sl@0
  2550
	CleanupStack::PopAndDestroy(2, &fs); //source, fs
sl@0
  2551
sl@0
  2552
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  2553
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  2554
		return EFail;
sl@0
  2555
sl@0
  2556
	if (err != KErrNone)
sl@0
  2557
		User::Leave(err);
sl@0
  2558
sl@0
  2559
	if (!sinkBufferFilledOk)
sl@0
  2560
		{
sl@0
  2561
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  2562
			User::Leave(err);
sl@0
  2563
sl@0
  2564
		return EFail;
sl@0
  2565
		}
sl@0
  2566
sl@0
  2567
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2568
	TInt readLength = buffer->BufferSize();
sl@0
  2569
	if (readLength != iExpectedReadLength)
sl@0
  2570
		return EFail;
sl@0
  2571
sl@0
  2572
	err = CheckBuffer();
sl@0
  2573
	return (err == 0) ? EPass : EFail;
sl@0
  2574
	}
sl@0
  2575
sl@0
  2576
TVerdict TFileReadBuffer5TestStep::DoTestStepL()
sl@0
  2577
	{
sl@0
  2578
	RFs fs;
sl@0
  2579
	User::LeaveIfError(fs.Connect());
sl@0
  2580
	CleanupClosePushL(fs);
sl@0
  2581
	CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, fs, iFileName));
sl@0
  2582
	CleanupDeletePushL(source);
sl@0
  2583
sl@0
  2584
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  2585
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  2586
	source->SourcePrimeL();
sl@0
  2587
sl@0
  2588
	RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  2589
	TInt maxRequestCount = bufferArray.Count();
sl@0
  2590
	TInt err = KErrNone;
sl@0
  2591
	iPosition = 0;
sl@0
  2592
	TInt requestCount;
sl@0
  2593
	for (requestCount = 0 ; requestCount<maxRequestCount ; requestCount++)
sl@0
  2594
		{
sl@0
  2595
		iBuffer = bufferArray[requestCount];
sl@0
  2596
		RandomiseBuffer();
sl@0
  2597
sl@0
  2598
		TRAP(err, source->ReadBufferL(iReadLength, iBuffer, iPosition, iSink));
sl@0
  2599
		if (err != KErrNone)
sl@0
  2600
			break;
sl@0
  2601
sl@0
  2602
		iPosition += 2*KTestBufferSize;
sl@0
  2603
		}
sl@0
  2604
sl@0
  2605
	if (requestCount)
sl@0
  2606
		{
sl@0
  2607
		if (requestCount>iMaxRequestCount)
sl@0
  2608
			requestCount = iMaxRequestCount;
sl@0
  2609
sl@0
  2610
		dummySink->SetExpectedFillCount(requestCount);
sl@0
  2611
		CActiveScheduler::Start();
sl@0
  2612
		}
sl@0
  2613
sl@0
  2614
	CleanupStack::PopAndDestroy(2, &fs); // source, fs
sl@0
  2615
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  2616
	if (!requestCount && sinkBufferFilledOk)
sl@0
  2617
		return EFail;
sl@0
  2618
sl@0
  2619
	if (!sinkBufferFilledOk && requestCount)
sl@0
  2620
		{
sl@0
  2621
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  2622
			User::Leave(err);
sl@0
  2623
sl@0
  2624
		return EFail;
sl@0
  2625
		}
sl@0
  2626
sl@0
  2627
	iPosition = 0;
sl@0
  2628
sl@0
  2629
	TInt completionCount;
sl@0
  2630
	for (completionCount = 0 ; completionCount<requestCount ; completionCount++)
sl@0
  2631
		{
sl@0
  2632
		iBuffer = bufferArray[completionCount];
sl@0
  2633
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2634
		TInt readLength = buffer->BufferSize();
sl@0
  2635
		if (readLength != iReadLength)
sl@0
  2636
			return EFail;
sl@0
  2637
sl@0
  2638
		err = CheckBuffer();
sl@0
  2639
		iPosition += 2*KTestBufferSize;
sl@0
  2640
		if (err != 0)
sl@0
  2641
			return EFail;
sl@0
  2642
		}
sl@0
  2643
sl@0
  2644
	if (err != KErrNone)
sl@0
  2645
		User::Leave(err);
sl@0
  2646
sl@0
  2647
	return EPass;
sl@0
  2648
	}
sl@0
  2649
sl@0
  2650
TVerdict TFileReadBuffer6TestStep::DoTestStepL()
sl@0
  2651
	{
sl@0
  2652
	RFs fs;
sl@0
  2653
	User::LeaveIfError(fs.Connect());
sl@0
  2654
	CleanupClosePushL(fs);
sl@0
  2655
	CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, fs, iFileName));
sl@0
  2656
	CleanupDeletePushL(source);
sl@0
  2657
sl@0
  2658
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  2659
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  2660
	source->SourcePrimeL();
sl@0
  2661
sl@0
  2662
	RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  2663
	TInt maxRequestCount = bufferArray.Count();
sl@0
  2664
	TInt err = KErrNone;
sl@0
  2665
	iPosition = 0;
sl@0
  2666
	TInt requestCount;
sl@0
  2667
	for (requestCount = 0 ; requestCount<maxRequestCount ; requestCount++)
sl@0
  2668
		{
sl@0
  2669
		iBuffer = bufferArray[requestCount];
sl@0
  2670
		RandomiseBuffer();
sl@0
  2671
sl@0
  2672
		TRAP(err, source->ReadBufferL(iBuffer, iPosition, iSink));
sl@0
  2673
		if (err != KErrNone)
sl@0
  2674
			break;
sl@0
  2675
sl@0
  2676
		iPosition += 2*KTestBufferSize;
sl@0
  2677
		}
sl@0
  2678
sl@0
  2679
	if (requestCount)
sl@0
  2680
		{
sl@0
  2681
		if (requestCount>iMaxRequestCount)
sl@0
  2682
			requestCount = iMaxRequestCount;
sl@0
  2683
sl@0
  2684
		dummySink->SetExpectedFillCount(requestCount);
sl@0
  2685
		CActiveScheduler::Start();
sl@0
  2686
		}
sl@0
  2687
sl@0
  2688
	CleanupStack::PopAndDestroy(2, &fs); // source, fs
sl@0
  2689
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  2690
	if (!requestCount && sinkBufferFilledOk)
sl@0
  2691
		return EFail;
sl@0
  2692
sl@0
  2693
	if (!sinkBufferFilledOk && requestCount)
sl@0
  2694
		{
sl@0
  2695
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  2696
			User::Leave(err);
sl@0
  2697
sl@0
  2698
		return EFail;
sl@0
  2699
		}
sl@0
  2700
sl@0
  2701
	iPosition = 0;
sl@0
  2702
sl@0
  2703
	TInt completionCount;
sl@0
  2704
	for (completionCount = 0 ; completionCount<requestCount ; completionCount++)
sl@0
  2705
		{
sl@0
  2706
		iBuffer = bufferArray[completionCount];
sl@0
  2707
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2708
		TInt readLength = buffer->BufferSize();
sl@0
  2709
		if (readLength != iReadLength)
sl@0
  2710
			return EFail;
sl@0
  2711
sl@0
  2712
		err = CheckBuffer();
sl@0
  2713
		iPosition += 2*KTestBufferSize;
sl@0
  2714
		if (err != 0)
sl@0
  2715
			return EFail;
sl@0
  2716
		}
sl@0
  2717
sl@0
  2718
	if (err != KErrNone)
sl@0
  2719
		User::Leave(err);
sl@0
  2720
sl@0
  2721
	return EPass;
sl@0
  2722
	}
sl@0
  2723
sl@0
  2724
TVerdict TFileReadBuffer7TestStep::DoTestStepL()
sl@0
  2725
	{
sl@0
  2726
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource);
sl@0
  2727
sl@0
  2728
	RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  2729
	TInt maxRequestCount = bufferArray.Count();
sl@0
  2730
	TInt err = KErrNone;
sl@0
  2731
	iPosition = 0;
sl@0
  2732
sl@0
  2733
	TInt requestCount;
sl@0
  2734
	for (requestCount = 0 ; requestCount<maxRequestCount ; requestCount++)
sl@0
  2735
		{
sl@0
  2736
		iBuffer = bufferArray[requestCount];
sl@0
  2737
		RandomiseBuffer();
sl@0
  2738
sl@0
  2739
		TRAP(err, clip->ReadBufferL(iReadLength, iBuffer, iPosition, iSink));
sl@0
  2740
		if (err != KErrNone)
sl@0
  2741
			break;
sl@0
  2742
sl@0
  2743
		iPosition += 2*KTestBufferSize;
sl@0
  2744
		}
sl@0
  2745
sl@0
  2746
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  2747
	if (requestCount)
sl@0
  2748
		{
sl@0
  2749
		if (requestCount>iMaxRequestCount)
sl@0
  2750
			requestCount = iMaxRequestCount;
sl@0
  2751
sl@0
  2752
		dummySink->SetExpectedFillCount(requestCount);
sl@0
  2753
		CActiveScheduler::Start();
sl@0
  2754
		}
sl@0
  2755
sl@0
  2756
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  2757
	if (!requestCount && sinkBufferFilledOk)
sl@0
  2758
		return EFail;
sl@0
  2759
sl@0
  2760
	if (!sinkBufferFilledOk && requestCount)
sl@0
  2761
		{
sl@0
  2762
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  2763
			User::Leave(err);
sl@0
  2764
sl@0
  2765
		return EFail;
sl@0
  2766
		}
sl@0
  2767
sl@0
  2768
	iPosition = 0;
sl@0
  2769
sl@0
  2770
	TInt completionCount;
sl@0
  2771
	for (completionCount = 0 ; completionCount<requestCount ; completionCount++)
sl@0
  2772
		{
sl@0
  2773
		iBuffer = bufferArray[completionCount];
sl@0
  2774
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2775
		TInt readLength = buffer->BufferSize();
sl@0
  2776
		if (readLength != iReadLength)
sl@0
  2777
			return EFail;
sl@0
  2778
sl@0
  2779
		err = CheckBuffer();
sl@0
  2780
		iPosition += 2*KTestBufferSize;
sl@0
  2781
		if (err != 0)
sl@0
  2782
			return EFail;
sl@0
  2783
		}
sl@0
  2784
sl@0
  2785
	if (err != KErrNone)
sl@0
  2786
		User::Leave(err);
sl@0
  2787
sl@0
  2788
	clip->ReadBufferL(iReadLength, bufferArray[completionCount], iPosition, iSink);
sl@0
  2789
	return EPass;
sl@0
  2790
	}
sl@0
  2791
sl@0
  2792
TVerdict TFileReadBuffer8TestStep::DoTestStepL()
sl@0
  2793
	{
sl@0
  2794
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSource);
sl@0
  2795
sl@0
  2796
	RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  2797
	TInt maxRequestCount = bufferArray.Count();
sl@0
  2798
	TInt err = KErrNone;
sl@0
  2799
	iPosition = 0;
sl@0
  2800
sl@0
  2801
	TInt requestCount;
sl@0
  2802
	for (requestCount = 0 ; requestCount<maxRequestCount ; requestCount++)
sl@0
  2803
		{
sl@0
  2804
		iBuffer = bufferArray[requestCount];
sl@0
  2805
		RandomiseBuffer();
sl@0
  2806
sl@0
  2807
		TRAP(err, clip->ReadBufferL(iBuffer, iPosition, iSink));
sl@0
  2808
		if (err != KErrNone)
sl@0
  2809
			break;
sl@0
  2810
sl@0
  2811
		iPosition += 2*KTestBufferSize;
sl@0
  2812
		}
sl@0
  2813
sl@0
  2814
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  2815
	if (requestCount)
sl@0
  2816
		{
sl@0
  2817
		if (requestCount>iMaxRequestCount)
sl@0
  2818
			requestCount = iMaxRequestCount;
sl@0
  2819
sl@0
  2820
		dummySink->SetExpectedFillCount(requestCount);
sl@0
  2821
		CActiveScheduler::Start();
sl@0
  2822
		}
sl@0
  2823
sl@0
  2824
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  2825
	if (!requestCount && sinkBufferFilledOk)
sl@0
  2826
		return EFail;
sl@0
  2827
sl@0
  2828
	if (!sinkBufferFilledOk && requestCount)
sl@0
  2829
		{
sl@0
  2830
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  2831
			User::Leave(err);
sl@0
  2832
sl@0
  2833
		return EFail;
sl@0
  2834
		}
sl@0
  2835
sl@0
  2836
	iPosition = 0;
sl@0
  2837
sl@0
  2838
	TInt completionCount;
sl@0
  2839
	for (completionCount = 0 ; completionCount<requestCount ; completionCount++)
sl@0
  2840
		{
sl@0
  2841
		iBuffer = bufferArray[completionCount];
sl@0
  2842
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  2843
		TInt readLength = buffer->BufferSize();
sl@0
  2844
		if (readLength != iReadLength)
sl@0
  2845
			return EFail;
sl@0
  2846
sl@0
  2847
		err = CheckBuffer();
sl@0
  2848
		iPosition += 2*KTestBufferSize;
sl@0
  2849
		if (err != 0)
sl@0
  2850
			return EFail;
sl@0
  2851
		}
sl@0
  2852
sl@0
  2853
	if (err != KErrNone)
sl@0
  2854
		User::Leave(err);
sl@0
  2855
sl@0
  2856
	clip->ReadBufferL(bufferArray[completionCount], iPosition, iSink);
sl@0
  2857
	return EPass;
sl@0
  2858
	}
sl@0
  2859
sl@0
  2860
sl@0
  2861
TVerdict TNewFileSinkTestStep::DoTestStepL()
sl@0
  2862
	{
sl@0
  2863
	CMMFFile* sink = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(iUid, *iConfigDes));
sl@0
  2864
	CleanupStack::PushL(sink);
sl@0
  2865
	sink->SinkPrimeL();
sl@0
  2866
sl@0
  2867
	CleanupStack::PopAndDestroy(sink);
sl@0
  2868
	return EPass;
sl@0
  2869
	}
sl@0
  2870
sl@0
  2871
TVerdict TFileSinkSetSizeTestStep::DoTestStepL()
sl@0
  2872
	{
sl@0
  2873
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink);
sl@0
  2874
sl@0
  2875
	TInt size;
sl@0
  2876
	TInt oldSize = clip->Size();
sl@0
  2877
sl@0
  2878
	TInt newSize = oldSize+1;
sl@0
  2879
	TInt err = clip->SetSize(newSize);
sl@0
  2880
	if (iCanSetSize)
sl@0
  2881
		{
sl@0
  2882
		if (err != KErrNone)
sl@0
  2883
			User::Leave(err);
sl@0
  2884
sl@0
  2885
		if ((size = clip->Size()) != newSize)
sl@0
  2886
			{
sl@0
  2887
			if (iFileFailureExpected && (size == 0))
sl@0
  2888
				User::Leave(KErrFileFail);
sl@0
  2889
sl@0
  2890
			return EFail;
sl@0
  2891
			}
sl@0
  2892
		}
sl@0
  2893
	else
sl@0
  2894
		{
sl@0
  2895
		if (err != KErrNotSupported)
sl@0
  2896
			{
sl@0
  2897
			if (err == KErrNone)
sl@0
  2898
				return EFail;
sl@0
  2899
sl@0
  2900
			User::Leave(err);
sl@0
  2901
			}
sl@0
  2902
sl@0
  2903
		if ((size = clip->Size()) != oldSize)
sl@0
  2904
			return EFail;
sl@0
  2905
		}
sl@0
  2906
	return EPass;
sl@0
  2907
	}
sl@0
  2908
sl@0
  2909
TInt TFileSinkThreadLogonThread(TAny* initPtr)
sl@0
  2910
	{
sl@0
  2911
	TThreadData &threadData = *REINTERPRET_CAST(TThreadData*, initPtr);
sl@0
  2912
	CMMFFile* sink = threadData.iFilePtr;
sl@0
  2913
	MAsyncEventHandler* eventHandler = threadData.iEventHandler;
sl@0
  2914
sl@0
  2915
	threadData.iErr = KErrNone;
sl@0
  2916
sl@0
  2917
	threadData.iErr = sink->SinkThreadLogon(*eventHandler);
sl@0
  2918
	if (threadData.iErr == KErrNone)
sl@0
  2919
		{
sl@0
  2920
		threadData.iFileSize = sink->Size();
sl@0
  2921
		sink->SinkThreadLogoff();
sl@0
  2922
		}
sl@0
  2923
sl@0
  2924
sl@0
  2925
	return 0;
sl@0
  2926
	}
sl@0
  2927
sl@0
  2928
TVerdict TFileSinkThreadLogonTestStep::DoTestStepL()
sl@0
  2929
	{
sl@0
  2930
	TBool failure = EFalse;
sl@0
  2931
sl@0
  2932
sl@0
  2933
	TThreadData threadData; // Is this going to work on target? (or do we need to package the data and use RThread::ReadL/WriteL?)
sl@0
  2934
	threadData.iFilePtr = STATIC_CAST(CMMFFile*, iSink);
sl@0
  2935
	threadData.iEventHandler = iEventHandler;
sl@0
  2936
sl@0
  2937
	TRequestStatus logonStatus;
sl@0
  2938
	
sl@0
  2939
	RThread sinkThread;
sl@0
  2940
	User::LeaveIfError(sinkThread.Create(_L("TFileSinkThreadLogonThread"), TFileSinkThreadLogonThread, KDefaultStackSize, NULL, &threadData));
sl@0
  2941
	CleanupClosePushL(sinkThread);
sl@0
  2942
sl@0
  2943
	sinkThread.Logon(logonStatus);
sl@0
  2944
	if(logonStatus != KRequestPending)
sl@0
  2945
		{
sl@0
  2946
		User::Leave(logonStatus.Int());
sl@0
  2947
		}
sl@0
  2948
	sinkThread.Resume();
sl@0
  2949
	
sl@0
  2950
	User::WaitForRequest(logonStatus);
sl@0
  2951
	if(logonStatus != KErrNone)
sl@0
  2952
		{
sl@0
  2953
		User::Leave(logonStatus.Int());
sl@0
  2954
		}
sl@0
  2955
sl@0
  2956
	if (threadData.iErr != KErrNone)
sl@0
  2957
		User::Leave(threadData.iErr);
sl@0
  2958
sl@0
  2959
	if ((threadData.iFileSize != iFileSize))
sl@0
  2960
		{
sl@0
  2961
		if (!iFileFailureExpected)
sl@0
  2962
			{
sl@0
  2963
			failure = ETrue;
sl@0
  2964
			}
sl@0
  2965
sl@0
  2966
		if (threadData.iFileSize != 0)
sl@0
  2967
			{
sl@0
  2968
			failure = ETrue;
sl@0
  2969
			}
sl@0
  2970
		}
sl@0
  2971
sl@0
  2972
	CleanupStack::PopAndDestroy(1); // sinkThread
sl@0
  2973
	return (failure ? EFail : EPass);
sl@0
  2974
	}
sl@0
  2975
sl@0
  2976
TVerdict TFileEmptyBufferTestStep::DoTestStepL()
sl@0
  2977
	{
sl@0
  2978
	RandomiseBuffer();
sl@0
  2979
sl@0
  2980
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  2981
	User::LeaveIfError(iSink->SinkThreadLogon(*dummySource));
sl@0
  2982
	iSink->SinkPrimeL();
sl@0
  2983
sl@0
  2984
	TMediaId mediaId;
sl@0
  2985
	TRAPD(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  2986
	if (iAsynchronousWrite && (err == KErrNone))
sl@0
  2987
		{
sl@0
  2988
		CActiveScheduler::Start();
sl@0
  2989
		}
sl@0
  2990
sl@0
  2991
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  2992
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  2993
		return EFail;
sl@0
  2994
sl@0
  2995
	User::LeaveIfError(err);
sl@0
  2996
	if (!sourceBufferEmptiedOk)
sl@0
  2997
		{
sl@0
  2998
		User::LeaveIfError(dummySource->Error());
sl@0
  2999
		return EFail;
sl@0
  3000
		}
sl@0
  3001
sl@0
  3002
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3003
	TInt writeLength = buffer->BufferSize();
sl@0
  3004
	if (writeLength != iWriteLength)
sl@0
  3005
		return EFail;
sl@0
  3006
sl@0
  3007
	if (iCopyOfDestinationDes.Length()<(iPosition+iWriteLength))
sl@0
  3008
		iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  3009
sl@0
  3010
	TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength);
sl@0
  3011
	iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3012
	return EPass;
sl@0
  3013
	}
sl@0
  3014
sl@0
  3015
TVerdict TWriteBufferTestStep::DoTestPostambleL(TBool aCheck)
sl@0
  3016
	{
sl@0
  3017
	if (iSink != NULL)
sl@0
  3018
		iSink->SinkStopL();
sl@0
  3019
sl@0
  3020
	if (aCheck)
sl@0
  3021
		{
sl@0
  3022
		TInt err = CheckDestinationL();
sl@0
  3023
		return (err == 0) ? EPass : EFail;
sl@0
  3024
		}
sl@0
  3025
sl@0
  3026
	return EPass;
sl@0
  3027
	}
sl@0
  3028
sl@0
  3029
TVerdict TFileEmptyBuffer2TestStep::DoTestStepL()
sl@0
  3030
	{
sl@0
  3031
	TMediaId mediaId;
sl@0
  3032
	MDataSink* sink = CreateFileSinkL(iSinkType, iFsSession, iDestinationFileName);
sl@0
  3033
	CleanupDeletePushL(sink);
sl@0
  3034
sl@0
  3035
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  3036
	User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
  3037
	sink->SinkPrimeL();
sl@0
  3038
sl@0
  3039
	RandomiseBuffer();
sl@0
  3040
	TRAPD(err, sink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  3041
	if (iAsynchronousWrite && (err == KErrNone))
sl@0
  3042
		{
sl@0
  3043
		CActiveScheduler::Start();
sl@0
  3044
		}
sl@0
  3045
sl@0
  3046
	CleanupStack::PopAndDestroy(sink);
sl@0
  3047
sl@0
  3048
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  3049
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  3050
		{
sl@0
  3051
		return EFail;
sl@0
  3052
		}
sl@0
  3053
sl@0
  3054
	User::LeaveIfError(err);
sl@0
  3055
	if (!sourceBufferEmptiedOk)
sl@0
  3056
		{
sl@0
  3057
		User::LeaveIfError(dummySource->Error());
sl@0
  3058
		return EFail;
sl@0
  3059
		}
sl@0
  3060
sl@0
  3061
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3062
	TInt writeLength = buffer->BufferSize();
sl@0
  3063
	if (writeLength != iWriteLength)
sl@0
  3064
		{
sl@0
  3065
		return EFail;
sl@0
  3066
		}
sl@0
  3067
sl@0
  3068
	if (iCopyOfDestinationDes.Length()<(iPosition+iWriteLength))
sl@0
  3069
		{
sl@0
  3070
		iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  3071
		}
sl@0
  3072
sl@0
  3073
	TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength);
sl@0
  3074
	iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3075
	return EPass;
sl@0
  3076
	}
sl@0
  3077
sl@0
  3078
void TFileEmptyBuffer3TestStep::DoTestPreambleL()
sl@0
  3079
	{
sl@0
  3080
	CMMFClip* sink = STATIC_CAST(CMMFClip*, CreateFileSinkL(iSinkType, iFsSession, iDestinationFileName ));
sl@0
  3081
	CleanupDeletePushL(sink);
sl@0
  3082
sl@0
  3083
	TInt err = sink->Delete();
sl@0
  3084
	if ((err != KErrNone) && (err != KErrNotFound))
sl@0
  3085
		{
sl@0
  3086
		User::Leave(err);
sl@0
  3087
		}
sl@0
  3088
sl@0
  3089
	iCopyOfDestinationDes.SetLength(0);
sl@0
  3090
	CleanupStack::PopAndDestroy(sink);
sl@0
  3091
	}
sl@0
  3092
sl@0
  3093
TVerdict TFileEmptyBuffer3TestStep::DoTestStepL()
sl@0
  3094
	{
sl@0
  3095
	TMediaId mediaId;
sl@0
  3096
	CMMFClip* sink = STATIC_CAST(CMMFClip*, CreateFileSinkL(iSinkType, iFsSession, iDestinationFileName));
sl@0
  3097
	CleanupDeletePushL(sink);
sl@0
  3098
sl@0
  3099
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  3100
	User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
  3101
	sink->SinkPrimeL();
sl@0
  3102
sl@0
  3103
	TInt totalWriteLength = 0;
sl@0
  3104
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3105
	TInt maxWriteLength = iCopyOfDestinationDes.MaxLength();
sl@0
  3106
	TBool failure = EFalse;
sl@0
  3107
	
sl@0
  3108
	do
sl@0
  3109
		{
sl@0
  3110
		RandomiseBuffer();
sl@0
  3111
sl@0
  3112
		buffer->Data().SetLength(Min(iWriteLength, maxWriteLength - totalWriteLength));
sl@0
  3113
		TRAPD(err, sink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  3114
		if (iAsynchronousWrite && (err == KErrNone))
sl@0
  3115
			{
sl@0
  3116
			CActiveScheduler::Start();
sl@0
  3117
			}
sl@0
  3118
sl@0
  3119
		TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  3120
		if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  3121
			{
sl@0
  3122
			failure = ETrue;
sl@0
  3123
			break;
sl@0
  3124
			}
sl@0
  3125
sl@0
  3126
		User::LeaveIfError(err);
sl@0
  3127
sl@0
  3128
		if (!sourceBufferEmptiedOk)
sl@0
  3129
			{
sl@0
  3130
			User::LeaveIfError(dummySource->Error());
sl@0
  3131
			failure = ETrue;
sl@0
  3132
			break;
sl@0
  3133
			}
sl@0
  3134
sl@0
  3135
		totalWriteLength += buffer->BufferSize();
sl@0
  3136
		iCopyOfDestinationDes.Append(buffer->Data());
sl@0
  3137
		}
sl@0
  3138
	while (totalWriteLength < maxWriteLength);
sl@0
  3139
sl@0
  3140
	CleanupStack::PopAndDestroy(sink);
sl@0
  3141
	return (failure ? EFail : EPass);
sl@0
  3142
	}
sl@0
  3143
sl@0
  3144
TVerdict TFileEmptyBuffer3TestStep::DoTestPostambleL(TBool aCheck)
sl@0
  3145
	{
sl@0
  3146
	// Close ECom
sl@0
  3147
	TVerdict verdict = TFileTestStep::DoTestPostambleL(aCheck);
sl@0
  3148
	if (verdict != EPass)
sl@0
  3149
		{
sl@0
  3150
		return verdict;
sl@0
  3151
		}
sl@0
  3152
sl@0
  3153
	// Reset the buffer.
sl@0
  3154
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3155
	buffer->Data().SetLength(iWriteLength);
sl@0
  3156
sl@0
  3157
	if (aCheck)
sl@0
  3158
		{
sl@0
  3159
		TInt err = CheckDestinationL();
sl@0
  3160
		return (err == 0) ? EPass : EFail;
sl@0
  3161
		}
sl@0
  3162
sl@0
  3163
	return EPass;
sl@0
  3164
	}
sl@0
  3165
sl@0
  3166
void TFileEmptyBuffer4TestStep::DoTestPreambleL()
sl@0
  3167
	{
sl@0
  3168
	TWriteBufferToFileTestStep::DoTestPreambleL();
sl@0
  3169
	}
sl@0
  3170
sl@0
  3171
TVerdict TFileEmptyBuffer4TestStep::DoTestStepL()
sl@0
  3172
	{
sl@0
  3173
	TMediaId mediaId;
sl@0
  3174
	CMMFClip* sink = STATIC_CAST(CMMFClip*, CreateFileSinkL(iSinkType, iFsSession, iDestinationFileName));
sl@0
  3175
	CleanupDeletePushL(sink);
sl@0
  3176
sl@0
  3177
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  3178
	User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
  3179
	sink->SinkPrimeL();
sl@0
  3180
sl@0
  3181
	RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  3182
	TInt maxRequestCount = Min(iMaxRequestCount, bufferArray.Count());
sl@0
  3183
	TInt err = KErrNone;
sl@0
  3184
	iPosition = 0;
sl@0
  3185
sl@0
  3186
	// For each buffer in the array try to empty it. Stop at the first failure.
sl@0
  3187
	// The test step should not Leave if there is an error as this will cause
sl@0
  3188
	// the CheckDestinationL function to fail... all successful empties must
sl@0
  3189
	// be completed.
sl@0
  3190
	TInt requestCount;
sl@0
  3191
	for (requestCount = 0; requestCount < maxRequestCount; requestCount++)
sl@0
  3192
		{
sl@0
  3193
		iBuffer = bufferArray[requestCount];
sl@0
  3194
		RandomiseBuffer();
sl@0
  3195
sl@0
  3196
		TRAP(err, sink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  3197
		if (err != KErrNone)
sl@0
  3198
			{
sl@0
  3199
			break;
sl@0
  3200
			}
sl@0
  3201
		}
sl@0
  3202
sl@0
  3203
	if (requestCount)
sl@0
  3204
		{
sl@0
  3205
		dummySource->SetExpectedEmptyCount(requestCount);
sl@0
  3206
		CActiveScheduler::Start();
sl@0
  3207
		}
sl@0
  3208
sl@0
  3209
	CleanupStack::PopAndDestroy(sink);
sl@0
  3210
sl@0
  3211
	if (dummySource->ErrorCount())
sl@0
  3212
		{
sl@0
  3213
		User::LeaveIfError(dummySource->Error());
sl@0
  3214
		}
sl@0
  3215
sl@0
  3216
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  3217
	if (!requestCount && sourceBufferEmptiedOk)
sl@0
  3218
		{
sl@0
  3219
		return EFail;
sl@0
  3220
		}
sl@0
  3221
sl@0
  3222
	TInt completionCount;
sl@0
  3223
	for (completionCount = 0; completionCount < requestCount; completionCount++)
sl@0
  3224
		{
sl@0
  3225
		iBuffer = bufferArray[completionCount];
sl@0
  3226
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3227
		TInt writeLength = buffer->BufferSize();
sl@0
  3228
		if (writeLength != iWriteLength)
sl@0
  3229
			{
sl@0
  3230
			return EFail;
sl@0
  3231
			}
sl@0
  3232
sl@0
  3233
		if ((iPosition + iWriteLength) > iCopyOfDestinationDes.Length())
sl@0
  3234
			iCopyOfDestinationDes.SetLength(iPosition + iWriteLength);
sl@0
  3235
sl@0
  3236
		TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength);
sl@0
  3237
		iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3238
		iPosition += iWriteLength;
sl@0
  3239
		}
sl@0
  3240
sl@0
  3241
	return EPass;
sl@0
  3242
	}
sl@0
  3243
sl@0
  3244
TVerdict TFileEmptyBuffer4TestStep::DoTestPostambleL(TBool aCheck)
sl@0
  3245
	{
sl@0
  3246
	// Close ECom
sl@0
  3247
	TVerdict verdict = TFileTestStep::DoTestPostambleL(aCheck);
sl@0
  3248
	if (verdict != EPass)
sl@0
  3249
		{
sl@0
  3250
		return verdict;
sl@0
  3251
		}
sl@0
  3252
sl@0
  3253
	if (aCheck)
sl@0
  3254
		{
sl@0
  3255
		TInt err = CheckDestinationL();
sl@0
  3256
		return (err == 0) ? EPass : EFail;
sl@0
  3257
		}
sl@0
  3258
sl@0
  3259
	return EPass;
sl@0
  3260
	}
sl@0
  3261
sl@0
  3262
TInt TFileEmptyBuffer5TestStep::CheckDestinationL()
sl@0
  3263
	{
sl@0
  3264
	TInt length = iCopyOfDestinationDes.Length();
sl@0
  3265
sl@0
  3266
	// Read the file into a descriptor.
sl@0
  3267
	RFile destinationFile;
sl@0
  3268
	TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead | EFileShareAny);
sl@0
  3269
	CleanupClosePushL(destinationFile);
sl@0
  3270
	if (err != KErrNone)
sl@0
  3271
		{
sl@0
  3272
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3273
sl@0
  3274
		if (err == KErrNotFound)
sl@0
  3275
			return (length != 0) ? -1 : 0;
sl@0
  3276
sl@0
  3277
		User::Leave(err);
sl@0
  3278
		}
sl@0
  3279
sl@0
  3280
	TInt destinationFileSize;
sl@0
  3281
	User::LeaveIfError(destinationFile.Size(destinationFileSize));
sl@0
  3282
sl@0
  3283
	// Check that the file length is correct.
sl@0
  3284
	if (destinationFileSize != length)
sl@0
  3285
		{
sl@0
  3286
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3287
		return -1;
sl@0
  3288
		}
sl@0
  3289
sl@0
  3290
	HBufC8* destinationHBuf = HBufC8::NewLC(destinationFileSize);
sl@0
  3291
	TPtr8 destinationDes = destinationHBuf->Des();
sl@0
  3292
	User::LeaveIfError(destinationFile.Read(destinationDes));
sl@0
  3293
sl@0
  3294
	// Check that the file data matches.
sl@0
  3295
	err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  3296
	if (err != 0)
sl@0
  3297
		{
sl@0
  3298
		// At least one of the remaining two writes was completed.
sl@0
  3299
		RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  3300
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[3]);
sl@0
  3301
		TInt writeLength = buffer->BufferSize();
sl@0
  3302
		if (writeLength != iWriteLength)
sl@0
  3303
			return EFail;
sl@0
  3304
sl@0
  3305
		TPtrC8 bufferData(buffer->Data().Ptr(), writeLength);
sl@0
  3306
		iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3307
		err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  3308
		if (err != 0)
sl@0
  3309
			{
sl@0
  3310
			iPosition += iWriteLength;
sl@0
  3311
sl@0
  3312
			buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[4]);
sl@0
  3313
			writeLength = buffer->BufferSize();
sl@0
  3314
			if (writeLength != iWriteLength)
sl@0
  3315
				return EFail;
sl@0
  3316
sl@0
  3317
			bufferData.Set(buffer->Data().Ptr(), writeLength);
sl@0
  3318
			iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3319
sl@0
  3320
			err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  3321
			}
sl@0
  3322
		}
sl@0
  3323
sl@0
  3324
	CleanupStack::PopAndDestroy(destinationHBuf);
sl@0
  3325
	CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3326
	return err;
sl@0
  3327
	}
sl@0
  3328
sl@0
  3329
TVerdict TFileEmptyBuffer6TestStep::DoTestStepL()
sl@0
  3330
	{
sl@0
  3331
	TMediaId mediaId;
sl@0
  3332
	RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  3333
	TInt maxRequestCount = bufferArray.Count();
sl@0
  3334
	TInt err = KErrNone;
sl@0
  3335
	iPosition = 0;
sl@0
  3336
sl@0
  3337
	TInt requestCount;
sl@0
  3338
	for (requestCount = 0 ; requestCount<maxRequestCount ; requestCount++)
sl@0
  3339
		{
sl@0
  3340
		iBuffer = bufferArray[requestCount];
sl@0
  3341
		RandomiseBuffer();
sl@0
  3342
sl@0
  3343
		TRAP(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  3344
		if (err != KErrNone)
sl@0
  3345
			break;
sl@0
  3346
		}
sl@0
  3347
sl@0
  3348
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  3349
	if (requestCount)
sl@0
  3350
		{
sl@0
  3351
		if (requestCount>iMaxRequestCount)
sl@0
  3352
			requestCount = iMaxRequestCount;
sl@0
  3353
sl@0
  3354
		dummySource->SetExpectedEmptyCount(requestCount);
sl@0
  3355
		CActiveScheduler::Start();
sl@0
  3356
		}
sl@0
  3357
sl@0
  3358
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  3359
	if (!requestCount && sourceBufferEmptiedOk)
sl@0
  3360
		return EFail;
sl@0
  3361
sl@0
  3362
	if (!sourceBufferEmptiedOk && requestCount)
sl@0
  3363
		{
sl@0
  3364
		requestCount-= dummySource->ErrorCount();
sl@0
  3365
		err = dummySource->Error();
sl@0
  3366
sl@0
  3367
		if (err == KErrNone)
sl@0
  3368
			return EFail;
sl@0
  3369
		}
sl@0
  3370
sl@0
  3371
	TInt completionCount;
sl@0
  3372
	for (completionCount = 0 ; completionCount<requestCount ; completionCount++)
sl@0
  3373
		{
sl@0
  3374
		iBuffer = bufferArray[completionCount];
sl@0
  3375
sl@0
  3376
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3377
		TInt writeLength = buffer->BufferSize();
sl@0
  3378
		if (writeLength != iWriteLength)
sl@0
  3379
			return EFail;
sl@0
  3380
sl@0
  3381
		if ((iPosition+iWriteLength)>iCopyOfDestinationDes.Length())
sl@0
  3382
			iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  3383
sl@0
  3384
		TPtrC8 bufferData(buffer->Data().Ptr(), iWriteLength);
sl@0
  3385
		iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3386
		iPosition += iWriteLength;
sl@0
  3387
		}
sl@0
  3388
sl@0
  3389
	if (err != KErrNone)
sl@0
  3390
		User::Leave(err);
sl@0
  3391
sl@0
  3392
	iSink->EmptyBufferL(bufferArray[0], iSource, mediaId);
sl@0
  3393
	return EPass;
sl@0
  3394
	}
sl@0
  3395
sl@0
  3396
TInt TFileEmptyBuffer6TestStep::CheckDestinationL()
sl@0
  3397
	{
sl@0
  3398
	TInt length = iCopyOfDestinationDes.Length();
sl@0
  3399
sl@0
  3400
	// Read the file into a descriptor.
sl@0
  3401
	RFile destinationFile;
sl@0
  3402
	TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead | EFileShareAny);
sl@0
  3403
	CleanupClosePushL(destinationFile);
sl@0
  3404
	if (err != KErrNone)
sl@0
  3405
		{
sl@0
  3406
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3407
sl@0
  3408
		if (err == KErrNotFound)
sl@0
  3409
			return (length != 0) ? -1 : 0;
sl@0
  3410
sl@0
  3411
		User::Leave(err);
sl@0
  3412
		}
sl@0
  3413
sl@0
  3414
	TInt destinationFileSize;
sl@0
  3415
	User::LeaveIfError(destinationFile.Size(destinationFileSize));
sl@0
  3416
sl@0
  3417
	// Check that the file length is correct.
sl@0
  3418
	if (destinationFileSize != length)
sl@0
  3419
		{
sl@0
  3420
		if (destinationFileSize != (length+iWriteLength))
sl@0
  3421
			{
sl@0
  3422
			if (destinationFileSize != (length+2*iWriteLength))
sl@0
  3423
				{
sl@0
  3424
				if (destinationFileSize != (length+3*iWriteLength))
sl@0
  3425
					{
sl@0
  3426
					CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3427
					return -1;
sl@0
  3428
					}
sl@0
  3429
				}
sl@0
  3430
			}
sl@0
  3431
		}
sl@0
  3432
sl@0
  3433
	HBufC8* destinationHBuf = HBufC8::NewLC(destinationFileSize);
sl@0
  3434
	TPtr8 destinationDes = destinationHBuf->Des();
sl@0
  3435
	User::LeaveIfError(destinationFile.Read(destinationDes));
sl@0
  3436
sl@0
  3437
	// Check that the file data matches.
sl@0
  3438
	err = Mem::Compare(destinationDes.Ptr(), destinationFileSize, iCopyOfDestinationDes.Ptr(), length);
sl@0
  3439
	if (err != 0)
sl@0
  3440
		{
sl@0
  3441
		// At least one of the remaining three writes was completed.
sl@0
  3442
		RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  3443
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[3]);
sl@0
  3444
		TInt writeLength = buffer->BufferSize();
sl@0
  3445
		if (writeLength != iWriteLength)
sl@0
  3446
			return EFail;
sl@0
  3447
sl@0
  3448
		if ((iPosition+iWriteLength)<=iCopyOfDestinationDes.Length())
sl@0
  3449
			return EFail;
sl@0
  3450
		iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  3451
		length = iPosition+iWriteLength;
sl@0
  3452
sl@0
  3453
		TPtrC8 bufferData(buffer->Data().Ptr(), writeLength);
sl@0
  3454
		iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3455
		err = Mem::Compare(destinationDes.Ptr(), destinationFileSize, iCopyOfDestinationDes.Ptr(), length);
sl@0
  3456
		if (err != 0)
sl@0
  3457
			{
sl@0
  3458
			iPosition += iWriteLength;
sl@0
  3459
sl@0
  3460
			buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[4]);
sl@0
  3461
			writeLength = buffer->BufferSize();
sl@0
  3462
			if (writeLength != iWriteLength)
sl@0
  3463
				return EFail;
sl@0
  3464
sl@0
  3465
			if ((iPosition+iWriteLength)<=iCopyOfDestinationDes.Length())
sl@0
  3466
				return EFail;
sl@0
  3467
			iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  3468
			length = iPosition+iWriteLength;
sl@0
  3469
sl@0
  3470
			bufferData.Set(buffer->Data().Ptr(), writeLength);
sl@0
  3471
			iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3472
sl@0
  3473
			err = Mem::Compare(destinationDes.Ptr(), destinationFileSize, iCopyOfDestinationDes.Ptr(), length);
sl@0
  3474
			if (err != 0)
sl@0
  3475
				{
sl@0
  3476
				iPosition += iWriteLength;
sl@0
  3477
				if ((iPosition+iWriteLength)<=iCopyOfDestinationDes.Length())
sl@0
  3478
					return EFail;
sl@0
  3479
				iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  3480
				length = iPosition+iWriteLength;
sl@0
  3481
sl@0
  3482
				buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[0]);
sl@0
  3483
				bufferData.Set(buffer->Data().Ptr(), iWriteLength);
sl@0
  3484
sl@0
  3485
				iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3486
				err = Mem::Compare(destinationDes.Ptr(), destinationFileSize, iCopyOfDestinationDes.Ptr(), length);
sl@0
  3487
				}
sl@0
  3488
			}
sl@0
  3489
		}
sl@0
  3490
sl@0
  3491
	CleanupStack::PopAndDestroy(destinationHBuf);
sl@0
  3492
	CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3493
	return err;
sl@0
  3494
	}
sl@0
  3495
sl@0
  3496
TVerdict TFileWriteBufferTestStep::DoTestStepL()
sl@0
  3497
	{
sl@0
  3498
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink);
sl@0
  3499
sl@0
  3500
	RandomiseBuffer();
sl@0
  3501
	TRAPD(err, clip->WriteBufferL(iWriteLength, iBuffer, iPosition, iSource));
sl@0
  3502
	if (err == KErrNone)
sl@0
  3503
		CActiveScheduler::Start();
sl@0
  3504
sl@0
  3505
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  3506
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  3507
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  3508
		return EFail;
sl@0
  3509
sl@0
  3510
	if (err != KErrNone)
sl@0
  3511
		User::Leave(err);
sl@0
  3512
sl@0
  3513
	if (!sourceBufferEmptiedOk)
sl@0
  3514
		{
sl@0
  3515
		if ((err = dummySource->Error()) != KErrNone)
sl@0
  3516
			User::Leave(err);
sl@0
  3517
sl@0
  3518
		return EFail;
sl@0
  3519
		}
sl@0
  3520
sl@0
  3521
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3522
	if ((iPosition+iWriteLength)>iCopyOfDestinationDes.Length())
sl@0
  3523
		iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  3524
sl@0
  3525
	iCopyOfDestinationDes.Replace(iPosition, iWriteLength, buffer->Data());
sl@0
  3526
	return EPass;
sl@0
  3527
	}
sl@0
  3528
sl@0
  3529
TVerdict TFileWriteBuffer2TestStep::DoTestStepL()
sl@0
  3530
	{
sl@0
  3531
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink);
sl@0
  3532
sl@0
  3533
	RandomiseBuffer();
sl@0
  3534
	TRAPD(err, clip->WriteBufferL(iBuffer, iPosition, iSource));
sl@0
  3535
	if (err == KErrNone)
sl@0
  3536
		CActiveScheduler::Start();
sl@0
  3537
sl@0
  3538
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  3539
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  3540
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  3541
		return EFail;
sl@0
  3542
sl@0
  3543
	if (err != KErrNone)
sl@0
  3544
		User::Leave(err);
sl@0
  3545
sl@0
  3546
	if (!sourceBufferEmptiedOk)
sl@0
  3547
		{
sl@0
  3548
		if ((err = dummySource->Error()) != KErrNone)
sl@0
  3549
			User::Leave(err);
sl@0
  3550
sl@0
  3551
		return EFail;
sl@0
  3552
		}
sl@0
  3553
sl@0
  3554
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3555
	if ((iPosition+iWriteLength)>iCopyOfDestinationDes.Length())
sl@0
  3556
		iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  3557
sl@0
  3558
	iCopyOfDestinationDes.Replace(iPosition, iWriteLength, buffer->Data());
sl@0
  3559
	return EPass;
sl@0
  3560
	}
sl@0
  3561
sl@0
  3562
TVerdict TFileWriteBuffer3TestStep::DoTestStepL()
sl@0
  3563
	{
sl@0
  3564
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink);
sl@0
  3565
sl@0
  3566
	RandomiseBuffer();
sl@0
  3567
	clip->WriteBufferL(iBuffer, iPosition);
sl@0
  3568
sl@0
  3569
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3570
	if ((iPosition+iWriteLength)>iCopyOfDestinationDes.Length())
sl@0
  3571
		iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  3572
sl@0
  3573
	iCopyOfDestinationDes.Replace(iPosition, buffer->BufferSize(), buffer->Data());
sl@0
  3574
	return EPass;
sl@0
  3575
	}
sl@0
  3576
sl@0
  3577
TVerdict TFileWriteBuffer4TestStep::DoTestStepL()
sl@0
  3578
	{
sl@0
  3579
	RFs fs;
sl@0
  3580
	User::LeaveIfError(fs.Connect());
sl@0
  3581
	CleanupClosePushL(fs);
sl@0
  3582
	CMMFClip* clip = static_cast<CMMFClip*>(CreateFileSinkL(iSinkType, fs, iFileName));
sl@0
  3583
	CleanupDeletePushL(clip);
sl@0
  3584
sl@0
  3585
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  3586
	User::LeaveIfError(clip->SinkThreadLogon(*dummySource));
sl@0
  3587
	clip->SinkPrimeL();
sl@0
  3588
sl@0
  3589
	RandomiseBuffer();
sl@0
  3590
	TRAPD(err, clip->WriteBufferL(iWriteLength, iBuffer, iPosition, iSource));
sl@0
  3591
	if (err == KErrNone)
sl@0
  3592
		CActiveScheduler::Start();
sl@0
  3593
	CleanupStack::PopAndDestroy(2, &fs); // clip, fs
sl@0
  3594
sl@0
  3595
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  3596
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  3597
		return EFail;
sl@0
  3598
sl@0
  3599
	if (err != KErrNone)
sl@0
  3600
		User::Leave(err);
sl@0
  3601
sl@0
  3602
	if (!sourceBufferEmptiedOk)
sl@0
  3603
		{
sl@0
  3604
		if ((err = dummySource->Error()) != KErrNone)
sl@0
  3605
			User::Leave(err);
sl@0
  3606
sl@0
  3607
		return EFail;
sl@0
  3608
		}
sl@0
  3609
sl@0
  3610
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3611
	TInt writeLength = iWriteLength;
sl@0
  3612
	if (writeLength>buffer->Data().Length())
sl@0
  3613
		writeLength = buffer->Data().Length();
sl@0
  3614
sl@0
  3615
	TInt position = iPosition;
sl@0
  3616
	if (position>iCopyOfDestinationDes.Length())
sl@0
  3617
		position = iCopyOfDestinationDes.Length();
sl@0
  3618
sl@0
  3619
	if ((position+writeLength)>iCopyOfDestinationDes.Length())
sl@0
  3620
		iCopyOfDestinationDes.SetLength(position+writeLength);
sl@0
  3621
sl@0
  3622
	TPtrC8 bufferData(buffer->Data().Ptr(), writeLength);
sl@0
  3623
	iCopyOfDestinationDes.Replace(position, writeLength, bufferData);
sl@0
  3624
	return EPass;
sl@0
  3625
	}
sl@0
  3626
sl@0
  3627
TInt TFileWriteBuffer5TestStep::CheckDestinationL()
sl@0
  3628
	{
sl@0
  3629
	TInt length = iCopyOfDestinationDes.Length();
sl@0
  3630
sl@0
  3631
	// Read the file into a descriptor.
sl@0
  3632
	RFile destinationFile;
sl@0
  3633
	TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead | EFileShareAny);
sl@0
  3634
	CleanupClosePushL(destinationFile);
sl@0
  3635
	if (err != KErrNone)
sl@0
  3636
		{
sl@0
  3637
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3638
sl@0
  3639
		if (err == KErrNotFound)
sl@0
  3640
			return (length != 0) ? -1 : 0;
sl@0
  3641
sl@0
  3642
		User::Leave(err);
sl@0
  3643
		}
sl@0
  3644
sl@0
  3645
	TInt destinationFileSize;
sl@0
  3646
	User::LeaveIfError(destinationFile.Size(destinationFileSize));
sl@0
  3647
sl@0
  3648
	// Check that the file length is correct.
sl@0
  3649
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3650
	if (destinationFileSize != (length+(iWriteLength-buffer->Data().Length())))
sl@0
  3651
		{
sl@0
  3652
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3653
		return -1;
sl@0
  3654
		}
sl@0
  3655
sl@0
  3656
	HBufC8* destinationHBuf = HBufC8::NewLC(destinationFileSize);
sl@0
  3657
	TPtr8 destinationDes = destinationHBuf->Des();
sl@0
  3658
	User::LeaveIfError(destinationFile.Read(destinationDes));
sl@0
  3659
sl@0
  3660
	// Check that the file data matches.
sl@0
  3661
	err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  3662
sl@0
  3663
	// Copy the file.
sl@0
  3664
	iCopyOfDestinationDes.Copy(destinationDes);
sl@0
  3665
sl@0
  3666
	CleanupStack::PopAndDestroy(destinationHBuf);
sl@0
  3667
	CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3668
	return err;
sl@0
  3669
	}
sl@0
  3670
sl@0
  3671
TVerdict TFileWriteBuffer5TestStep::DoNegativeTestPostambleL()
sl@0
  3672
	{
sl@0
  3673
	TInt length = iCopyOfDestinationDes.Length();
sl@0
  3674
sl@0
  3675
	// Read the file into a descriptor.
sl@0
  3676
	RFile destinationFile;
sl@0
  3677
	TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead);
sl@0
  3678
	CleanupClosePushL(destinationFile);
sl@0
  3679
	if (err != KErrNone)
sl@0
  3680
		{
sl@0
  3681
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3682
sl@0
  3683
		if (err == KErrNotFound)
sl@0
  3684
			return (length == 0) ? EPass : EFail;
sl@0
  3685
sl@0
  3686
		User::Leave(err);
sl@0
  3687
		}
sl@0
  3688
sl@0
  3689
	TInt destinationFileSize;
sl@0
  3690
	User::LeaveIfError(destinationFile.Size(destinationFileSize));
sl@0
  3691
sl@0
  3692
	// Check that the file length is correct.
sl@0
  3693
	if (destinationFileSize != length)
sl@0
  3694
		{
sl@0
  3695
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3696
		return EFail;
sl@0
  3697
		}
sl@0
  3698
sl@0
  3699
	HBufC8* destinationHBuf = HBufC8::NewLC(length);
sl@0
  3700
	TPtr8 destinationDes = destinationHBuf->Des();
sl@0
  3701
	User::LeaveIfError(destinationFile.Read(destinationDes));
sl@0
  3702
sl@0
  3703
	// Check that the file data matches.
sl@0
  3704
	err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  3705
sl@0
  3706
	CleanupStack::PopAndDestroy(destinationHBuf);
sl@0
  3707
	CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3708
	return (err == 0) ? EPass : EFail;
sl@0
  3709
	}
sl@0
  3710
sl@0
  3711
TVerdict TFileWriteBuffer6TestStep::DoTestStepL()
sl@0
  3712
	{
sl@0
  3713
	RFs fs;
sl@0
  3714
	User::LeaveIfError(fs.Connect());
sl@0
  3715
	CleanupClosePushL(fs);
sl@0
  3716
	CMMFClip* clip = static_cast<CMMFClip*>(CreateFileSinkL(iSinkType, fs, iFileName));
sl@0
  3717
	CleanupDeletePushL(clip);
sl@0
  3718
sl@0
  3719
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  3720
	User::LeaveIfError(clip->SinkThreadLogon(*dummySource));
sl@0
  3721
	clip->SinkPrimeL();
sl@0
  3722
sl@0
  3723
	RandomiseBuffer();
sl@0
  3724
	TRAPD(err, clip->WriteBufferL(iBuffer, iPosition, iSource));
sl@0
  3725
	if (err == KErrNone)
sl@0
  3726
		CActiveScheduler::Start();
sl@0
  3727
	CleanupStack::PopAndDestroy(2, &fs); // clip, fs
sl@0
  3728
sl@0
  3729
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  3730
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  3731
		return EFail;
sl@0
  3732
sl@0
  3733
	if (err != KErrNone)
sl@0
  3734
		User::Leave(err);
sl@0
  3735
sl@0
  3736
	if (!sourceBufferEmptiedOk)
sl@0
  3737
		{
sl@0
  3738
		if ((err = dummySource->Error()) != KErrNone)
sl@0
  3739
			User::Leave(err);
sl@0
  3740
sl@0
  3741
		return EFail;
sl@0
  3742
		}
sl@0
  3743
sl@0
  3744
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3745
	TInt position = iPosition;
sl@0
  3746
	TInt bufferSize = buffer->BufferSize();
sl@0
  3747
	if (position>iCopyOfDestinationDes.Length())
sl@0
  3748
		position = iCopyOfDestinationDes.Length();
sl@0
  3749
sl@0
  3750
	if ((position+bufferSize)>iCopyOfDestinationDes.Length())
sl@0
  3751
		iCopyOfDestinationDes.SetLength(position+bufferSize);
sl@0
  3752
sl@0
  3753
	iCopyOfDestinationDes.Replace(position, bufferSize, buffer->Data());
sl@0
  3754
	return EPass;
sl@0
  3755
	}
sl@0
  3756
sl@0
  3757
TVerdict TFileWriteBuffer7TestStep::DoTestStepL()
sl@0
  3758
	{
sl@0
  3759
	RFs fs;
sl@0
  3760
	User::LeaveIfError(fs.Connect());
sl@0
  3761
	CleanupClosePushL(fs);
sl@0
  3762
	CMMFClip* clip = static_cast<CMMFClip*>(CreateFileSinkL(iSinkType, fs, iFileName));
sl@0
  3763
	CleanupDeletePushL(clip);
sl@0
  3764
sl@0
  3765
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  3766
	User::LeaveIfError(clip->SinkThreadLogon(*dummySource));
sl@0
  3767
	clip->SinkPrimeL();
sl@0
  3768
sl@0
  3769
	RandomiseBuffer();
sl@0
  3770
	clip->WriteBufferL(iBuffer, iPosition);
sl@0
  3771
	CleanupStack::PopAndDestroy(2, &fs);
sl@0
  3772
sl@0
  3773
	CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3774
	TInt position = iPosition;
sl@0
  3775
	TInt bufferSize = buffer->BufferSize();
sl@0
  3776
	if (position>iCopyOfDestinationDes.Length())
sl@0
  3777
		position = iCopyOfDestinationDes.Length();
sl@0
  3778
sl@0
  3779
	if ((position+bufferSize)>iCopyOfDestinationDes.Length())
sl@0
  3780
		iCopyOfDestinationDes.SetLength(position+bufferSize);
sl@0
  3781
sl@0
  3782
	iCopyOfDestinationDes.Replace(position, bufferSize, buffer->Data());
sl@0
  3783
	return EPass;
sl@0
  3784
	}
sl@0
  3785
sl@0
  3786
TVerdict TFileWriteBuffer8TestStep::DoTestStepL()
sl@0
  3787
	{
sl@0
  3788
	RFs fs;
sl@0
  3789
	User::LeaveIfError(fs.Connect());
sl@0
  3790
	CleanupClosePushL(fs);
sl@0
  3791
	CMMFClip* clip = static_cast<CMMFClip*>(CreateFileSinkL(iSinkType, fs, iFileName));
sl@0
  3792
	CleanupDeletePushL(clip);
sl@0
  3793
sl@0
  3794
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  3795
	User::LeaveIfError(clip->SinkThreadLogon(*dummySource));
sl@0
  3796
	clip->SinkPrimeL();
sl@0
  3797
sl@0
  3798
	RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  3799
	TInt maxRequestCount = Min(iMaxRequestCount, bufferArray.Count());
sl@0
  3800
	iPosition = 0;
sl@0
  3801
sl@0
  3802
	TInt requestCount;
sl@0
  3803
	for (requestCount = 0; requestCount < maxRequestCount; requestCount++)
sl@0
  3804
		{
sl@0
  3805
		iBuffer = bufferArray[requestCount];
sl@0
  3806
		RandomiseBuffer();
sl@0
  3807
sl@0
  3808
		TRAPD(err, clip->WriteBufferL(iWriteLength, iBuffer, iPosition, iSource));
sl@0
  3809
		if (err != KErrNone)
sl@0
  3810
			{
sl@0
  3811
			break;
sl@0
  3812
			}
sl@0
  3813
sl@0
  3814
		iPosition += iWriteLength;
sl@0
  3815
		}
sl@0
  3816
sl@0
  3817
	if (requestCount)
sl@0
  3818
		{
sl@0
  3819
		dummySource->SetExpectedEmptyCount(requestCount);
sl@0
  3820
		CActiveScheduler::Start();
sl@0
  3821
		}
sl@0
  3822
sl@0
  3823
	CleanupStack::PopAndDestroy(2, &fs);
sl@0
  3824
sl@0
  3825
	if (dummySource->ErrorCount())
sl@0
  3826
		{
sl@0
  3827
		User::Leave(dummySource->Error());
sl@0
  3828
		}
sl@0
  3829
sl@0
  3830
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  3831
	if (!requestCount && sourceBufferEmptiedOk)
sl@0
  3832
		{
sl@0
  3833
		return EFail;
sl@0
  3834
		}
sl@0
  3835
sl@0
  3836
	iPosition = 0;
sl@0
  3837
	TInt completionCount;
sl@0
  3838
	for (completionCount = 0; completionCount < requestCount; completionCount++)
sl@0
  3839
		{
sl@0
  3840
		iBuffer = bufferArray[completionCount];
sl@0
  3841
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3842
		TInt writeLength = buffer->BufferSize();
sl@0
  3843
		if (writeLength != iWriteLength)
sl@0
  3844
			{
sl@0
  3845
			return EFail;
sl@0
  3846
			}
sl@0
  3847
sl@0
  3848
		if ((iPosition + iWriteLength) > iCopyOfDestinationDes.Length())
sl@0
  3849
			{
sl@0
  3850
			iCopyOfDestinationDes.SetLength(iPosition + iWriteLength);
sl@0
  3851
			}
sl@0
  3852
sl@0
  3853
		TPtrC8 bufferData(buffer->Data().Ptr(), writeLength);
sl@0
  3854
		iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3855
		iPosition += writeLength;
sl@0
  3856
		}
sl@0
  3857
sl@0
  3858
	return EPass;
sl@0
  3859
	}
sl@0
  3860
sl@0
  3861
TVerdict TFileWriteBuffer9TestStep::DoTestStepL()
sl@0
  3862
	{
sl@0
  3863
	RFs fs;
sl@0
  3864
	User::LeaveIfError(fs.Connect());
sl@0
  3865
	CleanupClosePushL(fs);
sl@0
  3866
	CMMFClip* clip = static_cast<CMMFClip*>(CreateFileSinkL(iSinkType, fs, iFileName));
sl@0
  3867
	CleanupDeletePushL(clip);
sl@0
  3868
sl@0
  3869
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  3870
	User::LeaveIfError(clip->SinkThreadLogon(*dummySource));
sl@0
  3871
	clip->SinkPrimeL();
sl@0
  3872
sl@0
  3873
	RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  3874
	TInt maxRequestCount = Min(iMaxRequestCount, bufferArray.Count());
sl@0
  3875
	iPosition = 0;
sl@0
  3876
sl@0
  3877
	TInt requestCount;
sl@0
  3878
	for (requestCount = 0; requestCount < maxRequestCount; requestCount++)
sl@0
  3879
		{
sl@0
  3880
		iBuffer = bufferArray[requestCount];
sl@0
  3881
		RandomiseBuffer();
sl@0
  3882
sl@0
  3883
		TRAPD(err, clip->WriteBufferL(iBuffer, iPosition, iSource));
sl@0
  3884
		if (err != KErrNone)
sl@0
  3885
			{
sl@0
  3886
			break;
sl@0
  3887
			}
sl@0
  3888
sl@0
  3889
		iPosition += iWriteLength;
sl@0
  3890
		}
sl@0
  3891
sl@0
  3892
	if (requestCount)
sl@0
  3893
		{
sl@0
  3894
		dummySource->SetExpectedEmptyCount(requestCount);
sl@0
  3895
		CActiveScheduler::Start();
sl@0
  3896
		}
sl@0
  3897
sl@0
  3898
	CleanupStack::PopAndDestroy(2, &fs);
sl@0
  3899
sl@0
  3900
	if (dummySource->ErrorCount())
sl@0
  3901
		{
sl@0
  3902
		User::LeaveIfError(dummySource->Error());
sl@0
  3903
		}
sl@0
  3904
sl@0
  3905
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  3906
	if (!requestCount && sourceBufferEmptiedOk)
sl@0
  3907
		{
sl@0
  3908
		return EFail;
sl@0
  3909
		}
sl@0
  3910
sl@0
  3911
	iPosition = 0;
sl@0
  3912
	TInt completionCount;
sl@0
  3913
	for (completionCount = 0; completionCount < requestCount; completionCount++)
sl@0
  3914
		{
sl@0
  3915
		iBuffer = bufferArray[completionCount];
sl@0
  3916
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  3917
		TInt writeLength = buffer->BufferSize();
sl@0
  3918
		if (writeLength != iWriteLength)
sl@0
  3919
			{
sl@0
  3920
			return EFail;
sl@0
  3921
			}
sl@0
  3922
sl@0
  3923
		if ((iPosition + iWriteLength) > iCopyOfDestinationDes.Length())
sl@0
  3924
			{
sl@0
  3925
			iCopyOfDestinationDes.SetLength(iPosition + iWriteLength);
sl@0
  3926
			}
sl@0
  3927
sl@0
  3928
		TPtrC8 bufferData(buffer->Data().Ptr(), writeLength);
sl@0
  3929
		iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3930
		iPosition += iWriteLength;
sl@0
  3931
		}
sl@0
  3932
sl@0
  3933
	return EPass;
sl@0
  3934
	}
sl@0
  3935
sl@0
  3936
TInt TFileWriteBuffer10TestStep::CheckDestinationL()
sl@0
  3937
	{
sl@0
  3938
	TInt length = iCopyOfDestinationDes.Length();
sl@0
  3939
sl@0
  3940
	// Read the file into a descriptor.
sl@0
  3941
	RFile destinationFile;
sl@0
  3942
	TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead|EFileShareAny);
sl@0
  3943
	CleanupClosePushL(destinationFile);
sl@0
  3944
	if (err != KErrNone)
sl@0
  3945
		{
sl@0
  3946
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3947
sl@0
  3948
		if (err == KErrNotFound)
sl@0
  3949
			return (length != 0) ? -1 : 0;
sl@0
  3950
sl@0
  3951
		User::Leave(err);
sl@0
  3952
		}
sl@0
  3953
sl@0
  3954
	TInt destinationFileSize;
sl@0
  3955
	User::LeaveIfError(destinationFile.Size(destinationFileSize));
sl@0
  3956
sl@0
  3957
	// Check that the file length is correct.
sl@0
  3958
	if (destinationFileSize != length)
sl@0
  3959
		{
sl@0
  3960
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  3961
		return -1;
sl@0
  3962
		}
sl@0
  3963
sl@0
  3964
	HBufC8* destinationHBuf = HBufC8::NewLC(length);
sl@0
  3965
	TPtr8 destinationDes = destinationHBuf->Des();
sl@0
  3966
	User::LeaveIfError(destinationFile.Read(destinationDes));
sl@0
  3967
sl@0
  3968
	// Check that the file data matches.
sl@0
  3969
	err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  3970
	if (err != 0)
sl@0
  3971
		{
sl@0
  3972
		// At least one of the remaining two writes was completed.
sl@0
  3973
		RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  3974
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[3]);
sl@0
  3975
		TInt writeLength = buffer->BufferSize();
sl@0
  3976
		if (writeLength != iWriteLength)
sl@0
  3977
			return EFail;
sl@0
  3978
sl@0
  3979
		TPtrC8 bufferData(buffer->Data().Ptr(), writeLength);
sl@0
  3980
		iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3981
		err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  3982
sl@0
  3983
		if (err != 0)
sl@0
  3984
			{
sl@0
  3985
			iPosition += iWriteLength;
sl@0
  3986
sl@0
  3987
			buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[4]);
sl@0
  3988
			writeLength = buffer->BufferSize();
sl@0
  3989
			if (writeLength != iWriteLength)
sl@0
  3990
				return EFail;
sl@0
  3991
sl@0
  3992
			bufferData.Set(buffer->Data().Ptr(), writeLength);
sl@0
  3993
			iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  3994
sl@0
  3995
			err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  3996
			}
sl@0
  3997
		}
sl@0
  3998
sl@0
  3999
	CleanupStack::PopAndDestroy(destinationHBuf);
sl@0
  4000
	CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  4001
sl@0
  4002
	return err;
sl@0
  4003
	}
sl@0
  4004
sl@0
  4005
TInt TFileWriteBuffer11TestStep::CheckDestinationL()
sl@0
  4006
	{
sl@0
  4007
	TInt length = iCopyOfDestinationDes.Length();
sl@0
  4008
sl@0
  4009
	// Read the file into a descriptor.
sl@0
  4010
	RFile destinationFile;
sl@0
  4011
	TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead | EFileShareAny);
sl@0
  4012
	CleanupClosePushL(destinationFile);
sl@0
  4013
	if (err != KErrNone)
sl@0
  4014
		{
sl@0
  4015
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  4016
sl@0
  4017
		if (err == KErrNotFound)
sl@0
  4018
			return (length != 0) ? -1 : 0;
sl@0
  4019
sl@0
  4020
		User::Leave(err);
sl@0
  4021
		}
sl@0
  4022
sl@0
  4023
	TInt destinationFileSize;
sl@0
  4024
	User::LeaveIfError(destinationFile.Size(destinationFileSize));
sl@0
  4025
sl@0
  4026
	// Check that the file length is correct.
sl@0
  4027
	if (destinationFileSize != length)
sl@0
  4028
		{
sl@0
  4029
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  4030
		return -1;
sl@0
  4031
		}
sl@0
  4032
sl@0
  4033
	HBufC8* destinationHBuf = HBufC8::NewLC(length);
sl@0
  4034
	TPtr8 destinationDes = destinationHBuf->Des();
sl@0
  4035
	User::LeaveIfError(destinationFile.Read(destinationDes));
sl@0
  4036
sl@0
  4037
	// Check that the file data matches.
sl@0
  4038
	err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  4039
	if (err != 0)
sl@0
  4040
		{
sl@0
  4041
		// At least one of the remaining two writes was completed.
sl@0
  4042
		RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  4043
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[3]);
sl@0
  4044
		TInt writeLength = buffer->BufferSize();
sl@0
  4045
		if (writeLength != iWriteLength)
sl@0
  4046
			return EFail;
sl@0
  4047
sl@0
  4048
		TPtrC8 bufferData(buffer->Data().Ptr(), writeLength);
sl@0
  4049
		iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  4050
		err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  4051
sl@0
  4052
		if (err != 0)
sl@0
  4053
			{
sl@0
  4054
			iPosition += iWriteLength;
sl@0
  4055
sl@0
  4056
			buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[4]);
sl@0
  4057
			writeLength = buffer->BufferSize();
sl@0
  4058
			if (writeLength != iWriteLength)
sl@0
  4059
				return EFail;
sl@0
  4060
sl@0
  4061
			bufferData.Set(buffer->Data().Ptr(), writeLength);
sl@0
  4062
			iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  4063
sl@0
  4064
			err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  4065
			}
sl@0
  4066
		}
sl@0
  4067
sl@0
  4068
	CleanupStack::PopAndDestroy(destinationHBuf);
sl@0
  4069
	CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  4070
sl@0
  4071
	return err;
sl@0
  4072
	}
sl@0
  4073
sl@0
  4074
TVerdict TFileWriteBuffer12TestStep::DoTestStepL()
sl@0
  4075
	{
sl@0
  4076
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink);
sl@0
  4077
sl@0
  4078
	RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  4079
	TInt maxRequestCount = bufferArray.Count();
sl@0
  4080
	TInt err = KErrNone;
sl@0
  4081
	iPosition = 0;
sl@0
  4082
sl@0
  4083
	TInt requestCount;
sl@0
  4084
	for (requestCount = 0 ; requestCount<maxRequestCount ; requestCount++)
sl@0
  4085
		{
sl@0
  4086
		iBuffer = bufferArray[requestCount];
sl@0
  4087
		RandomiseBuffer();
sl@0
  4088
sl@0
  4089
		TRAPD(err, clip->WriteBufferL(iWriteLength, iBuffer, iPosition, iSource));
sl@0
  4090
		if (err != KErrNone)
sl@0
  4091
			break;
sl@0
  4092
sl@0
  4093
		iPosition += iWriteLength;
sl@0
  4094
		}
sl@0
  4095
sl@0
  4096
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  4097
	if (requestCount)
sl@0
  4098
		{
sl@0
  4099
		if (requestCount>iMaxRequestCount)
sl@0
  4100
			requestCount = iMaxRequestCount;
sl@0
  4101
sl@0
  4102
		dummySource->SetExpectedEmptyCount(requestCount);
sl@0
  4103
		CActiveScheduler::Start();
sl@0
  4104
		}
sl@0
  4105
sl@0
  4106
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  4107
	if (!requestCount && sourceBufferEmptiedOk)
sl@0
  4108
		return EFail;
sl@0
  4109
sl@0
  4110
	if (!sourceBufferEmptiedOk && requestCount)
sl@0
  4111
		{
sl@0
  4112
		requestCount-= dummySource->ErrorCount();
sl@0
  4113
		err = dummySource->Error();
sl@0
  4114
sl@0
  4115
		if (err == KErrNone)
sl@0
  4116
			return EFail;
sl@0
  4117
		}
sl@0
  4118
sl@0
  4119
	iPosition = 0;
sl@0
  4120
	TInt completionCount;
sl@0
  4121
	for (completionCount = 0 ; completionCount<requestCount ; completionCount++)
sl@0
  4122
		{
sl@0
  4123
		iBuffer = bufferArray[completionCount];
sl@0
  4124
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  4125
		TInt writeLength = buffer->BufferSize();
sl@0
  4126
		if (writeLength != iWriteLength)
sl@0
  4127
			return EFail;
sl@0
  4128
sl@0
  4129
		if ((iPosition+iWriteLength)>iCopyOfDestinationDes.Length())
sl@0
  4130
			iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  4131
sl@0
  4132
		TPtrC8 bufferData(buffer->Data().Ptr(), writeLength);
sl@0
  4133
		iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  4134
		iPosition += iWriteLength;
sl@0
  4135
		}
sl@0
  4136
sl@0
  4137
	if (err != KErrNone)
sl@0
  4138
		User::Leave(err);
sl@0
  4139
sl@0
  4140
	clip->WriteBufferL(iWriteLength, bufferArray[0], iPosition + 2*iWriteLength, iSource);
sl@0
  4141
	return EPass;
sl@0
  4142
	}
sl@0
  4143
sl@0
  4144
TInt TFileWriteBuffer12TestStep::CheckDestinationL()
sl@0
  4145
	{
sl@0
  4146
	TInt length = iCopyOfDestinationDes.Length();
sl@0
  4147
sl@0
  4148
	// Read the file into a descriptor.
sl@0
  4149
	RFile destinationFile;
sl@0
  4150
	TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead |EFileShareAny);
sl@0
  4151
	CleanupClosePushL(destinationFile);
sl@0
  4152
	if (err != KErrNone)
sl@0
  4153
		{
sl@0
  4154
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  4155
sl@0
  4156
		if (err == KErrNotFound)
sl@0
  4157
			return (length != 0) ? -1 : 0;
sl@0
  4158
sl@0
  4159
		User::Leave(err);
sl@0
  4160
		}
sl@0
  4161
sl@0
  4162
	TInt destinationFileSize;
sl@0
  4163
	User::LeaveIfError(destinationFile.Size(destinationFileSize));
sl@0
  4164
sl@0
  4165
	// Check that the file length is correct.
sl@0
  4166
	if (destinationFileSize != length)
sl@0
  4167
		{
sl@0
  4168
		if (destinationFileSize != (length + iWriteLength))
sl@0
  4169
			{
sl@0
  4170
			CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  4171
			return -1;
sl@0
  4172
			}
sl@0
  4173
		}
sl@0
  4174
sl@0
  4175
	HBufC8* destinationHBuf = HBufC8::NewLC(destinationFileSize);
sl@0
  4176
	TPtr8 destinationDes = destinationHBuf->Des();
sl@0
  4177
	User::LeaveIfError(destinationFile.Read(destinationDes));
sl@0
  4178
sl@0
  4179
	// Check that the file data matches.
sl@0
  4180
	err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  4181
	if (err != 0)
sl@0
  4182
		{
sl@0
  4183
		// At least one of the remaining three writes was completed.
sl@0
  4184
		RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  4185
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[3]);
sl@0
  4186
		TInt writeLength = buffer->BufferSize();
sl@0
  4187
		if (writeLength != iWriteLength)
sl@0
  4188
			return EFail;
sl@0
  4189
sl@0
  4190
		TPtrC8 bufferData(buffer->Data().Ptr(), writeLength);
sl@0
  4191
		iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  4192
		err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  4193
		if (err != 0)
sl@0
  4194
			{
sl@0
  4195
			iPosition += iWriteLength;
sl@0
  4196
sl@0
  4197
			buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[4]);
sl@0
  4198
			writeLength = buffer->BufferSize();
sl@0
  4199
			if (writeLength != iWriteLength)
sl@0
  4200
				return EFail;
sl@0
  4201
sl@0
  4202
			bufferData.Set(buffer->Data().Ptr(), writeLength);
sl@0
  4203
			iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  4204
sl@0
  4205
			err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  4206
			if (err != 0)
sl@0
  4207
				return EFail;
sl@0
  4208
sl@0
  4209
			iPosition += iWriteLength;
sl@0
  4210
			if ((iPosition+iWriteLength)<=iCopyOfDestinationDes.Length())
sl@0
  4211
				return EFail;
sl@0
  4212
			iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  4213
			length = iPosition+iWriteLength;
sl@0
  4214
sl@0
  4215
			buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[0]);
sl@0
  4216
			bufferData.Set(buffer->Data().Ptr(), iWriteLength);
sl@0
  4217
sl@0
  4218
			iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  4219
			err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  4220
			}
sl@0
  4221
		}
sl@0
  4222
sl@0
  4223
	CleanupStack::PopAndDestroy(destinationHBuf);
sl@0
  4224
	CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  4225
	return err;
sl@0
  4226
	}
sl@0
  4227
sl@0
  4228
TVerdict TFileWriteBuffer13TestStep::DoTestStepL()
sl@0
  4229
	{
sl@0
  4230
	CMMFClip* clip = STATIC_CAST(CMMFClip*, iSink);
sl@0
  4231
sl@0
  4232
	RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  4233
	TInt maxRequestCount = bufferArray.Count();
sl@0
  4234
	TInt err = KErrNone;
sl@0
  4235
	iPosition = 0;
sl@0
  4236
sl@0
  4237
	TInt requestCount;
sl@0
  4238
	for (requestCount = 0 ; requestCount<maxRequestCount ; requestCount++)
sl@0
  4239
		{
sl@0
  4240
		iBuffer = bufferArray[requestCount];
sl@0
  4241
		RandomiseBuffer();
sl@0
  4242
sl@0
  4243
		TRAPD(err, clip->WriteBufferL(iBuffer, iPosition, iSource));
sl@0
  4244
		if (err != KErrNone)
sl@0
  4245
			break;
sl@0
  4246
sl@0
  4247
		iPosition += iWriteLength;
sl@0
  4248
		}
sl@0
  4249
sl@0
  4250
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  4251
	if (requestCount)
sl@0
  4252
		{
sl@0
  4253
		if (requestCount>iMaxRequestCount)
sl@0
  4254
			requestCount = iMaxRequestCount;
sl@0
  4255
sl@0
  4256
		dummySource->SetExpectedEmptyCount(requestCount);
sl@0
  4257
		CActiveScheduler::Start();
sl@0
  4258
		}
sl@0
  4259
sl@0
  4260
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  4261
	if (!requestCount && sourceBufferEmptiedOk)
sl@0
  4262
		return EFail;
sl@0
  4263
sl@0
  4264
	if (!sourceBufferEmptiedOk && requestCount)
sl@0
  4265
		{
sl@0
  4266
		requestCount-= dummySource->ErrorCount();
sl@0
  4267
		err = dummySource->Error();
sl@0
  4268
sl@0
  4269
		if (err == KErrNone)
sl@0
  4270
			return EFail;
sl@0
  4271
		}
sl@0
  4272
sl@0
  4273
	iPosition = 0;
sl@0
  4274
	TInt completionCount;
sl@0
  4275
	for (completionCount = 0 ; completionCount<requestCount ; completionCount++)
sl@0
  4276
		{
sl@0
  4277
		iBuffer = bufferArray[completionCount];
sl@0
  4278
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, iBuffer);
sl@0
  4279
		TInt writeLength = buffer->BufferSize();
sl@0
  4280
		if (writeLength != iWriteLength)
sl@0
  4281
			return EFail;
sl@0
  4282
sl@0
  4283
		if ((iPosition+iWriteLength)>iCopyOfDestinationDes.Length())
sl@0
  4284
			iCopyOfDestinationDes.SetLength(iPosition+iWriteLength);
sl@0
  4285
sl@0
  4286
		TPtrC8 bufferData(buffer->Data().Ptr(), writeLength);
sl@0
  4287
		iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  4288
sl@0
  4289
		iPosition += iWriteLength;
sl@0
  4290
		}
sl@0
  4291
sl@0
  4292
	if (err != KErrNone)
sl@0
  4293
		User::Leave(err);
sl@0
  4294
sl@0
  4295
	clip->WriteBufferL(bufferArray[0], iPosition + 2*iWriteLength, iSource);
sl@0
  4296
	return EPass;
sl@0
  4297
	}
sl@0
  4298
sl@0
  4299
TInt TFileWriteBuffer13TestStep::CheckDestinationL()
sl@0
  4300
	{
sl@0
  4301
	TInt length = iCopyOfDestinationDes.Length();
sl@0
  4302
sl@0
  4303
	// Read the file into a descriptor.
sl@0
  4304
	RFile destinationFile;
sl@0
  4305
	TInt err = destinationFile.Open(iFsSession, iDestinationFileName, EFileRead | EFileShareAny);
sl@0
  4306
	CleanupClosePushL(destinationFile);
sl@0
  4307
	if (err != KErrNone)
sl@0
  4308
		{
sl@0
  4309
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  4310
sl@0
  4311
		if (err == KErrNotFound)
sl@0
  4312
			return (length != 0) ? -1 : 0;
sl@0
  4313
sl@0
  4314
		User::Leave(err);
sl@0
  4315
		}
sl@0
  4316
sl@0
  4317
	TInt destinationFileSize;
sl@0
  4318
	User::LeaveIfError(destinationFile.Size(destinationFileSize));
sl@0
  4319
sl@0
  4320
	// Check that the file length is correct.
sl@0
  4321
	if (destinationFileSize != length)
sl@0
  4322
		{
sl@0
  4323
		CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  4324
		return -1;
sl@0
  4325
		}
sl@0
  4326
sl@0
  4327
	HBufC8* destinationHBuf = HBufC8::NewLC(destinationFileSize);
sl@0
  4328
	TPtr8 destinationDes = destinationHBuf->Des();
sl@0
  4329
	User::LeaveIfError(destinationFile.Read(destinationDes));
sl@0
  4330
sl@0
  4331
	// Check that the file data matches.
sl@0
  4332
	err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  4333
	if (err != 0)
sl@0
  4334
		{
sl@0
  4335
		// At least one of the remaining three writes was completed.
sl@0
  4336
		RPointerArray<CMMFBuffer>& bufferArray = *iBufferArray;
sl@0
  4337
		CMMFDataBuffer* buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[3]);
sl@0
  4338
		TInt writeLength = buffer->BufferSize();
sl@0
  4339
		if (writeLength != iWriteLength)
sl@0
  4340
			return EFail;
sl@0
  4341
sl@0
  4342
		TPtrC8 bufferData(buffer->Data().Ptr(), writeLength);
sl@0
  4343
		iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  4344
		err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  4345
		if (err != 0)
sl@0
  4346
			{
sl@0
  4347
			iPosition += iWriteLength;
sl@0
  4348
sl@0
  4349
			buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[4]);
sl@0
  4350
			writeLength = buffer->BufferSize();
sl@0
  4351
			if (writeLength != iWriteLength)
sl@0
  4352
				return EFail;
sl@0
  4353
sl@0
  4354
			bufferData.Set(buffer->Data().Ptr(), writeLength);
sl@0
  4355
			iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  4356
sl@0
  4357
			err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  4358
			if (err != 0)
sl@0
  4359
				{
sl@0
  4360
				iPosition += iWriteLength;
sl@0
  4361
sl@0
  4362
				buffer = STATIC_CAST(CMMFDataBuffer*, bufferArray[0]);
sl@0
  4363
				writeLength = buffer->BufferSize();
sl@0
  4364
				if (writeLength != iWriteLength)
sl@0
  4365
					return EFail;
sl@0
  4366
sl@0
  4367
				bufferData.Set(buffer->Data().Ptr(), writeLength);
sl@0
  4368
				iCopyOfDestinationDes.Replace(iPosition, iWriteLength, bufferData);
sl@0
  4369
sl@0
  4370
				err = Mem::Compare(destinationDes.Ptr(), length, iCopyOfDestinationDes.Ptr(), length);
sl@0
  4371
				}
sl@0
  4372
			}
sl@0
  4373
		}
sl@0
  4374
sl@0
  4375
	CleanupStack::PopAndDestroy(destinationHBuf);
sl@0
  4376
	CleanupStack::PopAndDestroy(&destinationFile);
sl@0
  4377
	return err;
sl@0
  4378
	}
sl@0
  4379
sl@0
  4380
sl@0
  4381
TVerdict TAudioInputCreateSourceBuffer1TestStep::DoTestStepL()
sl@0
  4382
	{
sl@0
  4383
	CMMFAudioInput* source = STATIC_CAST(CMMFAudioInput*, iSource);
sl@0
  4384
sl@0
  4385
	TMediaId mediaId;
sl@0
  4386
	CMMFBuffer* buffer = source->CreateSourceBufferL(mediaId);
sl@0
  4387
sl@0
  4388
	TVerdict result = EPass;
sl@0
  4389
	if (buffer->Type() != KUidMmfDescriptorBuffer)
sl@0
  4390
		result = EFail;
sl@0
  4391
sl@0
  4392
	if (buffer->Status() != EAvailable)
sl@0
  4393
		result = EFail;
sl@0
  4394
sl@0
  4395
	CMMFDescriptorBuffer* descriptorBuffer = STATIC_CAST(CMMFDescriptorBuffer*, buffer);
sl@0
  4396
	if (descriptorBuffer->Data().MaxLength() != (TInt)KAudioInputDefaultFrameSize)
sl@0
  4397
		result = EFail;
sl@0
  4398
sl@0
  4399
	delete buffer;
sl@0
  4400
	return result;
sl@0
  4401
	}
sl@0
  4402
sl@0
  4403
TVerdict TAudioInputCreateSourceBuffer2TestStep::DoTestStepL()
sl@0
  4404
	{
sl@0
  4405
	CMMFAudioInput* source = STATIC_CAST(CMMFAudioInput*, iSource);
sl@0
  4406
sl@0
  4407
	TMediaId mediaId;
sl@0
  4408
	CMMFBuffer* buffer = source->CreateSourceBufferL(mediaId, *iSinkBuffer);
sl@0
  4409
sl@0
  4410
	TVerdict result = EPass;
sl@0
  4411
	if (buffer->Type() != KUidMmfDescriptorBuffer)
sl@0
  4412
		result = EFail;
sl@0
  4413
sl@0
  4414
	if (buffer->Status() != EAvailable)
sl@0
  4415
		result = EFail;
sl@0
  4416
sl@0
  4417
	CMMFDescriptorBuffer* descriptorBuffer = STATIC_CAST(CMMFDescriptorBuffer*, buffer);
sl@0
  4418
	if (descriptorBuffer->Data().MaxLength() != (TInt)KAudioInputDefaultFrameSize)
sl@0
  4419
		result = EFail;
sl@0
  4420
sl@0
  4421
	delete buffer;
sl@0
  4422
	return result;
sl@0
  4423
	}
sl@0
  4424
sl@0
  4425
TVerdict TAudioInputFillBufferTestStep::DoTestStepL()
sl@0
  4426
	{
sl@0
  4427
	TMediaId mediaId;
sl@0
  4428
	TRAPD(err, iSource->FillBufferL(iBuffer, iSink, mediaId));	// first call inits
sl@0
  4429
sl@0
  4430
	if (err == KErrNone)
sl@0
  4431
		CActiveScheduler::Start();
sl@0
  4432
sl@0
  4433
	TRAP(err, iSource->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4434
sl@0
  4435
	if (err == KErrNone)
sl@0
  4436
		CActiveScheduler::Start();
sl@0
  4437
sl@0
  4438
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  4439
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  4440
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  4441
		return EFail;
sl@0
  4442
sl@0
  4443
	if (err != KErrNone)
sl@0
  4444
		User::Leave(err);
sl@0
  4445
sl@0
  4446
	if (!sinkBufferFilledOk)
sl@0
  4447
		{
sl@0
  4448
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  4449
			User::Leave(err);
sl@0
  4450
sl@0
  4451
		return EFail;
sl@0
  4452
		}
sl@0
  4453
sl@0
  4454
	return EPass;
sl@0
  4455
	}
sl@0
  4456
sl@0
  4457
TVerdict TAudioInputFillBuffer2TestStep::DoTestStepL()
sl@0
  4458
	{
sl@0
  4459
	TMediaId mediaId;
sl@0
  4460
	TRAPD(err, iSource->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4461
	if (err == KErrNone)
sl@0
  4462
		CActiveScheduler::Start();
sl@0
  4463
sl@0
  4464
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  4465
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  4466
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  4467
		return EFail;
sl@0
  4468
sl@0
  4469
	if (err != KErrNone)
sl@0
  4470
		User::Leave(err);
sl@0
  4471
sl@0
  4472
	if (!sinkBufferFilledOk)
sl@0
  4473
		{
sl@0
  4474
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  4475
			User::Leave(err);
sl@0
  4476
sl@0
  4477
		return EFail;
sl@0
  4478
		}
sl@0
  4479
sl@0
  4480
	TRAP(err, iSource->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4481
	if (err == KErrNone)
sl@0
  4482
		CActiveScheduler::Start();
sl@0
  4483
sl@0
  4484
	sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  4485
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  4486
		return EFail;
sl@0
  4487
sl@0
  4488
	if (err != KErrNone)
sl@0
  4489
		User::Leave(err);
sl@0
  4490
sl@0
  4491
	if (!sinkBufferFilledOk)
sl@0
  4492
		{
sl@0
  4493
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  4494
			User::Leave(err);
sl@0
  4495
sl@0
  4496
		return EFail;
sl@0
  4497
		}
sl@0
  4498
sl@0
  4499
	TRAP(err, iSource->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4500
	if (err == KErrNone)
sl@0
  4501
		CActiveScheduler::Start();
sl@0
  4502
sl@0
  4503
	sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  4504
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  4505
		return EFail;
sl@0
  4506
sl@0
  4507
	if (err != KErrNone)
sl@0
  4508
		User::Leave(err);
sl@0
  4509
sl@0
  4510
	if (!sinkBufferFilledOk)
sl@0
  4511
		{
sl@0
  4512
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  4513
			User::Leave(err);
sl@0
  4514
sl@0
  4515
		return EFail;
sl@0
  4516
		}
sl@0
  4517
sl@0
  4518
	return EPass;
sl@0
  4519
	}
sl@0
  4520
sl@0
  4521
TVerdict TAudioInputFillBuffer3TestStep::DoTestStepL()
sl@0
  4522
	{
sl@0
  4523
	TMediaId mediaId;
sl@0
  4524
	TInt requestCount = 0;
sl@0
  4525
	TRAPD(err, iSource->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4526
	if (err == KErrNone)
sl@0
  4527
		{
sl@0
  4528
		requestCount++;
sl@0
  4529
		TRAP(err, iSource->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4530
		if (err == KErrNone)
sl@0
  4531
			{
sl@0
  4532
			requestCount++;
sl@0
  4533
			TRAP(err, iSource->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4534
			}
sl@0
  4535
		}
sl@0
  4536
sl@0
  4537
	if (err == KErrNone)
sl@0
  4538
		requestCount++;
sl@0
  4539
sl@0
  4540
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  4541
	if (requestCount)
sl@0
  4542
		{
sl@0
  4543
		dummySink->SetExpectedFillCount(requestCount);
sl@0
  4544
		CActiveScheduler::Start();
sl@0
  4545
		}
sl@0
  4546
sl@0
  4547
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  4548
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  4549
		return EFail;
sl@0
  4550
sl@0
  4551
	if (err != KErrNone)
sl@0
  4552
		User::Leave(err);
sl@0
  4553
sl@0
  4554
	if (!sinkBufferFilledOk)
sl@0
  4555
		{
sl@0
  4556
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  4557
			User::Leave(err);
sl@0
  4558
sl@0
  4559
		return EFail;
sl@0
  4560
		}
sl@0
  4561
sl@0
  4562
	return EPass;
sl@0
  4563
	}
sl@0
  4564
sl@0
  4565
TVerdict TAudioInputFillBuffer4TestStep::DoTestStepL()
sl@0
  4566
	{
sl@0
  4567
	TBuf8<1> configDes;
sl@0
  4568
	MDataSource* source = STATIC_CAST(MDataSource*, MDataSource::NewSourceL(KUidMmfAudioInput, configDes));
sl@0
  4569
	CleanupDeletePushL(source);
sl@0
  4570
sl@0
  4571
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  4572
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  4573
	source->NegotiateSourceL(*dummySink);
sl@0
  4574
	source->SourcePrimeL();
sl@0
  4575
sl@0
  4576
	TMediaId mediaId;
sl@0
  4577
	TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4578
	if (err == KErrNone)
sl@0
  4579
		CActiveScheduler::Start();
sl@0
  4580
	CleanupStack::PopAndDestroy(source);
sl@0
  4581
sl@0
  4582
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  4583
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  4584
		return EFail;
sl@0
  4585
sl@0
  4586
	if (err != KErrNone)
sl@0
  4587
		User::Leave(err);
sl@0
  4588
sl@0
  4589
	if (!sinkBufferFilledOk)
sl@0
  4590
		{
sl@0
  4591
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  4592
			User::Leave(err);
sl@0
  4593
sl@0
  4594
		return EFail;
sl@0
  4595
		}
sl@0
  4596
sl@0
  4597
	return EPass;
sl@0
  4598
	}
sl@0
  4599
sl@0
  4600
TVerdict TAudioInputFillBuffer5TestStep::DoTestStepL()
sl@0
  4601
	{
sl@0
  4602
	TBuf8<1> configDes;
sl@0
  4603
	MDataSource* source = STATIC_CAST(MDataSource*, MDataSource::NewSourceL(KUidMmfAudioInput, configDes));
sl@0
  4604
	CleanupDeletePushL(source);
sl@0
  4605
sl@0
  4606
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  4607
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  4608
	source->NegotiateSourceL(*dummySink);
sl@0
  4609
	source->SourcePrimeL();
sl@0
  4610
sl@0
  4611
	TMediaId mediaId;
sl@0
  4612
	TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4613
	if (err == KErrNone)
sl@0
  4614
		CActiveScheduler::Start();
sl@0
  4615
sl@0
  4616
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  4617
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  4618
		{
sl@0
  4619
		CleanupStack::PopAndDestroy(source);
sl@0
  4620
		return EFail;
sl@0
  4621
		}
sl@0
  4622
sl@0
  4623
	if (err != KErrNone)
sl@0
  4624
		User::Leave(err);
sl@0
  4625
sl@0
  4626
	if (!sinkBufferFilledOk)
sl@0
  4627
		{
sl@0
  4628
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  4629
			User::Leave(err);
sl@0
  4630
sl@0
  4631
		CleanupStack::PopAndDestroy(source);
sl@0
  4632
		return EFail;
sl@0
  4633
		}
sl@0
  4634
sl@0
  4635
	TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4636
	if (err == KErrNone)
sl@0
  4637
		CActiveScheduler::Start();
sl@0
  4638
sl@0
  4639
	sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  4640
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  4641
		{
sl@0
  4642
		CleanupStack::PopAndDestroy(source);
sl@0
  4643
		return EFail;
sl@0
  4644
		}
sl@0
  4645
sl@0
  4646
	if (err != KErrNone)
sl@0
  4647
		User::Leave(err);
sl@0
  4648
sl@0
  4649
	if (!sinkBufferFilledOk)
sl@0
  4650
		{
sl@0
  4651
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  4652
			User::Leave(err);
sl@0
  4653
sl@0
  4654
		CleanupStack::PopAndDestroy(source);
sl@0
  4655
		return EFail;
sl@0
  4656
		}
sl@0
  4657
sl@0
  4658
	TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4659
	if (err == KErrNone)
sl@0
  4660
		CActiveScheduler::Start();
sl@0
  4661
sl@0
  4662
	sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  4663
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  4664
		{
sl@0
  4665
		CleanupStack::PopAndDestroy(source);
sl@0
  4666
		return EFail;
sl@0
  4667
		}
sl@0
  4668
sl@0
  4669
	if (err != KErrNone)
sl@0
  4670
		User::Leave(err);
sl@0
  4671
sl@0
  4672
	if (!sinkBufferFilledOk)
sl@0
  4673
		{
sl@0
  4674
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  4675
			User::Leave(err);
sl@0
  4676
sl@0
  4677
		CleanupStack::PopAndDestroy(source);
sl@0
  4678
		return EFail;
sl@0
  4679
		}
sl@0
  4680
sl@0
  4681
	CleanupStack::PopAndDestroy(source);
sl@0
  4682
	return EPass;
sl@0
  4683
	}
sl@0
  4684
sl@0
  4685
TVerdict TAudioInputFillBuffer6TestStep::DoTestStepL()
sl@0
  4686
	{
sl@0
  4687
	TBuf8<1> configDes;
sl@0
  4688
	MDataSource* source = STATIC_CAST(MDataSource*, MDataSource::NewSourceL(KUidMmfAudioInput, configDes));
sl@0
  4689
	CleanupDeletePushL(source);
sl@0
  4690
sl@0
  4691
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  4692
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  4693
	source->NegotiateSourceL(*dummySink);
sl@0
  4694
	source->SourcePrimeL();
sl@0
  4695
sl@0
  4696
	TMediaId mediaId;
sl@0
  4697
	TInt requestCount = 0;
sl@0
  4698
	TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4699
	if (err == KErrNone)
sl@0
  4700
		{
sl@0
  4701
		requestCount++;
sl@0
  4702
		TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4703
		if (err == KErrNone)
sl@0
  4704
			{
sl@0
  4705
			requestCount++;
sl@0
  4706
			TRAP(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4707
			}
sl@0
  4708
		}
sl@0
  4709
sl@0
  4710
	if (err == KErrNone)
sl@0
  4711
		requestCount++;
sl@0
  4712
sl@0
  4713
	if (requestCount)
sl@0
  4714
		{
sl@0
  4715
		dummySink->SetExpectedFillCount(requestCount);
sl@0
  4716
		CActiveScheduler::Start();
sl@0
  4717
		}
sl@0
  4718
	CleanupStack::PopAndDestroy(source);
sl@0
  4719
sl@0
  4720
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  4721
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  4722
		return EFail;
sl@0
  4723
sl@0
  4724
	if (err != KErrNone)
sl@0
  4725
		User::Leave(err);
sl@0
  4726
sl@0
  4727
	if (!sinkBufferFilledOk)
sl@0
  4728
		{
sl@0
  4729
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  4730
			User::Leave(err);
sl@0
  4731
sl@0
  4732
		return EFail;
sl@0
  4733
		}
sl@0
  4734
sl@0
  4735
	return EPass;
sl@0
  4736
	}
sl@0
  4737
sl@0
  4738
TVerdict TAudioInputFillBuffer7TestStep::DoTestStepL()
sl@0
  4739
	{
sl@0
  4740
	TBuf8<1> configDes;
sl@0
  4741
	MDataSource* source = STATIC_CAST(MDataSource*, MDataSource::NewSourceL(KUidMmfAudioInput, configDes));
sl@0
  4742
	CleanupDeletePushL(source);
sl@0
  4743
sl@0
  4744
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  4745
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  4746
	source->NegotiateSourceL(*dummySink);
sl@0
  4747
	source->SourcePrimeL();
sl@0
  4748
sl@0
  4749
	TMediaId mediaId;
sl@0
  4750
	TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4751
	if (err == KErrNone)
sl@0
  4752
		CActiveScheduler::Start();
sl@0
  4753
sl@0
  4754
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  4755
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  4756
		{
sl@0
  4757
		CleanupStack::PopAndDestroy(source);
sl@0
  4758
		return EFail;
sl@0
  4759
		}
sl@0
  4760
sl@0
  4761
	if (err != KErrNone)
sl@0
  4762
		User::Leave(err);
sl@0
  4763
sl@0
  4764
	if (!sinkBufferFilledOk)
sl@0
  4765
		{
sl@0
  4766
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  4767
			User::Leave(err);
sl@0
  4768
sl@0
  4769
		CleanupStack::PopAndDestroy(source);
sl@0
  4770
		return EFail;
sl@0
  4771
		}
sl@0
  4772
sl@0
  4773
	source->SourcePauseL();
sl@0
  4774
	source->FillBufferL(iBuffer, iSink, mediaId);	// this call just inits devsound
sl@0
  4775
//DevSound WP source is active cannot dictate what buffers to fill
sl@0
  4776
//	source->FillBufferL(iBuffer, iSink, mediaId);	// this call should leave with KErrNotReady
sl@0
  4777
sl@0
  4778
	CleanupStack::PopAndDestroy(source);
sl@0
  4779
	return EPass;
sl@0
  4780
	}
sl@0
  4781
sl@0
  4782
TVerdict TAudioInputFillBuffer8TestStep::DoTestStepL()
sl@0
  4783
	{
sl@0
  4784
	TBuf8<1> configDes;
sl@0
  4785
	MDataSource* source = STATIC_CAST(MDataSource*, MDataSource::NewSourceL(KUidMmfAudioInput, configDes));
sl@0
  4786
	CleanupDeletePushL(source);
sl@0
  4787
sl@0
  4788
	CMMFDummySink* dummySink = STATIC_CAST(CMMFDummySink*, iSink);
sl@0
  4789
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  4790
	source->NegotiateSourceL(*dummySink);
sl@0
  4791
	source->SourcePrimeL();
sl@0
  4792
sl@0
  4793
	TMediaId mediaId;
sl@0
  4794
	TRAPD(err, source->FillBufferL(iBuffer, iSink, mediaId));
sl@0
  4795
	if (err == KErrNone)
sl@0
  4796
		CActiveScheduler::Start();
sl@0
  4797
sl@0
  4798
	TBool sinkBufferFilledOk = dummySink->BufferFilledOk();
sl@0
  4799
	if ((err != KErrNone) && sinkBufferFilledOk)
sl@0
  4800
		{
sl@0
  4801
		CleanupStack::PopAndDestroy(source);
sl@0
  4802
		return EFail;
sl@0
  4803
		}
sl@0
  4804
sl@0
  4805
	if (err != KErrNone)
sl@0
  4806
		User::Leave(err);
sl@0
  4807
sl@0
  4808
	if (!sinkBufferFilledOk)
sl@0
  4809
		{
sl@0
  4810
		if ((err = dummySink->Error()) != KErrNone)
sl@0
  4811
			User::Leave(err);
sl@0
  4812
sl@0
  4813
		CleanupStack::PopAndDestroy(source);
sl@0
  4814
		return EFail;
sl@0
  4815
		}
sl@0
  4816
sl@0
  4817
	source->SourceStopL();
sl@0
  4818
	source->FillBufferL(iBuffer, iSink, mediaId);	// this call just inits devsound
sl@0
  4819
	source->FillBufferL(iBuffer, iSink, mediaId);	// this call should leave with KErrNotReady
sl@0
  4820
sl@0
  4821
	CleanupStack::PopAndDestroy(source);
sl@0
  4822
	return EPass;
sl@0
  4823
	}
sl@0
  4824
sl@0
  4825
sl@0
  4826
TVerdict TAudioOutputEmptyBufferTestStep::DoTestStepL()
sl@0
  4827
	{
sl@0
  4828
	TMediaId mediaId;
sl@0
  4829
	iSink->SinkPlayL();
sl@0
  4830
sl@0
  4831
	TRAPD(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  4832
sl@0
  4833
	if ((err == KErrNone) && iAsynchronousWrite)
sl@0
  4834
		CActiveScheduler::Start();
sl@0
  4835
sl@0
  4836
	iSink->SinkStopL();
sl@0
  4837
sl@0
  4838
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  4839
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  4840
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  4841
		return EFail;
sl@0
  4842
sl@0
  4843
	if (err != KErrNone)
sl@0
  4844
		User::Leave(err);
sl@0
  4845
sl@0
  4846
	if (!sourceBufferEmptiedOk)
sl@0
  4847
		{
sl@0
  4848
		if ((err = dummySource->Error()) != KErrNone)
sl@0
  4849
			User::Leave(err);
sl@0
  4850
sl@0
  4851
		return EFail;
sl@0
  4852
		}
sl@0
  4853
sl@0
  4854
	return EPass;
sl@0
  4855
	}
sl@0
  4856
sl@0
  4857
TVerdict TAudioOutputEmptyBuffer2TestStep::DoTestStepL()
sl@0
  4858
	{
sl@0
  4859
	TMediaId mediaId;
sl@0
  4860
	iSink->SinkPlayL();
sl@0
  4861
sl@0
  4862
	TRAPD(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  4863
	if ((err == KErrNone) && iAsynchronousWrite)
sl@0
  4864
		CActiveScheduler::Start();
sl@0
  4865
sl@0
  4866
	iSink->SinkStopL();
sl@0
  4867
sl@0
  4868
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  4869
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  4870
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  4871
		return EFail;
sl@0
  4872
sl@0
  4873
	if (err != KErrNone)
sl@0
  4874
		{
sl@0
  4875
		iSink->SinkStopL();
sl@0
  4876
		User::Leave(err);
sl@0
  4877
		}
sl@0
  4878
sl@0
  4879
	if (!sourceBufferEmptiedOk)
sl@0
  4880
		{
sl@0
  4881
		if ((err = dummySource->Error()) != KErrNone)
sl@0
  4882
			{
sl@0
  4883
			iSink->SinkStopL();
sl@0
  4884
			User::Leave(err);
sl@0
  4885
			}
sl@0
  4886
sl@0
  4887
		return EFail;
sl@0
  4888
		}
sl@0
  4889
sl@0
  4890
	iSink->SinkPlayL();
sl@0
  4891
sl@0
  4892
	TRAP(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  4893
	if ((err == KErrNone) && iAsynchronousWrite)
sl@0
  4894
		CActiveScheduler::Start();
sl@0
  4895
sl@0
  4896
	iSink->SinkStopL();
sl@0
  4897
sl@0
  4898
	sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  4899
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  4900
		return EFail;
sl@0
  4901
sl@0
  4902
	if (err != KErrNone)
sl@0
  4903
		{
sl@0
  4904
		iSink->SinkStopL();
sl@0
  4905
		User::Leave(err);
sl@0
  4906
		}
sl@0
  4907
sl@0
  4908
	if (!sourceBufferEmptiedOk)
sl@0
  4909
		{
sl@0
  4910
		if ((err = dummySource->Error()) != KErrNone)
sl@0
  4911
			{
sl@0
  4912
			iSink->SinkStopL();
sl@0
  4913
			User::Leave(err);
sl@0
  4914
			}
sl@0
  4915
sl@0
  4916
		return EFail;
sl@0
  4917
		}
sl@0
  4918
sl@0
  4919
	iSink->SinkPlayL();
sl@0
  4920
sl@0
  4921
	TRAP(err, iSink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  4922
	if ((err == KErrNone) && iAsynchronousWrite)
sl@0
  4923
		CActiveScheduler::Start();
sl@0
  4924
sl@0
  4925
	iSink->SinkStopL();
sl@0
  4926
sl@0
  4927
	sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  4928
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  4929
		return EFail;
sl@0
  4930
sl@0
  4931
	if (err != KErrNone)
sl@0
  4932
		User::Leave(err);
sl@0
  4933
sl@0
  4934
	if (!sourceBufferEmptiedOk)
sl@0
  4935
		{
sl@0
  4936
		if ((err = dummySource->Error()) != KErrNone)
sl@0
  4937
			User::Leave(err);
sl@0
  4938
sl@0
  4939
		return EFail;
sl@0
  4940
		}
sl@0
  4941
sl@0
  4942
	return EPass;
sl@0
  4943
	}
sl@0
  4944
sl@0
  4945
TVerdict TAudioOutputEmptyBuffer3TestStep::DoTestStepL()
sl@0
  4946
	{
sl@0
  4947
	// Fill in!
sl@0
  4948
	return EPass;
sl@0
  4949
	}
sl@0
  4950
sl@0
  4951
TVerdict TAudioOutputEmptyBuffer4TestStep::DoTestStepL()
sl@0
  4952
	{
sl@0
  4953
	TBuf8<1> configDes;
sl@0
  4954
	MDataSink* sink = STATIC_CAST(MDataSink*, MDataSink::NewSinkL(KUidMmfAudioOutput, configDes));
sl@0
  4955
	CleanupDeletePushL(sink);
sl@0
  4956
sl@0
  4957
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  4958
sl@0
  4959
	//DevSound WP Logon must come before Prime
sl@0
  4960
	User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
  4961
	sink->SinkPrimeL();
sl@0
  4962
	//DevSound WP User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
  4963
sl@0
  4964
	sink->NegotiateL(iRealFormat);
sl@0
  4965
sl@0
  4966
	TMediaId mediaId;
sl@0
  4967
	sink->SinkPlayL();
sl@0
  4968
	TRAPD(err, sink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  4969
	CActiveScheduler::Start();
sl@0
  4970
	CleanupStack::PopAndDestroy(sink);
sl@0
  4971
sl@0
  4972
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  4973
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  4974
		return EFail;
sl@0
  4975
sl@0
  4976
	if (err != KErrNone)
sl@0
  4977
		User::Leave(err);
sl@0
  4978
sl@0
  4979
	if (!sourceBufferEmptiedOk)
sl@0
  4980
		{//DevSound WP because the active scheduler can leave
sl@0
  4981
		//we cannot assume that the source buffer has been emptied ok in the alloc test
sl@0
  4982
		//	if ((err = dummySource->Error()) != KErrNone)
sl@0
  4983
		//		User::Leave(err);
sl@0
  4984
sl@0
  4985
		//	return EFail;
sl@0
  4986
		}
sl@0
  4987
sl@0
  4988
	return EPass;
sl@0
  4989
	}
sl@0
  4990
sl@0
  4991
TVerdict TAudioOutputEmptyBuffer5TestStep::DoTestStepL()
sl@0
  4992
	{
sl@0
  4993
	TBuf8<1> configDes;
sl@0
  4994
	MDataSink* sink = STATIC_CAST(MDataSink*, MDataSink::NewSinkL(KUidMmfAudioOutput, configDes));
sl@0
  4995
	CleanupDeletePushL(sink);
sl@0
  4996
sl@0
  4997
	CMMFDummySource* dummySource = STATIC_CAST(CMMFDummySource*, iSource);
sl@0
  4998
sl@0
  4999
	//DevSound WP Logon must come before Prime
sl@0
  5000
	User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
  5001
	sink->SinkPrimeL();
sl@0
  5002
	//DevSound WP	User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
  5003
sl@0
  5004
	sink->NegotiateL(iRealFormat);
sl@0
  5005
	sink->SinkPlayL();
sl@0
  5006
sl@0
  5007
	TMediaId mediaId;
sl@0
  5008
	TRAPD(err, sink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  5009
sl@0
  5010
	CActiveScheduler::Start();
sl@0
  5011
sl@0
  5012
	TBool sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  5013
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  5014
		{
sl@0
  5015
		CleanupStack::PopAndDestroy(sink);
sl@0
  5016
		return EFail;
sl@0
  5017
		}
sl@0
  5018
sl@0
  5019
	if (err != KErrNone)
sl@0
  5020
		User::Leave(err);
sl@0
  5021
sl@0
  5022
	if (!sourceBufferEmptiedOk)
sl@0
  5023
		{
sl@0
  5024
		/* DevSound WP may not be emptied ok if OOM in AS
sl@0
  5025
		if ((err = dummySource->Error()) != KErrNone)
sl@0
  5026
			User::Leave(err);
sl@0
  5027
sl@0
  5028
		CleanupStack::PopAndDestroy(sink);
sl@0
  5029
		return EFail;
sl@0
  5030
		*/
sl@0
  5031
		}
sl@0
  5032
sl@0
  5033
	dummySource->SetActiveScheduler();
sl@0
  5034
	TRAP(err, sink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  5035
	if (err == KErrNone)
sl@0
  5036
		CActiveScheduler::Start();
sl@0
  5037
sl@0
  5038
	sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  5039
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  5040
		{
sl@0
  5041
		CleanupStack::PopAndDestroy(sink);
sl@0
  5042
		return EFail;
sl@0
  5043
		}
sl@0
  5044
sl@0
  5045
	if (err != KErrNone)
sl@0
  5046
		User::Leave(err);
sl@0
  5047
sl@0
  5048
	if (!sourceBufferEmptiedOk)
sl@0
  5049
		{
sl@0
  5050
		if ((err = dummySource->Error()) != KErrNone)
sl@0
  5051
			User::Leave(err);
sl@0
  5052
sl@0
  5053
		CleanupStack::PopAndDestroy(sink);
sl@0
  5054
		return EFail;
sl@0
  5055
		}
sl@0
  5056
sl@0
  5057
	TRAP(err, sink->EmptyBufferL(iBuffer, iSource, mediaId));
sl@0
  5058
	if (err == KErrNone)
sl@0
  5059
		CActiveScheduler::Start();
sl@0
  5060
sl@0
  5061
	sourceBufferEmptiedOk = dummySource->BufferEmptiedOk();
sl@0
  5062
	if ((err != KErrNone) && sourceBufferEmptiedOk)
sl@0
  5063
		{
sl@0
  5064
		CleanupStack::PopAndDestroy(sink);
sl@0
  5065
		return EFail;
sl@0
  5066
		}
sl@0
  5067
sl@0
  5068
	if (err != KErrNone)
sl@0
  5069
		User::Leave(err);
sl@0
  5070
sl@0
  5071
	if (!sourceBufferEmptiedOk)
sl@0
  5072
		{
sl@0
  5073
		if ((err = dummySource->Error()) != KErrNone)
sl@0
  5074
			User::Leave(err);
sl@0
  5075
sl@0
  5076
		CleanupStack::PopAndDestroy(sink);
sl@0
  5077
		return EFail;
sl@0
  5078
		}
sl@0
  5079
sl@0
  5080
	CleanupStack::PopAndDestroy(sink);
sl@0
  5081
	return EPass;
sl@0
  5082
	}
sl@0
  5083
sl@0
  5084
sl@0
  5085
//_LIT(KTest301CopyFileName, "c:\\mm\\mmf\\testfiles\\srssnk\\CopyOfMMFTestFile1.dat");	// EABI warning removal
sl@0
  5086
_LIT(KTest301FileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile1.wav");
sl@0
  5087
sl@0
  5088
TVerdict TPrimeStopTestStep::DoTestStepL()
sl@0
  5089
	{
sl@0
  5090
	// Initialise config data.
sl@0
  5091
	TMMFFileConfig configDes;
sl@0
  5092
	configDes().iPath = KTest301FileName;
sl@0
  5093
	MDataSource* source = MDataSource::NewSourceL(KUidMmfFileSource, configDes);
sl@0
  5094
	CleanupDeletePushL(source);
sl@0
  5095
sl@0
  5096
	TUid KWavReadUid = { KMmfUidFormatWAVRead };
sl@0
  5097
	CMMFFormatDecode* format = CMMFFormatDecode::NewL(KWavReadUid, source);
sl@0
  5098
	CleanupStack::PushL(format);
sl@0
  5099
sl@0
  5100
	// Initialise thread active scheduler.
sl@0
  5101
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
  5102
	CleanupStack::PushL(scheduler);
sl@0
  5103
	CActiveScheduler::Install(scheduler);
sl@0
  5104
sl@0
  5105
	// Prime
sl@0
  5106
	TRAPD(err, format->SourcePrimeL());
sl@0
  5107
sl@0
  5108
	if (err != KErrNone)
sl@0
  5109
		{
sl@0
  5110
		format->SourcePrimeL();
sl@0
  5111
		}
sl@0
  5112
sl@0
  5113
	// This will leave during alloc fail test
sl@0
  5114
	TAny* randomAlloc = User::AllocL(10);
sl@0
  5115
	User::Free(randomAlloc);
sl@0
  5116
sl@0
  5117
	CleanupStack::PopAndDestroy(scheduler);
sl@0
  5118
	CleanupStack::PopAndDestroy(format);
sl@0
  5119
	CleanupStack::PopAndDestroy(source);
sl@0
  5120
sl@0
  5121
	return EPass;
sl@0
  5122
	}
sl@0
  5123
sl@0
  5124
sl@0
  5125
_LIT(KTest302FileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile1.wav");
sl@0
  5126
sl@0
  5127
TVerdict TPrimeStopSinkTestStep::DoTestStepL()
sl@0
  5128
	{
sl@0
  5129
	// Create a new sink.
sl@0
  5130
	TBuf8<1> dummyConfigDes;
sl@0
  5131
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, dummyConfigDes);
sl@0
  5132
	CleanupDeletePushL(sink);
sl@0
  5133
sl@0
  5134
	// Create a real source.
sl@0
  5135
	// Initialise config data.
sl@0
  5136
	TMMFFileConfig configDes;
sl@0
  5137
	configDes().iPath = KTest302FileName;
sl@0
  5138
	MDataSource* source = MDataSource::NewSourceL(KUidMmfFileSource, configDes);
sl@0
  5139
	CleanupDeletePushL(source);
sl@0
  5140
sl@0
  5141
	TUid KWavReadUid = { KMmfUidFormatWAVRead };
sl@0
  5142
	CMMFFormatDecode* format = CMMFFormatDecode::NewL(KWavReadUid, source);
sl@0
  5143
	CleanupStack::PushL(format);
sl@0
  5144
sl@0
  5145
	CMMFWavFormatRead* realFormat = static_cast<CMMFWavFormatRead*>(format);
sl@0
  5146
	User::LeaveIfError(sink->SinkThreadLogon(*realFormat));
sl@0
  5147
	sink->NegotiateL(*format);
sl@0
  5148
sl@0
  5149
	TRAPD(err, sink->SinkPrimeL());
sl@0
  5150
	if (err != KErrNone)
sl@0
  5151
		{
sl@0
  5152
		sink->SinkPrimeL();
sl@0
  5153
		}
sl@0
  5154
sl@0
  5155
	CleanupStack::PopAndDestroy(format);
sl@0
  5156
	CleanupStack::PopAndDestroy(source);
sl@0
  5157
	CleanupStack::PopAndDestroy(sink);
sl@0
  5158
sl@0
  5159
	return EPass;
sl@0
  5160
	}
sl@0
  5161
sl@0
  5162
/**
sl@0
  5163
 *
sl@0
  5164
 * CTestStepSelfTest constructor
sl@0
  5165
 *
sl@0
  5166
 * @xxxx
sl@0
  5167
 *
sl@0
  5168
 */
sl@0
  5169
CTestStep_MMF_SRSSNK::CTestStep_MMF_SRSSNK(TBool aIsAllocTest)
sl@0
  5170
: iTestResult(EPass), iIsAllocTest(aIsAllocTest)
sl@0
  5171
	{
sl@0
  5172
	iHeapSize = 1048576; // 1M
sl@0
  5173
sl@0
  5174
	RFs theFs;
sl@0
  5175
	if (theFs.Connect() == KErrNone)
sl@0
  5176
		{
sl@0
  5177
		if (theFs.SetErrorCondition(KErrNone) == KErrNone)
sl@0
  5178
			iFileFailureTestingEnabled = ETrue;
sl@0
  5179
sl@0
  5180
		theFs.Close();
sl@0
  5181
		}
sl@0
  5182
	}
sl@0
  5183
sl@0
  5184
/**
sl@0
  5185
 *
sl@0
  5186
 * CTestStepSelfTest destructor
sl@0
  5187
 *
sl@0
  5188
 * @xxxx
sl@0
  5189
 *
sl@0
  5190
 */
sl@0
  5191
CTestStep_MMF_SRSSNK::~CTestStep_MMF_SRSSNK()
sl@0
  5192
	{
sl@0
  5193
	}
sl@0
  5194
sl@0
  5195
void CTestStep_MMF_SRSSNK::DoTest(TTestStep& aTestStep, TPtrC aTestDescription, TInt aExpectedTestResult, TInt aHeapCellCount)
sl@0
  5196
	{
sl@0
  5197
	DoTestStep(aTestStep, aTestDescription, aExpectedTestResult, aHeapCellCount);
sl@0
  5198
	DoTestStepWithAllocFail(aTestStep, aTestDescription, aExpectedTestResult, aHeapCellCount);
sl@0
  5199
	}
sl@0
  5200
sl@0
  5201
void CTestStep_MMF_SRSSNK::DoFileTest(TFileTestStep& aTestStep, TPtrC aTestDescription, TInt aExpectedTestResult)
sl@0
  5202
	{
sl@0
  5203
	DoTestStep(aTestStep, aTestDescription, aExpectedTestResult);
sl@0
  5204
	DoTestStepWithAllocFail(aTestStep, aTestDescription, aExpectedTestResult);
sl@0
  5205
sl@0
  5206
	DoTestStepWithFileFail(aTestStep, aTestDescription, aExpectedTestResult);
sl@0
  5207
sl@0
  5208
	// The test below is no longer run. Running it will cause an ASSERT.
sl@0
  5209
	//DoTestStepWithAllocAndFileFail(aTestStep, aTestDescription, aExpectedTestResult);
sl@0
  5210
	}
sl@0
  5211
sl@0
  5212
void CTestStep_MMF_SRSSNK::DoFileTestWithoutAllocFail(TFileTestStep& aTestStep, TPtrC aTestDescription, TInt aExpectedTestResult, TInt aHeapCellCount)
sl@0
  5213
	{
sl@0
  5214
	DoTestStep(aTestStep, aTestDescription, aExpectedTestResult, aHeapCellCount);
sl@0
  5215
	DoTestStepWithFileFail(aTestStep, aTestDescription, aExpectedTestResult, aHeapCellCount);
sl@0
  5216
	}
sl@0
  5217
sl@0
  5218
void CTestStep_MMF_SRSSNK::DoTestStep(TTestStep& aTestStep, TPtrC aTestDescription, TInt aExpectedTestResult, TInt /*__REQUIREDFORDEBUG(aHeapCellCount)*/)
sl@0
  5219
	{
sl@0
  5220
	TVerdict verdict = EPass;
sl@0
  5221
sl@0
  5222
	TRAPD(preErr, aTestStep.DoTestPreambleL());
sl@0
  5223
sl@0
  5224
	if (preErr != KErrNone)
sl@0
  5225
		{
sl@0
  5226
		INFO_PRINTF3(_L("%S: Test pre amble failed %d\n"), &aTestDescription, preErr);
sl@0
  5227
		iTestResult = EFail;
sl@0
  5228
		return;
sl@0
  5229
		}
sl@0
  5230
sl@0
  5231
	TRAPD(leaveErr, verdict = aTestStep.DoTestStepL());
sl@0
  5232
sl@0
  5233
	if (verdict == EPass)
sl@0
  5234
		{
sl@0
  5235
		if (leaveErr != aExpectedTestResult)
sl@0
  5236
			{
sl@0
  5237
			INFO_PRINTF3(_L("DoTestStep failed: leaveErr (%d) != expected (%d)"), leaveErr, aExpectedTestResult);
sl@0
  5238
			verdict = EFail;
sl@0
  5239
			}
sl@0
  5240
		else if (leaveErr == KErrNone)
sl@0
  5241
			{
sl@0
  5242
			TRAPD(postErr, verdict = aTestStep.DoTestPostambleL(ETrue));
sl@0
  5243
			if (postErr != KErrNone)
sl@0
  5244
				{
sl@0
  5245
				INFO_PRINTF2(_L("DoTestStep failed: postErr (%d)"), postErr);
sl@0
  5246
				verdict = EInconclusive;
sl@0
  5247
				}
sl@0
  5248
			}
sl@0
  5249
		else
sl@0
  5250
			{
sl@0
  5251
			TRAPD(postErr, verdict = aTestStep.DoNegativeTestPostambleL());
sl@0
  5252
			if (postErr != KErrNone)
sl@0
  5253
				{
sl@0
  5254
				INFO_PRINTF2(_L("DoTestStep failed: postErr (%d)"), postErr);
sl@0
  5255
				verdict = EInconclusive;
sl@0
  5256
				}
sl@0
  5257
			}
sl@0
  5258
		}
sl@0
  5259
sl@0
  5260
	if (verdict != EPass)
sl@0
  5261
		{
sl@0
  5262
		INFO_PRINTF3(_L("%S: Test verdict = %d\n"), &aTestDescription, verdict);
sl@0
  5263
		INFO_PRINTF4(_L("%S: Expecting %d, actually got %d\n"), &aTestDescription, aExpectedTestResult, leaveErr);
sl@0
  5264
		iTestResult = verdict;
sl@0
  5265
		}
sl@0
  5266
	}
sl@0
  5267
sl@0
  5268
void CTestStep_MMF_SRSSNK::DoTestStepWithAllocFail(TTestStep& aTestStep, TPtrC aTestDescription, TInt aExpectedResult, TInt /*__REQUIREDFORDEBUG(aHeapCellCount)*/)
sl@0
  5269
	{
sl@0
  5270
	TInt err;
sl@0
  5271
	TInt postErr;
sl@0
  5272
	TInt failPoint = 0;
sl@0
  5273
	TBool finished = EFalse;
sl@0
  5274
	TVerdict verdict;
sl@0
  5275
	TVerdict postVerdict;
sl@0
  5276
sl@0
  5277
	iTestResult = EFail;
sl@0
  5278
	do
sl@0
  5279
		{
sl@0
  5280
		// Do the preamble.
sl@0
  5281
		TRAP(err, aTestStep.DoTestPreambleL());
sl@0
  5282
		if (err != KErrNone)
sl@0
  5283
			{
sl@0
  5284
			INFO_PRINTF2(_L("%S preamble failed"), &aTestDescription);
sl@0
  5285
			TRAP_IGNORE(aTestStep.DoNegativeTestPostambleL());
sl@0
  5286
			return;
sl@0
  5287
			}
sl@0
  5288
sl@0
  5289
		// Do the test step.
sl@0
  5290
		failPoint = failPoint + 1;	// doing 'failPoint++' causes a compiler warning on ARMV5 UREL.
sl@0
  5291
		__UHEAP_SETFAIL(RHeap::EFailNext, failPoint);
sl@0
  5292
		verdict = EFail;
sl@0
  5293
		TRAP(err, verdict = aTestStep.DoTestStepL());
sl@0
  5294
sl@0
  5295
		TAny* ptr = User::Alloc(1);
sl@0
  5296
		finished = (ptr == NULL);
sl@0
  5297
		User::Free(ptr);
sl@0
  5298
		__UHEAP_RESET;
sl@0
  5299
sl@0
  5300
		// Do the postamble.
sl@0
  5301
		postVerdict = EFail;
sl@0
  5302
		if (err == KErrNone)
sl@0
  5303
			{
sl@0
  5304
			TRAP(postErr, postVerdict = aTestStep.DoTestPostambleL(ETrue));
sl@0
  5305
			}
sl@0
  5306
		else
sl@0
  5307
			{
sl@0
  5308
			TRAP(postErr, postVerdict = aTestStep.DoNegativeTestPostambleL());
sl@0
  5309
			}
sl@0
  5310
sl@0
  5311
		// Check postamble results.
sl@0
  5312
		if ((postErr != KErrNone) && (postVerdict != EPass))
sl@0
  5313
			{
sl@0
  5314
			INFO_PRINTF3(_L("Postamble failed: %d (postVerdict = %d)"), postErr, postVerdict);
sl@0
  5315
			return;
sl@0
  5316
			}
sl@0
  5317
		}
sl@0
  5318
	while (!finished);
sl@0
  5319
sl@0
  5320
	// Check we got the expected result.
sl@0
  5321
	if ((aExpectedResult == KErrNone) && (verdict != EPass))
sl@0
  5322
		{
sl@0
  5323
		INFO_PRINTF2(_L("TestStep failed: %d"), verdict);
sl@0
  5324
		return;
sl@0
  5325
		}
sl@0
  5326
sl@0
  5327
	iTestResult = (err == aExpectedResult ? EPass : EFail);
sl@0
  5328
	}
sl@0
  5329
sl@0
  5330
void CTestStep_MMF_SRSSNK::DoTestStepWithFileFail(TFileTestStep& aTestStep, TPtrC /*aTestDescription*/, TInt aExpectedResult, TInt /*__REQUIREDFORDEBUG(aHeapCellCount)*/)
sl@0
  5331
	{
sl@0
  5332
	RFs fs;
sl@0
  5333
	TInt err;
sl@0
  5334
	TInt postErr;
sl@0
  5335
	TBool isExpectedResult;
sl@0
  5336
	TVerdict verdict;
sl@0
  5337
	TVerdict postVerdict = EPass;
sl@0
  5338
sl@0
  5339
	iTestResult = EPass;
sl@0
  5340
	if (!iFileFailureTestingEnabled)
sl@0
  5341
		{
sl@0
  5342
		return;
sl@0
  5343
		}
sl@0
  5344
sl@0
  5345
	err = fs.Connect();
sl@0
  5346
	if (err != KErrNone)
sl@0
  5347
		{
sl@0
  5348
		User::Panic(_L("SRSSNK Test"), err);
sl@0
  5349
		}
sl@0
  5350
sl@0
  5351
	aTestStep.iFileFailureExpected = ETrue;
sl@0
  5352
sl@0
  5353
	// Once Base's DEF103757 has been submitted to the MCL
sl@0
  5354
	// the counter 'failAt' should be set to zero.
sl@0
  5355
	// DP roms need to have this number set higher due to the
sl@0
  5356
	// additional paging operations done by RFs.
sl@0
  5357
	TInt failAt = 15;
sl@0
  5358
	do
sl@0
  5359
		{
sl@0
  5360
		// Do the preamble.
sl@0
  5361
		TRAP(err, aTestStep.DoTestPreambleL());
sl@0
  5362
		if (err != KErrNone)
sl@0
  5363
			{
sl@0
  5364
			iTestStepResult = EInconclusive;
sl@0
  5365
			fs.Close();
sl@0
  5366
			return;
sl@0
  5367
			}
sl@0
  5368
sl@0
  5369
		// Set the file failure point.
sl@0
  5370
		fs.SetErrorCondition(KErrFileFail, failAt++);
sl@0
  5371
		verdict = EFail;
sl@0
  5372
		TRAP(err, verdict = aTestStep.DoTestStepL());
sl@0
  5373
		fs.SetErrorCondition(KErrNone);
sl@0
  5374
sl@0
  5375
		isExpectedResult = (err == aExpectedResult);
sl@0
  5376
sl@0
  5377
		postVerdict = EFail;
sl@0
  5378
		if (err == KErrNone)
sl@0
  5379
			{
sl@0
  5380
			TRAP(postErr, postVerdict = aTestStep.DoTestPostambleL(ETrue));
sl@0
  5381
			}
sl@0
  5382
		else
sl@0
  5383
			{
sl@0
  5384
			TRAP(postErr, postVerdict = aTestStep.DoNegativeTestPostambleL());
sl@0
  5385
			}
sl@0
  5386
		}
sl@0
  5387
	while (err == KErrFileFail);
sl@0
  5388
sl@0
  5389
	fs.Close();
sl@0
  5390
sl@0
  5391
	// Decide the test result.
sl@0
  5392
	if ((postErr != KErrNone) || (postVerdict != EPass))
sl@0
  5393
		{
sl@0
  5394
		iTestResult = postVerdict;
sl@0
  5395
		return;
sl@0
  5396
		}
sl@0
  5397
sl@0
  5398
	// If there's an expected failure, verdict will be EFail.
sl@0
  5399
	// This doesn't mean the test has failed.
sl@0
  5400
	if ((aExpectedResult == KErrNone) && (verdict != EPass))
sl@0
  5401
		{
sl@0
  5402
		iTestResult = verdict;
sl@0
  5403
		return;
sl@0
  5404
		}
sl@0
  5405
sl@0
  5406
	iTestResult = (isExpectedResult ? EPass : EFail);
sl@0
  5407
	}
sl@0
  5408
sl@0
  5409
//
sl@0
  5410
// The test is no longer run as its correctness is not proven.
sl@0
  5411
// It is kept for reference purposes.
sl@0
  5412
//
sl@0
  5413
void CTestStep_MMF_SRSSNK::DoTestStepWithAllocAndFileFail(TFileTestStep& aTestStep, TPtrC aTestDescription, TInt aExpectedResult)
sl@0
  5414
	{
sl@0
  5415
	ASSERT(0);	// Don't run this test.
sl@0
  5416
sl@0
  5417
	if (!iFileFailureTestingEnabled)
sl@0
  5418
		return;
sl@0
  5419
sl@0
  5420
	RFs theFs;
sl@0
  5421
	TInt leaveErr = theFs.Connect();
sl@0
  5422
	if (leaveErr != KErrNone)
sl@0
  5423
		User::Panic(_L("SRSSNK Test"), 0);
sl@0
  5424
sl@0
  5425
	aTestStep.iFileFailureExpected = ETrue;
sl@0
  5426
	TVerdict verdict = EPass;
sl@0
  5427
	TBool allocTestingComplete;
sl@0
  5428
	for (TInt failAt = 1, fileFailAt = KStartFileFailAt ; ; failAt++)
sl@0
  5429
		{
sl@0
  5430
		for (; ; fileFailAt++)
sl@0
  5431
			{
sl@0
  5432
			TRAPD(preErr, aTestStep.DoTestPreambleL());
sl@0
  5433
			if (preErr != KErrNone)
sl@0
  5434
			{
sl@0
  5435
				INFO_PRINTF2(_L("%S: Test pre amble failed\n"), &aTestDescription);
sl@0
  5436
				iTestResult = EFail;
sl@0
  5437
				return;
sl@0
  5438
			}
sl@0
  5439
sl@0
  5440
			__UHEAP_SETFAIL(RHeap::EFailNext, failAt);	// Leavescan will complain about this, although it isn't a leaving function
sl@0
  5441
			theFs.SetErrorCondition(KErrFileFail, fileFailAt);
sl@0
  5442
 			TRAP(leaveErr, verdict = aTestStep.DoTestStepL());
sl@0
  5443
			theFs.SetErrorCondition(KErrNone);
sl@0
  5444
sl@0
  5445
			TAny* testAlloc = User::Alloc(1);
sl@0
  5446
			allocTestingComplete = (testAlloc == NULL);
sl@0
  5447
			User::Free(testAlloc);
sl@0
  5448
			__UHEAP_SETFAIL(RHeap::ENone, 0);
sl@0
  5449
sl@0
  5450
			if (verdict == EPass)
sl@0
  5451
				{
sl@0
  5452
				if ((leaveErr != aExpectedResult) && (leaveErr != KErrFileFail) && (leaveErr != KErrNoMemory))
sl@0
  5453
					verdict = EFail;
sl@0
  5454
				else if (leaveErr == KErrNone)
sl@0
  5455
					{
sl@0
  5456
					TRAPD(postErr, verdict = aTestStep.DoTestPostambleL(ETrue));
sl@0
  5457
					if (postErr != KErrNone)
sl@0
  5458
						verdict = EInconclusive;
sl@0
  5459
					}
sl@0
  5460
				else
sl@0
  5461
					{
sl@0
  5462
					// ignore the verdict from DoNegativeTestPostambleL()
sl@0
  5463
					// since the main test has failed it's likely to fail too
sl@0
  5464
					TRAPD(postErr, aTestStep.DoNegativeTestPostambleL());
sl@0
  5465
					if (postErr != KErrNone)
sl@0
  5466
						verdict = EInconclusive;
sl@0
  5467
					}
sl@0
  5468
				}
sl@0
  5469
sl@0
  5470
			if (verdict != EPass)
sl@0
  5471
				{
sl@0
  5472
				INFO_PRINTF3(_L("%S + alloc+file fail: Test verdict = %d\n"), &aTestDescription, verdict);
sl@0
  5473
				INFO_PRINTF4(_L("%S + alloc+file fail: Expecting %d, actually got %d"), &aTestDescription, aExpectedResult, leaveErr);
sl@0
  5474
sl@0
  5475
				iTestResult = verdict;
sl@0
  5476
				break;
sl@0
  5477
				}
sl@0
  5478
sl@0
  5479
			if ((leaveErr == aExpectedResult) || (leaveErr == KErrNoMemory))
sl@0
  5480
				break;
sl@0
  5481
			}
sl@0
  5482
sl@0
  5483
		if (verdict == EPass)
sl@0
  5484
			{
sl@0
  5485
			if (allocTestingComplete)
sl@0
  5486
				{
sl@0
  5487
				if (leaveErr != aExpectedResult)
sl@0
  5488
					{
sl@0
  5489
					INFO_PRINTF3(_L("%S + alloc fail: Test verdict = %d\n"), &aTestDescription, EFail);
sl@0
  5490
					INFO_PRINTF4(_L("%S + alloc fail: Expecting %d, actually got %d"), &aTestDescription, aExpectedResult, leaveErr);
sl@0
  5491
sl@0
  5492
					iTestResult = EFail;
sl@0
  5493
					}
sl@0
  5494
sl@0
  5495
				break;
sl@0
  5496
				}
sl@0
  5497
			}
sl@0
  5498
		else
sl@0
  5499
			{
sl@0
  5500
				// added 17/01/03 - prevents looping on EFail
sl@0
  5501
				iTestResult = verdict;
sl@0
  5502
				break;
sl@0
  5503
			}
sl@0
  5504
		}
sl@0
  5505
	aTestStep.iFileFailureExpected = EFalse;
sl@0
  5506
	theFs.Close();
sl@0
  5507
	}
sl@0
  5508
sl@0
  5509
TVerdict CTestStep_MMF_SRSSNK::OpenL()
sl@0
  5510
	{
sl@0
  5511
	if (iIsAllocTest)
sl@0
  5512
		{
sl@0
  5513
		// see if alloc fail stuff is enabled - ask if next alloc test will fail
sl@0
  5514
		__UHEAP_SETFAIL(RHeap::EFailNext, 1);
sl@0
  5515
		TAny *testAlloc = User::Alloc(1);
sl@0
  5516
		TBool workingOk = testAlloc == NULL;
sl@0
  5517
		User::Free(testAlloc);
sl@0
  5518
		__UHEAP_SETFAIL(RHeap::ENone ,0);
sl@0
  5519
sl@0
  5520
		if (!workingOk)
sl@0
  5521
			{
sl@0
  5522
			ERR_PRINTF1(_L("Alloc Testing does not work on this build"));
sl@0
  5523
			return EInconclusive;
sl@0
  5524
			}
sl@0
  5525
		}
sl@0
  5526
sl@0
  5527
	return EPass;
sl@0
  5528
	}
sl@0
  5529
sl@0
  5530
void CTestStep_MMF_SRSSNK::CopyFileL(RFs& aFs, const TDesC& aOld, const TDesC& aNew)
sl@0
  5531
	{
sl@0
  5532
	CFileMan* fileMan = CFileMan::NewL(aFs);
sl@0
  5533
	CleanupStack::PushL(fileMan);
sl@0
  5534
	User::LeaveIfError(fileMan->Copy(aOld, aNew));
sl@0
  5535
	CleanupStack::PopAndDestroy(fileMan);
sl@0
  5536
	}
sl@0
  5537
sl@0
  5538
void CTestStep_MMF_SRSSNK::OpenFileL(const TDesC& aFileName, TInt aMode, TBool aShareProtected)
sl@0
  5539
	{
sl@0
  5540
	User::LeaveIfError(iFs.Connect());
sl@0
  5541
sl@0
  5542
	if (aShareProtected)
sl@0
  5543
		{
sl@0
  5544
		User::LeaveIfError(iFs.ShareProtected());
sl@0
  5545
		}
sl@0
  5546
sl@0
  5547
	User::LeaveIfError(iFile.Open(iFs, aFileName, aMode));
sl@0
  5548
	}
sl@0
  5549
sl@0
  5550
sl@0
  5551
sl@0
  5552
void CTestStep_MMF_SRSSNK::CloseFile()
sl@0
  5553
	{
sl@0
  5554
	iFile.Close();
sl@0
  5555
	iFs.Close();
sl@0
  5556
	}
sl@0
  5557
sl@0
  5558
void CTestStep_MMF_SRSSNK::DeleteFileSinkL(TSinkType aSinkType, RFs& aFs, TDesC& aFileName)
sl@0
  5559
	{
sl@0
  5560
	// Delete the test file.
sl@0
  5561
	CMMFClip* sink = static_cast<CMMFClip*> (CreateFileSinkL(aSinkType, aFs, aFileName));
sl@0
  5562
	
sl@0
  5563
	CleanupStack::PushL(sink);
sl@0
  5564
	TInt err = sink->Delete();
sl@0
  5565
	CleanupStack::PopAndDestroy(sink);
sl@0
  5566
sl@0
  5567
		// can't use Delete from File Sink itself - when using file handles, must delete it once file is closed
sl@0
  5568
	if (aSinkType == ESinkTypeFileHandle)
sl@0
  5569
		{
sl@0
  5570
		err = aFs.Delete(aFileName);
sl@0
  5571
		}
sl@0
  5572
			
sl@0
  5573
	if (err != KErrNone && err != KErrNotFound)
sl@0
  5574
		{
sl@0
  5575
		INFO_PRINTF2(_L("Error deleting file sink %d"), err);
sl@0
  5576
		User::Leave(err);
sl@0
  5577
		}	
sl@0
  5578
	}
sl@0
  5579
sl@0
  5580
// Test support classes
sl@0
  5581
CMMFDummySource::CMMFDummySource()
sl@0
  5582
: MDataSource(KTestDummyUid), iExpectedEmptyCount(1), iActiveScheduler(CActiveScheduler::Current()), iFillBuffer(EFalse)
sl@0
  5583
	{
sl@0
  5584
	}
sl@0
  5585
sl@0
  5586
TFourCC CMMFDummySource::SourceDataTypeCode(TMediaId /*aMediaId*/)
sl@0
  5587
	{
sl@0
  5588
	User::Panic(_L("SRSSNK Test"), 0);
sl@0
  5589
	return iSourceDataTypeCode;
sl@0
  5590
	}
sl@0
  5591
sl@0
  5592
void CMMFDummySource::FillBufferL(CMMFBuffer* /*aBuffer*/ , MDataSink* /*aConsumer*/, TMediaId /*aMediaId*/)
sl@0
  5593
	{
sl@0
  5594
	User::Panic(_L("SRSSNK Test"), 0);
sl@0
  5595
	}
sl@0
  5596
sl@0
  5597
void CMMFDummySource::BufferEmptiedL(CMMFBuffer* aBuffer)
sl@0
  5598
	{
sl@0
  5599
	iEmptyCount++;
sl@0
  5600
	if (iEmptyCount == iExpectedEmptyCount)
sl@0
  5601
		iBufferEmptiedOk = ETrue;
sl@0
  5602
sl@0
  5603
	if ((iActiveScheduler != NULL) && iBufferEmptiedOk)
sl@0
  5604
		CActiveScheduler::Stop();
sl@0
  5605
sl@0
  5606
	if (iFillBuffer)
sl@0
  5607
		{
sl@0
  5608
		CMMFDataBuffer* dataBuffer = STATIC_CAST(CMMFDataBuffer*, aBuffer);
sl@0
  5609
		dataBuffer->Data().SetLength(KTestWriteSize);
sl@0
  5610
		}
sl@0
  5611
sl@0
  5612
	iBuffer = aBuffer;	// save for test 208
sl@0
  5613
	}
sl@0
  5614
sl@0
  5615
TInt CMMFDummySource::SendEventToClient(const TMMFEvent& aEvent)
sl@0
  5616
	{
sl@0
  5617
	if (aEvent.iErrorCode == KErrCancel) // Ignore stop.
sl@0
  5618
		{
sl@0
  5619
		return 0;
sl@0
  5620
		}
sl@0
  5621
sl@0
  5622
	//DevSound WP active scheduler should also be stopped for OOM error
sl@0
  5623
	//since OOM can occur during active scheduler
sl@0
  5624
	if ((iActiveScheduler != NULL) && (aEvent.iErrorCode == KErrNoMemory))
sl@0
  5625
		{
sl@0
  5626
		iError = aEvent.iErrorCode;
sl@0
  5627
		CActiveScheduler::Stop();
sl@0
  5628
		return 0;
sl@0
  5629
		}
sl@0
  5630
sl@0
  5631
	iError = aEvent.iErrorCode;
sl@0
  5632
	iErrorCount++;
sl@0
  5633
sl@0
  5634
	iEmptyCount++;
sl@0
  5635
	if ((iActiveScheduler != NULL) && (iEmptyCount == iExpectedEmptyCount))
sl@0
  5636
		CActiveScheduler::Stop();
sl@0
  5637
sl@0
  5638
	return 0;
sl@0
  5639
	}
sl@0
  5640
sl@0
  5641
TBool CMMFDummySource::CanCreateSourceBuffer()
sl@0
  5642
	{
sl@0
  5643
	User::Panic(_L("SRSSNK Test"), 0);
sl@0
  5644
	return EFalse;
sl@0
  5645
	}
sl@0
  5646
sl@0
  5647
CMMFBuffer* CMMFDummySource::CreateSourceBufferL(TMediaId /*aMediaId*/, TBool& /*aReference*/)
sl@0
  5648
	{
sl@0
  5649
	User::Panic(_L("SRSSNK Test"), 0);
sl@0
  5650
	return NULL;
sl@0
  5651
	}
sl@0
  5652
sl@0
  5653
void CMMFDummySource::ConstructSourceL(const TDesC8& /*aInitData*/)
sl@0
  5654
	{
sl@0
  5655
	User::Panic(_L("SRSSNK Test"), 0);
sl@0
  5656
	}
sl@0
  5657
sl@0
  5658
sl@0
  5659
CMMFDummySink::CMMFDummySink()
sl@0
  5660
: MDataSink(KTestDummyUid), iExpectedFillCount(1), iActiveScheduler(CActiveScheduler::Current())
sl@0
  5661
	{
sl@0
  5662
	}
sl@0
  5663
sl@0
  5664
TFourCC CMMFDummySink::SinkDataTypeCode(TMediaId /*aMediaId*/)
sl@0
  5665
	{
sl@0
  5666
	User::Panic(_L("SRSSNK Test"), 0);
sl@0
  5667
	return iSinkDataTypeCode;
sl@0
  5668
	}
sl@0
  5669
sl@0
  5670
void CMMFDummySink::EmptyBufferL(CMMFBuffer* /*aBuffer*/ , MDataSource* /*aSupplier*/, TMediaId /*aMediaId*/)
sl@0
  5671
	{
sl@0
  5672
	User::Panic(_L("SRSSNK Test"), 0);
sl@0
  5673
	}
sl@0
  5674
sl@0
  5675
void CMMFDummySink::BufferFilledL(CMMFBuffer* aBuffer)
sl@0
  5676
	{
sl@0
  5677
	iBuffer = aBuffer;
sl@0
  5678
sl@0
  5679
	iFillCount++;
sl@0
  5680
	if (iFillCount == iExpectedFillCount)
sl@0
  5681
		iBufferFilledOk = ETrue;
sl@0
  5682
sl@0
  5683
	if ((iActiveScheduler != NULL) && iBufferFilledOk)
sl@0
  5684
		CActiveScheduler::Stop();
sl@0
  5685
	}
sl@0
  5686
sl@0
  5687
TInt CMMFDummySink::SendEventToClient(const TMMFEvent& aEvent)
sl@0
  5688
	{
sl@0
  5689
	iError = aEvent.iErrorCode;
sl@0
  5690
	iErrorCount++;
sl@0
  5691
sl@0
  5692
	iFillCount++;
sl@0
  5693
	if ((iActiveScheduler != NULL) && (iFillCount == iExpectedFillCount))
sl@0
  5694
		CActiveScheduler::Stop();
sl@0
  5695
sl@0
  5696
	return 0;
sl@0
  5697
	}
sl@0
  5698
sl@0
  5699
TBool CMMFDummySink::CanCreateSinkBuffer()
sl@0
  5700
	{
sl@0
  5701
	User::Panic(_L("SRSSNK Test"), 0);
sl@0
  5702
	return EFalse;
sl@0
  5703
	}
sl@0
  5704
sl@0
  5705
CMMFBuffer* CMMFDummySink::CreateSinkBufferL(TMediaId /*aMediaId*/, TBool& /*aReference*/)
sl@0
  5706
	{
sl@0
  5707
	User::Panic(_L("SRSSNK Test"), 0);
sl@0
  5708
	return NULL;
sl@0
  5709
	}
sl@0
  5710
sl@0
  5711
void CMMFDummySink::ConstructSinkL(const TDesC8& /*aInitData*/)
sl@0
  5712
	{
sl@0
  5713
	User::Panic(_L("SRSSNK Test"), 0);
sl@0
  5714
	}
sl@0
  5715
sl@0
  5716
sl@0
  5717
/**
sl@0
  5718
 *
sl@0
  5719
 * CTestStep_MMF_SRSSNK_U_0001 constructor
sl@0
  5720
 *
sl@0
  5721
 * @xxxx
sl@0
  5722
 *
sl@0
  5723
 */
sl@0
  5724
CTestStep_MMF_SRSSNK_U_0001::CTestStep_MMF_SRSSNK_U_0001()
sl@0
  5725
	{
sl@0
  5726
	// store the name of this test case
sl@0
  5727
	// this is the name that is used by the script file
sl@0
  5728
	// Each test step initialises it's own name
sl@0
  5729
	iTestStepName = _L("MM-MMF-SRSSNK-U-0001");
sl@0
  5730
	}
sl@0
  5731
sl@0
  5732
/**
sl@0
  5733
 *
sl@0
  5734
 * CTestStep_MMF_SRSSNK_U_0001 destructor
sl@0
  5735
 *
sl@0
  5736
 * @xxxx
sl@0
  5737
 *
sl@0
  5738
 */
sl@0
  5739
CTestStep_MMF_SRSSNK_U_0001::~CTestStep_MMF_SRSSNK_U_0001()
sl@0
  5740
	{
sl@0
  5741
	}
sl@0
  5742
sl@0
  5743
/**
sl@0
  5744
 *
sl@0
  5745
 * CTestStep_MMF_SRSSNK_U_0001
sl@0
  5746
 *
sl@0
  5747
 * Test creation/destruction of descriptor source.
sl@0
  5748
 *
sl@0
  5749
 * @xxxx
sl@0
  5750
 */
sl@0
  5751
TVerdict CTestStep_MMF_SRSSNK_U_0001::DoTestStepL()
sl@0
  5752
	{
sl@0
  5753
	__MM_HEAP_MARK;
sl@0
  5754
sl@0
  5755
	// Create the actual descriptor source buffer.
sl@0
  5756
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  5757
	TPtr8 dataPtr(dataDes->Des());
sl@0
  5758
sl@0
  5759
	// Set it's length.
sl@0
  5760
	dataPtr.SetLength(KTestBufferSize);
sl@0
  5761
sl@0
  5762
	// Initialise the config data.
sl@0
  5763
	TMMFDescriptorConfig configDes;
sl@0
  5764
	configDes().iDes = &dataPtr;
sl@0
  5765
	configDes().iDesThreadId = RThread().Id();
sl@0
  5766
sl@0
  5767
	// Attempt to create a new descriptor source.
sl@0
  5768
	// Use a valid uid and configuration descriptor.
sl@0
  5769
	// The test should be successful.
sl@0
  5770
	TNewSourceTestStep testStep(KUidMmfDescriptorSource, configDes);
sl@0
  5771
	DoTest(testStep, _L("Construct descriptor source"), KErrNone);
sl@0
  5772
sl@0
  5773
	// Create a descriptor source for use with the other tests.
sl@0
  5774
	// Mark the heap to enable us to test for leaks within the source object.
sl@0
  5775
	MDataSource* source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes);
sl@0
  5776
	CleanupDeletePushL(source);
sl@0
  5777
sl@0
  5778
	// Test that the source has been initialised correctly.
sl@0
  5779
	// The test should be successful.
sl@0
  5780
	TSourceTypeTestStep testStep2(source, KUidMmfDescriptorSource, KMMFFourCCCodeNULL, EFalse);
sl@0
  5781
	DoTest(testStep2, _L("Descriptor source type"), KErrNone);
sl@0
  5782
sl@0
  5783
	// Test that the source cannot create a source buffer.
sl@0
  5784
	// The test should be successful.
sl@0
  5785
	TCanCreateSourceBufferTestStep testStep3(source, EFalse);
sl@0
  5786
	DoTest(testStep3, _L("Descriptor CanCreateSourceBuffer"), KErrNone);
sl@0
  5787
sl@0
  5788
	// Test that the source cannot source sample convert.
sl@0
  5789
	// The test should be successful.
sl@0
  5790
	TSourceSampleConvertTestStep testStep4(source, EFalse);
sl@0
  5791
	DoTest(testStep4, _L("Descriptor source SourceSampleConvert"), KErrNone);
sl@0
  5792
sl@0
  5793
	// Test that the clip is initialised correctly.
sl@0
  5794
	CMMFClip *sourceClip = STATIC_CAST(CMMFClip*, source);
sl@0
  5795
sl@0
  5796
	// Test that the number of bytes free is what we would expect.
sl@0
  5797
	// The test should be successful.
sl@0
  5798
	TClipBytesFreeTestStep testStep5(sourceClip, KTestDataSize-KTestBufferSize);
sl@0
  5799
	DoTest(testStep5, _L("Descriptor source BytesFree"), KErrNone);
sl@0
  5800
sl@0
  5801
	// Test that the size of the clip is what we would expect.
sl@0
  5802
	// The test should be successful.
sl@0
  5803
	TClipSizeTestStep testStep6(sourceClip, KTestBufferSize);
sl@0
  5804
	DoTest(testStep6, _L("Descriptor source Size"), KErrNone);
sl@0
  5805
sl@0
  5806
	// Test that the size of the clip cannot be set.
sl@0
  5807
	// The test should be successful.
sl@0
  5808
	TClipSetSizeTestStep testStep7(sourceClip, ETrue);
sl@0
  5809
	DoTest(testStep7, _L("Descriptor source SetSize"), KErrNone);
sl@0
  5810
sl@0
  5811
	// Attempt to delete the clip.
sl@0
  5812
	// This test should fail, leaving with KErrNotSupported.
sl@0
  5813
	TClipDeleteTestStep testStep8(sourceClip);
sl@0
  5814
	DoTest(testStep8, _L("Descriptor source Delete"), KErrNotSupported);
sl@0
  5815
sl@0
  5816
	CleanupStack::PopAndDestroy(source);
sl@0
  5817
sl@0
  5818
	CleanupStack::PopAndDestroy(dataDes);
sl@0
  5819
sl@0
  5820
	__MM_HEAP_MARKEND;
sl@0
  5821
	return iTestResult;
sl@0
  5822
	}
sl@0
  5823
sl@0
  5824
/**
sl@0
  5825
 *
sl@0
  5826
 * CTestStep_MMF_SRSSNK_U_0002 constructor
sl@0
  5827
 *
sl@0
  5828
 * @xxxx
sl@0
  5829
 *
sl@0
  5830
 */
sl@0
  5831
CTestStep_MMF_SRSSNK_U_0002::CTestStep_MMF_SRSSNK_U_0002()
sl@0
  5832
	{
sl@0
  5833
	// store the name of this test case
sl@0
  5834
	// this is the name that is used by the script file
sl@0
  5835
	// Each test step initialises it's own name
sl@0
  5836
	iTestStepName = _L("MM-MMF-SRSSNK-U-0002");
sl@0
  5837
	}
sl@0
  5838
sl@0
  5839
/**
sl@0
  5840
 *
sl@0
  5841
 * CTestStep_MMF_SRSSNK_U_0002 destructor
sl@0
  5842
 *
sl@0
  5843
 * @xxxx
sl@0
  5844
 *
sl@0
  5845
 */
sl@0
  5846
CTestStep_MMF_SRSSNK_U_0002::~CTestStep_MMF_SRSSNK_U_0002()
sl@0
  5847
	{
sl@0
  5848
	}
sl@0
  5849
sl@0
  5850
/**
sl@0
  5851
 *
sl@0
  5852
 * CTestStep_MMF_SRSSNK_U_0002
sl@0
  5853
 *
sl@0
  5854
 * Attempt to create descriptor source using invalid config data.
sl@0
  5855
 *
sl@0
  5856
 * @xxxx
sl@0
  5857
 */
sl@0
  5858
TVerdict CTestStep_MMF_SRSSNK_U_0002::DoTestStepL()
sl@0
  5859
	{
sl@0
  5860
	__MM_HEAP_MARK;
sl@0
  5861
sl@0
  5862
	TBool failed = EFalse;
sl@0
  5863
sl@0
  5864
	// Create the actual descriptor source buffer.
sl@0
  5865
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  5866
	TPtr8 dataPtr(dataDes->Des());
sl@0
  5867
sl@0
  5868
	// Initialise config data.
sl@0
  5869
	TMMFDescriptorConfig configDes;
sl@0
  5870
	configDes.SetLength(0);
sl@0
  5871
sl@0
  5872
	// Test invalid uid and configuration descriptor.
sl@0
  5873
	TNewSourceTestStep testStep(KNullUid, configDes);
sl@0
  5874
	DoTest(testStep, _L("Construct descriptor source 0002.1"), KErrArgument);
sl@0
  5875
	if (iTestResult != EPass)
sl@0
  5876
		{
sl@0
  5877
		INFO_PRINTF1(_L(" - 0002.1 failed"));
sl@0
  5878
		failed = ETrue;
sl@0
  5879
		iTestResult = EPass;
sl@0
  5880
		}
sl@0
  5881
sl@0
  5882
	// Test invalid configuration descriptor. (Zero length)
sl@0
  5883
	TNewSourceTestStep testStep2(KUidMmfDescriptorSource, configDes);
sl@0
  5884
	DoTest(testStep2, _L("Construct descriptor source 0002.2"), KErrGeneral);
sl@0
  5885
	if (iTestResult != EPass)
sl@0
  5886
		{
sl@0
  5887
		INFO_PRINTF1(_L(" - 0002.2 failed"));
sl@0
  5888
		failed = ETrue;
sl@0
  5889
		iTestResult = EPass;
sl@0
  5890
		}
sl@0
  5891
sl@0
  5892
sl@0
  5893
	// Test invalid configuration descriptor. (Filled with zeros)
sl@0
  5894
	Mem::FillZ(CONST_CAST(TUint8*, dataPtr.Ptr()), KTestDataSize);
sl@0
  5895
	TNewSourceTestStep testStep3(KUidMmfDescriptorSource, dataPtr);
sl@0
  5896
	DoTest(testStep3, _L("Construct descriptor source 0002.3"), KErrGeneral);
sl@0
  5897
	if (iTestResult != EPass)
sl@0
  5898
		{
sl@0
  5899
		INFO_PRINTF1(_L(" - 0002.3 failed"));
sl@0
  5900
		failed = ETrue;
sl@0
  5901
		iTestResult = EPass;
sl@0
  5902
		}
sl@0
  5903
sl@0
  5904
sl@0
  5905
	// Test invalid uid.
sl@0
  5906
	const TUid KInvalidUid = { 0x00690069 };
sl@0
  5907
	configDes().iDes = &dataDes;
sl@0
  5908
	configDes().iDesThreadId = RThread().Id();
sl@0
  5909
	configDes.SetLength(sizeof(TMMFDescriptorParams));
sl@0
  5910
sl@0
  5911
	TNewSourceTestStep testStep4(KInvalidUid, configDes);
sl@0
  5912
	DoTest(testStep4, _L("Construct descriptor source 0002.4"), KErrNotFound);
sl@0
  5913
	if (iTestResult != EPass)
sl@0
  5914
		{
sl@0
  5915
		INFO_PRINTF1(_L(" - 0002.4 failed"));
sl@0
  5916
		failed = ETrue;
sl@0
  5917
		iTestResult = EPass;
sl@0
  5918
		}
sl@0
  5919
sl@0
  5920
sl@0
  5921
	// Test valid uid, invalid descriptor.
sl@0
  5922
	// Note using a thread ID of 0 behaves differently on streaming so this
sl@0
  5923
	// test has been removed.
sl@0
  5924
	// configDes().iDesThreadId = 0;
sl@0
  5925
sl@0
  5926
	// TNewSourceTestStep testStep5(KUidMmfDescriptorSource, configDes);
sl@0
  5927
	// DoTest(testStep5, _L("Construct descriptor source 5"), KErrNotFound);
sl@0
  5928
sl@0
  5929
	// Test invalid (sink) uid.
sl@0
  5930
	// Note that ECom has no way of validating that Uids are of the correct type,
sl@0
  5931
	// so this test is removed. (It causes an unhandled exception)
sl@0
  5932
	// TNewSourceTestStep testStep6(KUidMmfDescriptorSink, configDes);
sl@0
  5933
	// DoTest(testStep6, _L("Construct descriptor source"), KErrNotFound);
sl@0
  5934
sl@0
  5935
	CleanupStack::PopAndDestroy(dataDes);
sl@0
  5936
	__MM_HEAP_MARKEND;
sl@0
  5937
sl@0
  5938
	return (failed ? EFail : EPass);
sl@0
  5939
	}
sl@0
  5940
sl@0
  5941
/**
sl@0
  5942
 *
sl@0
  5943
 * CTestStep_MMF_SRSSNK_U_0003 constructor
sl@0
  5944
 *
sl@0
  5945
 * @xxxx
sl@0
  5946
 *
sl@0
  5947
 */
sl@0
  5948
CTestStep_MMF_SRSSNK_U_0003::CTestStep_MMF_SRSSNK_U_0003()
sl@0
  5949
	{
sl@0
  5950
	// store the name of this test case
sl@0
  5951
	// this is the name that is used by the script file
sl@0
  5952
	// Each test step initialises it's own name
sl@0
  5953
	iTestStepName = _L("MM-MMF-SRSSNK-U-0003");
sl@0
  5954
	}
sl@0
  5955
sl@0
  5956
/**
sl@0
  5957
 *
sl@0
  5958
 * CTestStep_MMF_SRSSNK_U_0003 destructor
sl@0
  5959
 *
sl@0
  5960
 * @xxxx
sl@0
  5961
 *
sl@0
  5962
 */
sl@0
  5963
CTestStep_MMF_SRSSNK_U_0003::~CTestStep_MMF_SRSSNK_U_0003()
sl@0
  5964
	{
sl@0
  5965
	}
sl@0
  5966
sl@0
  5967
/**
sl@0
  5968
 *
sl@0
  5969
 * CTestStep_MMF_SRSSNK_U_0003
sl@0
  5970
 *
sl@0
  5971
 * Test creation/destruction of descriptor sink.
sl@0
  5972
 *
sl@0
  5973
 * @xxxx
sl@0
  5974
 */
sl@0
  5975
TVerdict CTestStep_MMF_SRSSNK_U_0003::DoTestStepL()
sl@0
  5976
	{
sl@0
  5977
	__MM_HEAP_MARK;
sl@0
  5978
sl@0
  5979
	// Create sink buffer.
sl@0
  5980
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  5981
	TPtr8 dataPtr(dataDes->Des());
sl@0
  5982
sl@0
  5983
	// Set it's length.
sl@0
  5984
	dataPtr.SetLength(KTestBufferSize);
sl@0
  5985
sl@0
  5986
	// Initialise config data.
sl@0
  5987
	TMMFDescriptorConfig configDes;
sl@0
  5988
	configDes().iDes = &dataPtr;
sl@0
  5989
	configDes().iDesThreadId = RThread().Id();
sl@0
  5990
sl@0
  5991
	// Test valid uid and configuration descriptor.
sl@0
  5992
	TNewSinkTestStep testStep(KUidMmfDescriptorSink, configDes);
sl@0
  5993
	DoTest(testStep, _L("Construct descriptor sink"), KErrNone);
sl@0
  5994
sl@0
  5995
	// Create a descriptor sink.
sl@0
  5996
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfDescriptorSink, configDes);
sl@0
  5997
	CleanupDeletePushL(sink);
sl@0
  5998
sl@0
  5999
	// Test that the sink is initialised correctly.
sl@0
  6000
	TSinkTypeTestStep testStep2(sink, KUidMmfDescriptorSink, KMMFFourCCCodeNULL, EFalse);
sl@0
  6001
	DoTest(testStep2, _L("Descriptor sink type"), KErrNone);
sl@0
  6002
sl@0
  6003
	TCanCreateSinkBufferTestStep testStep3(sink, EFalse);
sl@0
  6004
	DoTest(testStep3, _L("Descriptor sink CanCreateSinkBuffer"), KErrNone);
sl@0
  6005
sl@0
  6006
	// Test that the clip is initialised correctly.
sl@0
  6007
	CMMFClip *sinkClip = STATIC_CAST(CMMFClip*, sink);
sl@0
  6008
	TClipBytesFreeTestStep testStep4(sinkClip, KTestDataSize-KTestBufferSize);
sl@0
  6009
	DoTest(testStep4, _L("Descriptor sink BytesFree"), KErrNone);
sl@0
  6010
sl@0
  6011
	TClipSizeTestStep testStep5(sinkClip, KTestBufferSize);
sl@0
  6012
	DoTest(testStep5, _L("Descriptor sink Size"), KErrNone);
sl@0
  6013
sl@0
  6014
	TClipSetSizeTestStep testStep6(sinkClip, ETrue);
sl@0
  6015
	DoTest(testStep6, _L("Descriptor sink SetSize"), KErrNone);
sl@0
  6016
sl@0
  6017
	TClipDeleteTestStep testStep7(sinkClip);
sl@0
  6018
	DoTest(testStep7, _L("Descriptor sink Delete"), KErrNotSupported);
sl@0
  6019
sl@0
  6020
	CleanupStack::PopAndDestroy(sink);
sl@0
  6021
sl@0
  6022
	CleanupStack::PopAndDestroy(dataDes);
sl@0
  6023
	__MM_HEAP_MARKEND;
sl@0
  6024
	return iTestResult;
sl@0
  6025
	}
sl@0
  6026
sl@0
  6027
/**
sl@0
  6028
 *
sl@0
  6029
 * CTestStep_MMF_SRSSNK_U_0004 constructor
sl@0
  6030
 *
sl@0
  6031
 * @xxxx
sl@0
  6032
 *
sl@0
  6033
 */
sl@0
  6034
CTestStep_MMF_SRSSNK_U_0004::CTestStep_MMF_SRSSNK_U_0004()
sl@0
  6035
	{
sl@0
  6036
	// store the name of this test case
sl@0
  6037
	// this is the name that is used by the script file
sl@0
  6038
	// Each test step initialises it's own name
sl@0
  6039
	iTestStepName = _L("MM-MMF-SRSSNK-U-0004");
sl@0
  6040
	}
sl@0
  6041
sl@0
  6042
/**
sl@0
  6043
 *
sl@0
  6044
 * CTestStep_MMF_SRSSNK_U_0004 destructor
sl@0
  6045
 *
sl@0
  6046
 * @xxxx
sl@0
  6047
 *
sl@0
  6048
 */
sl@0
  6049
CTestStep_MMF_SRSSNK_U_0004::~CTestStep_MMF_SRSSNK_U_0004()
sl@0
  6050
	{
sl@0
  6051
	}
sl@0
  6052
sl@0
  6053
/**
sl@0
  6054
 *
sl@0
  6055
 * CTestStep_MMF_SRSSNK_U_0004
sl@0
  6056
 *
sl@0
  6057
 * Attempt to create descriptor sink using invalid config data.
sl@0
  6058
 *
sl@0
  6059
 * @xxxx
sl@0
  6060
 */
sl@0
  6061
TVerdict CTestStep_MMF_SRSSNK_U_0004::DoTestStepL()
sl@0
  6062
	{
sl@0
  6063
	__MM_HEAP_MARK;
sl@0
  6064
sl@0
  6065
	// Create sink buffer.
sl@0
  6066
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  6067
	TPtr8 dataPtr(dataDes->Des());
sl@0
  6068
sl@0
  6069
	// Initialise config data.
sl@0
  6070
	TMMFDescriptorConfig configDes;
sl@0
  6071
	configDes.SetLength(0);
sl@0
  6072
sl@0
  6073
	// Test invalid uid and configuration descriptor.
sl@0
  6074
	TNewSinkTestStep testStep(KNullUid, configDes);
sl@0
  6075
	DoTest(testStep, _L("Construct descriptor sink 1"), KErrArgument);
sl@0
  6076
sl@0
  6077
	// Test invalid configuration descriptor. (Zero length)
sl@0
  6078
	TNewSinkTestStep testStep2(KUidMmfDescriptorSink, configDes);
sl@0
  6079
	DoTest(testStep2, _L("Construct descriptor sink 2"), KErrGeneral);
sl@0
  6080
sl@0
  6081
	// Test invalid configuration descriptor. (Filled with zeros)
sl@0
  6082
	Mem::FillZ(CONST_CAST(TUint8*, dataPtr.Ptr()), KTestDataSize);
sl@0
  6083
	TNewSinkTestStep testStep3(KUidMmfDescriptorSink, dataPtr);
sl@0
  6084
	DoTest(testStep3, _L("Construct descriptor sink 3"), KErrGeneral);
sl@0
  6085
sl@0
  6086
	// Test invalid uid.
sl@0
  6087
	const TUid KInvalidUid = { 0x00690069 };
sl@0
  6088
	configDes().iDes = &dataDes;
sl@0
  6089
	configDes().iDesThreadId = RThread().Id();
sl@0
  6090
	configDes.SetLength(sizeof(TMMFDescriptorParams));
sl@0
  6091
sl@0
  6092
	TNewSinkTestStep testStep4(KInvalidUid, configDes);
sl@0
  6093
	DoTest(testStep4, _L("Construct descriptor sink 4"), KErrNotFound);
sl@0
  6094
sl@0
  6095
	// Test valid uid, invalid descriptor.
sl@0
  6096
	configDes().iDesThreadId = (TUint) -1;
sl@0
  6097
	TNewSinkTestStep testStep5(KUidMmfDescriptorSink, configDes);
sl@0
  6098
	DoTest(testStep5, _L("Construct descriptor sink 5"), KErrNotFound);
sl@0
  6099
sl@0
  6100
	// Test invalid (source) uid.
sl@0
  6101
	// Note that ECom has no way of validating that Uids are of the correct type,
sl@0
  6102
	// so this test is removed. (It causes an unhandled exception)
sl@0
  6103
	// TNewSinkTestStep testStep6(KUidMmfDescriptorSource, configDes);
sl@0
  6104
	// DoTest(testStep6, _L("Construct descriptor sink"), KErrNotFound);
sl@0
  6105
sl@0
  6106
	CleanupStack::PopAndDestroy(dataDes);
sl@0
  6107
	__MM_HEAP_MARKEND;
sl@0
  6108
	return iTestResult;
sl@0
  6109
	}
sl@0
  6110
sl@0
  6111
/**
sl@0
  6112
 *
sl@0
  6113
 * CTestStep_MMF_SRSSNK_U_0005 constructor
sl@0
  6114
 *
sl@0
  6115
 * @xxxx
sl@0
  6116
 *
sl@0
  6117
 */
sl@0
  6118
CTestStep_MMF_SRSSNK_U_0005::CTestStep_MMF_SRSSNK_U_0005()
sl@0
  6119
	{
sl@0
  6120
	// store the name of this test case
sl@0
  6121
	// this is the name that is used by the script file
sl@0
  6122
	// Each test step initialises it's own name
sl@0
  6123
	iTestStepName = _L("MM-MMF-SRSSNK-U-0005");
sl@0
  6124
	}
sl@0
  6125
sl@0
  6126
/**
sl@0
  6127
 *
sl@0
  6128
 * CTestStep_MMF_SRSSNK_U_0005 destructor
sl@0
  6129
 *
sl@0
  6130
 * @xxxx
sl@0
  6131
 *
sl@0
  6132
 */
sl@0
  6133
CTestStep_MMF_SRSSNK_U_0005::~CTestStep_MMF_SRSSNK_U_0005()
sl@0
  6134
	{
sl@0
  6135
	}
sl@0
  6136
sl@0
  6137
/**
sl@0
  6138
 *
sl@0
  6139
 * CTestStep_MMF_SRSSNK_U_0005
sl@0
  6140
 *
sl@0
  6141
 * Functional test of descriptor source.
sl@0
  6142
 * Misc. functions test.
sl@0
  6143
 *
sl@0
  6144
 * @xxxx
sl@0
  6145
 */
sl@0
  6146
TVerdict CTestStep_MMF_SRSSNK_U_0005::DoTestStepL()
sl@0
  6147
	{
sl@0
  6148
	__MM_HEAP_MARK;
sl@0
  6149
	// Create source buffer.
sl@0
  6150
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  6151
	TPtr8 dataPtr(dataDes->Des());
sl@0
  6152
sl@0
  6153
	// Initialise config data.
sl@0
  6154
	TMMFDescriptorConfig configDes;
sl@0
  6155
	configDes().iDes = &dataPtr;
sl@0
  6156
	configDes().iDesThreadId = RThread().Id();
sl@0
  6157
sl@0
  6158
	// Create a dummy buffer.
sl@0
  6159
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  6160
	CleanupStack::PushL(validBuffer);
sl@0
  6161
sl@0
  6162
	// Create a dummy sink.
sl@0
  6163
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
  6164
	CleanupStack::PushL(dummySink);
sl@0
  6165
sl@0
  6166
	// Create a descriptor source.
sl@0
  6167
	MDataSource* source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes);
sl@0
  6168
	CleanupDeletePushL(source);
sl@0
  6169
sl@0
  6170
	// Test create source buffer.
sl@0
  6171
	TCreateSourceBuffer1TestStep testStep(ESourceTypeDes, dummySink, KUidMmfDescriptorBuffer, ETrue);
sl@0
  6172
	DoTest(testStep, _L("Descriptor source CreateSourceBuffer1"), KErrNotSupported);
sl@0
  6173
sl@0
  6174
	TCreateSourceBuffer2TestStep testStep2(ESourceTypeDes, dummySink, validBuffer, KUidMmfDescriptorBuffer, ETrue);
sl@0
  6175
	DoTest(testStep2, _L("Descriptor source CreateSourceBuffer2"), KErrNotSupported);
sl@0
  6176
sl@0
  6177
	// Test default base class fns. (These should all do nothing)
sl@0
  6178
	TSourceThreadLogonTestStep testStep3(source, dummySink);
sl@0
  6179
	DoTest(testStep3, _L("Descriptor source SourceThreadLogon"), KErrNone);
sl@0
  6180
sl@0
  6181
	TNegotiateSourceTestStep testStep4(source, dummySink);
sl@0
  6182
	DoTest(testStep4, _L("Descriptor source NegotiateSourceL"), KErrNone);
sl@0
  6183
sl@0
  6184
	source->SourcePrimeL();
sl@0
  6185
	source->SourcePlayL();
sl@0
  6186
	source->SourcePauseL();
sl@0
  6187
	source->SourceStopL();
sl@0
  6188
sl@0
  6189
	TMMFPrioritySettings prioritySettings;
sl@0
  6190
	source->SetSourcePrioritySettings(prioritySettings);
sl@0
  6191
sl@0
  6192
	CleanupStack::PopAndDestroy(source);
sl@0
  6193
sl@0
  6194
sl@0
  6195
	CleanupStack::PopAndDestroy(3, dataDes); // dummySink, validBuffer, dataDes
sl@0
  6196
	__MM_HEAP_MARKEND;
sl@0
  6197
sl@0
  6198
	return iTestResult;
sl@0
  6199
	}
sl@0
  6200
sl@0
  6201
/**
sl@0
  6202
 *
sl@0
  6203
 * CTestStep_MMF_SRSSNK_U_0006 constructor
sl@0
  6204
 *
sl@0
  6205
 * @xxxx
sl@0
  6206
 *
sl@0
  6207
 */
sl@0
  6208
CTestStep_MMF_SRSSNK_U_0006::CTestStep_MMF_SRSSNK_U_0006()
sl@0
  6209
	{
sl@0
  6210
	// store the name of this test case
sl@0
  6211
	// this is the name that is used by the script file
sl@0
  6212
	// Each test step initialises it's own name
sl@0
  6213
	iTestStepName = _L("MM-MMF-SRSSNK-U-0006");
sl@0
  6214
	}
sl@0
  6215
sl@0
  6216
/**
sl@0
  6217
 *
sl@0
  6218
 * CTestStep_MMF_SRSSNK_U_0006 destructor
sl@0
  6219
 *
sl@0
  6220
 * @xxxx
sl@0
  6221
 *
sl@0
  6222
 */
sl@0
  6223
CTestStep_MMF_SRSSNK_U_0006::~CTestStep_MMF_SRSSNK_U_0006()
sl@0
  6224
	{
sl@0
  6225
	}
sl@0
  6226
sl@0
  6227
/**
sl@0
  6228
 *
sl@0
  6229
 * CTestStep_MMF_SRSSNK_U_0006
sl@0
  6230
 *
sl@0
  6231
 * Functional test of descriptor source.
sl@0
  6232
 * FillBufferL() test.
sl@0
  6233
 *
sl@0
  6234
 * @xxxx
sl@0
  6235
 */
sl@0
  6236
TVerdict CTestStep_MMF_SRSSNK_U_0006::DoTestStepL()
sl@0
  6237
	{
sl@0
  6238
	__MM_HEAP_MARK;
sl@0
  6239
	// Create source buffer.
sl@0
  6240
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  6241
	TPtr8 dataPtr(dataDes->Des());
sl@0
  6242
sl@0
  6243
	// Set it's length
sl@0
  6244
	dataPtr.SetLength(KTestDataSize);
sl@0
  6245
sl@0
  6246
	// Randomise source buffer.
sl@0
  6247
	TTime seedTime;
sl@0
  6248
	seedTime.UniversalTime();
sl@0
  6249
	TInt64 seed = seedTime.Int64();
sl@0
  6250
sl@0
  6251
	TInt i;
sl@0
  6252
	for (i = 0 ; i<KTestDataSize ; i++)
sl@0
  6253
		dataPtr[i] = TUint8(Math::Rand(seed));
sl@0
  6254
sl@0
  6255
	// Initialise config data.
sl@0
  6256
	TMMFDescriptorConfig configDes;
sl@0
  6257
	configDes().iDes = &dataPtr;
sl@0
  6258
	configDes().iDesThreadId = RThread().Id();
sl@0
  6259
sl@0
  6260
	// Create zero length buffer.
sl@0
  6261
	CMMFDescriptorBuffer* zeroBuffer = CMMFDescriptorBuffer::NewL(0);
sl@0
  6262
	CleanupStack::PushL(zeroBuffer);
sl@0
  6263
sl@0
  6264
	// Create big buffer.
sl@0
  6265
	CMMFDescriptorBuffer* bigBuffer = CMMFDescriptorBuffer::NewL(KTestOverDataSize);
sl@0
  6266
	CleanupStack::PushL(bigBuffer);
sl@0
  6267
sl@0
  6268
	// Create valid buffer.
sl@0
  6269
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  6270
	CleanupStack::PushL(validBuffer);
sl@0
  6271
sl@0
  6272
	// Create dummy sink.
sl@0
  6273
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
  6274
	CleanupStack::PushL(dummySink);
sl@0
  6275
sl@0
  6276
	// Create a descriptor source.
sl@0
  6277
	MDataSource* source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes);
sl@0
  6278
	CleanupDeletePushL(source);
sl@0
  6279
sl@0
  6280
	// Create test (invalid) buffer.
sl@0
  6281
	CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer;
sl@0
  6282
	CleanupStack::PushL(testBuffer);
sl@0
  6283
sl@0
  6284
	// Test invalid FillBufferL.
sl@0
  6285
	TFillBufferTestStep testStep(source, testBuffer, dummySink, dataPtr);
sl@0
  6286
	DoTest(testStep, _L("Descriptor source FillBufferL"), KErrNotSupported);
sl@0
  6287
	CleanupStack::PopAndDestroy(testBuffer);
sl@0
  6288
sl@0
  6289
	// Test valid fill.
sl@0
  6290
	TFillBufferTestStep testStep2(source, validBuffer, dummySink, dataPtr, KTestBufferSize);
sl@0
  6291
	DoTest(testStep2, _L("Descriptor source FillBufferL"), KErrNone);
sl@0
  6292
sl@0
  6293
	CleanupStack::PopAndDestroy(source);
sl@0
  6294
sl@0
  6295
	source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes);
sl@0
  6296
	CleanupDeletePushL(source);
sl@0
  6297
sl@0
  6298
	// Test complete fill.
sl@0
  6299
	TFillBufferTestStep testStep3(source, validBuffer, dummySink, dataPtr);
sl@0
  6300
sl@0
  6301
	const TUint8* baseDataPtr = dataPtr.Ptr();
sl@0
  6302
	const TUint8* sourcePtr = baseDataPtr;
sl@0
  6303
	TInt bufferSize;
sl@0
  6304
	do
sl@0
  6305
		{
sl@0
  6306
		testStep3.SetReadLength(Min(KTestBufferSize, KTestDataSize - (sourcePtr-baseDataPtr)));
sl@0
  6307
		DoTestStep(testStep3, _L("Descriptor source FillBufferL"), KErrNone);
sl@0
  6308
sl@0
  6309
		bufferSize = validBuffer->BufferSize();
sl@0
  6310
		sourcePtr += bufferSize;
sl@0
  6311
		} while (bufferSize == KTestBufferSize);
sl@0
  6312
sl@0
  6313
	CleanupStack::PopAndDestroy(source);
sl@0
  6314
sl@0
  6315
	source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes);
sl@0
  6316
	CleanupDeletePushL(source);
sl@0
  6317
sl@0
  6318
	// Test complete fill with alloc fail.
sl@0
  6319
	TFillBufferTestStep testStep4(source, validBuffer, dummySink, dataPtr);
sl@0
  6320
sl@0
  6321
	sourcePtr = baseDataPtr;
sl@0
  6322
	do
sl@0
  6323
		{
sl@0
  6324
		testStep4.SetReadLength(Min(KTestBufferSize, KTestDataSize - (sourcePtr-baseDataPtr)));
sl@0
  6325
		DoTestStepWithAllocFail(testStep4, _L("Descriptor source FillBufferL"), KErrNone);
sl@0
  6326
sl@0
  6327
		bufferSize = validBuffer->BufferSize();
sl@0
  6328
		sourcePtr += bufferSize;
sl@0
  6329
		} while (bufferSize == KTestBufferSize);
sl@0
  6330
sl@0
  6331
	// Test additional fill request.
sl@0
  6332
	TFillBufferTestStep testStep5(source, validBuffer, dummySink, dataPtr);
sl@0
  6333
	DoTest(testStep5, _L("Descriptor source FillBufferL"), KErrNone);
sl@0
  6334
sl@0
  6335
	CleanupStack::PopAndDestroy(source);
sl@0
  6336
sl@0
  6337
	source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes);
sl@0
  6338
	CleanupDeletePushL(source);
sl@0
  6339
sl@0
  6340
	// Test zero length read.
sl@0
  6341
	TFillBufferTestStep testStep6(source, zeroBuffer, dummySink, dataPtr);
sl@0
  6342
	DoTest(testStep6, _L("Descriptor source FillBufferL"), KErrNone);
sl@0
  6343
sl@0
  6344
	// Test over size read.
sl@0
  6345
	TFillBufferTestStep testStep7(source, bigBuffer, dummySink, dataPtr, KTestDataSize);
sl@0
  6346
	DoTestStep(testStep7, _L("Descriptor source FillBufferL"), KErrNone);
sl@0
  6347
sl@0
  6348
	CleanupStack::PopAndDestroy(source);
sl@0
  6349
sl@0
  6350
	source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes);
sl@0
  6351
	CleanupDeletePushL(source);
sl@0
  6352
sl@0
  6353
	testStep7.SetPosition(0);
sl@0
  6354
	DoTestStepWithAllocFail(testStep7, _L("Descriptor source FillBufferL"), KErrNone);
sl@0
  6355
sl@0
  6356
	CleanupStack::PopAndDestroy(5, zeroBuffer); // source, dummySink, validBuffer, bigBuffer, zeroBuffer
sl@0
  6357
sl@0
  6358
	CleanupStack::PopAndDestroy(dataDes); // dataDes
sl@0
  6359
sl@0
  6360
	__MM_HEAP_MARKEND;
sl@0
  6361
	return iTestResult;
sl@0
  6362
	}
sl@0
  6363
sl@0
  6364
/**
sl@0
  6365
 *
sl@0
  6366
 * CTestStep_MMF_SRSSNK_U_0007 constructor
sl@0
  6367
 *
sl@0
  6368
 * @xxxx
sl@0
  6369
 *
sl@0
  6370
 */
sl@0
  6371
sl@0
  6372
CTestStep_MMF_SRSSNK_U_0007::CTestStep_MMF_SRSSNK_U_0007()
sl@0
  6373
: CTestStep_MMF_SRSSNK(EFalse)
sl@0
  6374
	{
sl@0
  6375
	// store the name of this test case
sl@0
  6376
	// this is the name that is used by the script file
sl@0
  6377
	// Each test step initialises it's own name
sl@0
  6378
	iTestStepName = _L("MM-MMF-SRSSNK-U-0007");
sl@0
  6379
	}
sl@0
  6380
sl@0
  6381
/**
sl@0
  6382
 *
sl@0
  6383
 * CTestStep_MMF_SRSSNK_U_0007 destructor
sl@0
  6384
 *
sl@0
  6385
 * @xxxx
sl@0
  6386
 *
sl@0
  6387
 */
sl@0
  6388
CTestStep_MMF_SRSSNK_U_0007::~CTestStep_MMF_SRSSNK_U_0007()
sl@0
  6389
	{
sl@0
  6390
	}
sl@0
  6391
sl@0
  6392
/**
sl@0
  6393
 *
sl@0
  6394
 * CTestStep_MMF_SRSSNK_U_0007
sl@0
  6395
 *
sl@0
  6396
 * Functional test of descriptor source.
sl@0
  6397
 * BufferEmptiedL() panic test.
sl@0
  6398
 *
sl@0
  6399
 * @xxxx
sl@0
  6400
 */
sl@0
  6401
TVerdict CTestStep_MMF_SRSSNK_U_0007::DoTestStepL()
sl@0
  6402
	{
sl@0
  6403
	__MM_HEAP_MARK;
sl@0
  6404
	// This test fails if running a debug StdSourcesAndSinks dll.
sl@0
  6405
	// So only perform the test on target.
sl@0
  6406
sl@0
  6407
	// Create source buffer.
sl@0
  6408
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  6409
	TPtr8 dataPtr(dataDes->Des());
sl@0
  6410
sl@0
  6411
	// Initialise config data.
sl@0
  6412
	TMMFDescriptorConfig configDes;
sl@0
  6413
	configDes().iDes = &dataPtr;
sl@0
  6414
	configDes().iDesThreadId = RThread().Id();
sl@0
  6415
sl@0
  6416
	// Create valid buffer.
sl@0
  6417
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  6418
	CleanupStack::PushL(validBuffer);
sl@0
  6419
sl@0
  6420
	// Create source descriptor.
sl@0
  6421
	MDataSource* source = MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes);
sl@0
  6422
	CleanupDeletePushL(source);
sl@0
  6423
sl@0
  6424
	// Test BufferEmptiedL
sl@0
  6425
	source->BufferEmptiedL(validBuffer);
sl@0
  6426
sl@0
  6427
	CleanupStack::PopAndDestroy(2, validBuffer); // source, validBuffer
sl@0
  6428
sl@0
  6429
	CleanupStack::PopAndDestroy(dataDes);
sl@0
  6430
sl@0
  6431
	__MM_HEAP_MARKEND;
sl@0
  6432
	return iTestResult;
sl@0
  6433
	}
sl@0
  6434
sl@0
  6435
/**
sl@0
  6436
 *
sl@0
  6437
 * CTestStep_MMF_SRSSNK_U_0008 constructor
sl@0
  6438
 *
sl@0
  6439
 * @xxxx
sl@0
  6440
 *
sl@0
  6441
 */
sl@0
  6442
CTestStep_MMF_SRSSNK_U_0008::CTestStep_MMF_SRSSNK_U_0008()
sl@0
  6443
	{
sl@0
  6444
	// store the name of this test case
sl@0
  6445
	// this is the name that is used by the script file
sl@0
  6446
	// Each test step initialises it's own name
sl@0
  6447
	iTestStepName = _L("MM-MMF-SRSSNK-U-0008");
sl@0
  6448
	}
sl@0
  6449
sl@0
  6450
/**
sl@0
  6451
 *
sl@0
  6452
 * CTestStep_MMF_SRSSNK_U_0008 destructor
sl@0
  6453
 *
sl@0
  6454
 * @xxxx
sl@0
  6455
 *
sl@0
  6456
 */
sl@0
  6457
CTestStep_MMF_SRSSNK_U_0008::~CTestStep_MMF_SRSSNK_U_0008()
sl@0
  6458
	{
sl@0
  6459
	}
sl@0
  6460
sl@0
  6461
/**
sl@0
  6462
 *
sl@0
  6463
 * CTestStep_MMF_SRSSNK_U_0008
sl@0
  6464
 *
sl@0
  6465
 * Functional test of descriptor source.
sl@0
  6466
 * ReadBufferL() test.
sl@0
  6467
 *
sl@0
  6468
 * @xxxx
sl@0
  6469
 */
sl@0
  6470
TVerdict CTestStep_MMF_SRSSNK_U_0008::DoTestStepL()
sl@0
  6471
	{
sl@0
  6472
	__MM_HEAP_MARK;
sl@0
  6473
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  6474
	TPtr8 dataPtr(dataDes->Des());
sl@0
  6475
sl@0
  6476
	// Set it's length.
sl@0
  6477
	dataPtr.SetLength(KTestDataSize);
sl@0
  6478
sl@0
  6479
	TTime seedTime;
sl@0
  6480
	seedTime.UniversalTime();
sl@0
  6481
	TInt64 seed = seedTime.Int64();
sl@0
  6482
	for (TInt i = 0 ; i<KTestDataSize ; i++)
sl@0
  6483
		dataPtr[i] = TUint8(Math::Rand(seed));
sl@0
  6484
sl@0
  6485
	// Initialise config data.
sl@0
  6486
	TMMFDescriptorConfig configDes;
sl@0
  6487
	configDes().iDes = &dataPtr;
sl@0
  6488
	configDes().iDesThreadId = RThread().Id();
sl@0
  6489
sl@0
  6490
	// Create zero length buffer.
sl@0
  6491
	CMMFDescriptorBuffer* zeroBuffer = CMMFDescriptorBuffer::NewL(0);
sl@0
  6492
	CleanupStack::PushL(zeroBuffer);
sl@0
  6493
sl@0
  6494
	// Create big buffer.
sl@0
  6495
	CMMFDescriptorBuffer* bigBuffer = CMMFDescriptorBuffer::NewL(KTestOverDataSize);
sl@0
  6496
	CleanupStack::PushL(bigBuffer);
sl@0
  6497
sl@0
  6498
	// Create valid buffer.
sl@0
  6499
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  6500
	CleanupStack::PushL(validBuffer);
sl@0
  6501
sl@0
  6502
	// Create dummy sink.
sl@0
  6503
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
  6504
	CleanupStack::PushL(dummySink);
sl@0
  6505
sl@0
  6506
	// Create source descriptor.
sl@0
  6507
	CMMFClip* source = STATIC_CAST(CMMFClip*, MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes));
sl@0
  6508
	CleanupStack::PushL(source);
sl@0
  6509
sl@0
  6510
	// Create test (invalid) buffer.
sl@0
  6511
	CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer;
sl@0
  6512
	CleanupStack::PushL(testBuffer);
sl@0
  6513
sl@0
  6514
	// Test ReadBufferL (these tests should fail)
sl@0
  6515
	TClipReadBufferTestStep testStep(source, testBuffer, 0, dummySink, dataPtr);
sl@0
  6516
	DoTest(testStep, _L("Descriptor source ReadBufferL"), KErrNotSupported);
sl@0
  6517
sl@0
  6518
	TClipReadBuffer2TestStep testStep2(source, testBuffer, 0, dummySink, dataPtr, KTestBufferSize);
sl@0
  6519
	DoTest(testStep2, _L("Descriptor source ReadBufferL"), KErrNotSupported);
sl@0
  6520
sl@0
  6521
	TClipReadBuffer3TestStep testStep3(source, testBuffer, 0, dataPtr, KTestBufferSize);
sl@0
  6522
	DoTest(testStep3, _L("Descriptor source ReadBufferL"), KErrNotSupported);
sl@0
  6523
	CleanupStack::PopAndDestroy(testBuffer);
sl@0
  6524
sl@0
  6525
	// Test reading from the beginning, middle, and end of the descriptor.
sl@0
  6526
	TClipReadBufferTestStep testStep4(source, validBuffer, 0, dummySink, dataPtr, KTestReadSize);
sl@0
  6527
	DoTest(testStep4, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6528
sl@0
  6529
	testStep4.SetPosition(1);
sl@0
  6530
	DoTest(testStep4, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6531
sl@0
  6532
	testStep4.SetPosition(KTestDataSize/2);
sl@0
  6533
	DoTest(testStep4, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6534
sl@0
  6535
	testStep4.SetPosition(KTestDataSize/2 + 1);
sl@0
  6536
	DoTest(testStep4, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6537
sl@0
  6538
	TClipReadBuffer4TestStep testStep5(source, validBuffer, KTestDataSize - 10, dummySink, dataPtr, KTestReadSize);
sl@0
  6539
	testStep5.SetExpectedReadLength(10);
sl@0
  6540
	DoTest(testStep5, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6541
sl@0
  6542
	testStep5.SetPosition(KTestDataSize);
sl@0
  6543
	testStep5.SetExpectedReadLength(0);
sl@0
  6544
	DoTest(testStep5, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6545
sl@0
  6546
	testStep5.SetPosition(KTestDataSize + 2);
sl@0
  6547
	DoTest(testStep5, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6548
sl@0
  6549
	// Attempt to read nothing.
sl@0
  6550
	TClipReadBufferTestStep testStep6(source, validBuffer, 0, dummySink, dataPtr);
sl@0
  6551
	DoTest(testStep6, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6552
sl@0
  6553
	// Attempt to read more data than can fit in the buffer.
sl@0
  6554
	testStep6.SetReadLength(KTestOverReadSize);
sl@0
  6555
	DoTest(testStep6, _L("Descriptor source ReadBufferL"), KErrOverflow);
sl@0
  6556
sl@0
  6557
	// Attempt to read into a zero length buffer.
sl@0
  6558
	TClipReadBufferTestStep testStep7(source, zeroBuffer, 0, dummySink, dataPtr);
sl@0
  6559
	DoTest(testStep7, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6560
sl@0
  6561
	// Attempt to read more data than present in the source.
sl@0
  6562
	TClipReadBuffer4TestStep testStep8(source, bigBuffer, 0, dummySink, dataPtr, KTestOverDataSize);
sl@0
  6563
	testStep8.SetExpectedReadLength(KTestDataSize);
sl@0
  6564
	DoTest(testStep8, _L("File source ReadBufferL"), KErrNone);
sl@0
  6565
sl@0
  6566
	// Repeat reads without supplying the length to read.
sl@0
  6567
	TClipReadBuffer2TestStep testStep9(source, validBuffer, 0, dummySink, dataPtr, KTestBufferSize);
sl@0
  6568
	DoTest(testStep9, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6569
sl@0
  6570
	testStep9.SetPosition(1);
sl@0
  6571
	DoTest(testStep9, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6572
sl@0
  6573
	testStep9.SetPosition(KTestDataSize/2);
sl@0
  6574
	DoTest(testStep9, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6575
sl@0
  6576
	testStep9.SetPosition(KTestDataSize/2 + 1);
sl@0
  6577
	DoTest(testStep9, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6578
sl@0
  6579
	testStep9.SetPosition(KTestDataSize - 10);
sl@0
  6580
	testStep9.SetReadLength(10);
sl@0
  6581
	DoTest(testStep9, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6582
sl@0
  6583
	testStep9.SetPosition(KTestDataSize);
sl@0
  6584
	testStep9.SetReadLength(0);
sl@0
  6585
	DoTest(testStep9, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6586
sl@0
  6587
	testStep9.SetPosition(KTestDataSize + 2);
sl@0
  6588
	DoTest(testStep9, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6589
sl@0
  6590
	TClipReadBuffer2TestStep testStep10(source, zeroBuffer, 0, dummySink, dataPtr, 0);
sl@0
  6591
	DoTest(testStep10, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6592
sl@0
  6593
	TClipReadBuffer2TestStep testStep11(source, bigBuffer, 0, dummySink, dataPtr, KTestDataSize);
sl@0
  6594
	DoTest(testStep11, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6595
sl@0
  6596
	// Repeat reads without supplying the length, or a sink.
sl@0
  6597
	TClipReadBuffer3TestStep testStep12(source, validBuffer, 0, dataPtr, KTestBufferSize);
sl@0
  6598
	DoTest(testStep12, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6599
sl@0
  6600
	testStep12.SetPosition(1);
sl@0
  6601
	DoTest(testStep12, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6602
sl@0
  6603
	testStep12.SetPosition(KTestDataSize/2);
sl@0
  6604
	DoTest(testStep12, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6605
sl@0
  6606
	testStep12.SetPosition(KTestDataSize/2 + 1);
sl@0
  6607
	DoTest(testStep12, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6608
sl@0
  6609
	testStep12.SetPosition(KTestDataSize - 10);
sl@0
  6610
	testStep12.SetReadLength(10);
sl@0
  6611
	DoTest(testStep12, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6612
sl@0
  6613
	testStep12.SetPosition(KTestDataSize);
sl@0
  6614
	testStep12.SetReadLength(0);
sl@0
  6615
	DoTest(testStep12, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6616
sl@0
  6617
	testStep12.SetPosition(KTestDataSize + 2);
sl@0
  6618
	DoTest(testStep12, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6619
sl@0
  6620
	TClipReadBuffer3TestStep testStep13(source, zeroBuffer, 0, dataPtr, 0);
sl@0
  6621
	DoTest(testStep13, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6622
sl@0
  6623
	TClipReadBuffer3TestStep testStep14(source, bigBuffer, 0, dataPtr, KTestDataSize);
sl@0
  6624
	DoTest(testStep14, _L("Descriptor source ReadBufferL"), KErrNone);
sl@0
  6625
sl@0
  6626
	CleanupStack::PopAndDestroy(5, zeroBuffer); // source, dummySink, validBuffer, bigBuffer, zeroBuffer
sl@0
  6627
sl@0
  6628
	CleanupStack::PopAndDestroy(dataDes); // dataDes
sl@0
  6629
sl@0
  6630
	__MM_HEAP_MARKEND;
sl@0
  6631
	return iTestResult;
sl@0
  6632
	}
sl@0
  6633
sl@0
  6634
/**
sl@0
  6635
 *
sl@0
  6636
 * CTestStep_MMF_SRSSNK_U_0009 constructor
sl@0
  6637
 *
sl@0
  6638
 * @xxxx
sl@0
  6639
 *
sl@0
  6640
 */
sl@0
  6641
CTestStep_MMF_SRSSNK_U_0009::CTestStep_MMF_SRSSNK_U_0009()
sl@0
  6642
	{
sl@0
  6643
	// store the name of this test case
sl@0
  6644
	// this is the name that is used by the script file
sl@0
  6645
	// Each test step initialises it's own name
sl@0
  6646
	iTestStepName = _L("MM-MMF-SRSSNK-U-0009");
sl@0
  6647
	}
sl@0
  6648
sl@0
  6649
/**
sl@0
  6650
 *
sl@0
  6651
 * CTestStep_MMF_SRSSNK_U_0009 destructor
sl@0
  6652
 *
sl@0
  6653
 * @xxxx
sl@0
  6654
 *
sl@0
  6655
 */
sl@0
  6656
sl@0
  6657
CTestStep_MMF_SRSSNK_U_0009::~CTestStep_MMF_SRSSNK_U_0009()
sl@0
  6658
	{
sl@0
  6659
	}
sl@0
  6660
sl@0
  6661
/**
sl@0
  6662
 *
sl@0
  6663
 * CTestStep_MMF_SRSSNK_U_0009
sl@0
  6664
 *
sl@0
  6665
 * Functional test of descriptor source.
sl@0
  6666
 * Source custom commands test.
sl@0
  6667
 *
sl@0
  6668
 * @xxxx
sl@0
  6669
 */
sl@0
  6670
TVerdict CTestStep_MMF_SRSSNK_U_0009::DoTestStepL()
sl@0
  6671
	{
sl@0
  6672
	__MM_HEAP_MARK;
sl@0
  6673
sl@0
  6674
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  6675
	TPtr8 dataPtr(dataDes->Des());
sl@0
  6676
sl@0
  6677
	// Initialise config data.
sl@0
  6678
	TMMFDescriptorConfig configDes;
sl@0
  6679
	configDes().iDes = &dataPtr;
sl@0
  6680
	configDes().iDesThreadId = RThread().Id();
sl@0
  6681
sl@0
  6682
	TUid testControllerUid = { KMmfTestControllerUid };
sl@0
  6683
	RMMFController dummyController;
sl@0
  6684
	TMMFPrioritySettings prioritySettings;
sl@0
  6685
	TMMFMessageDestinationPckg destination;
sl@0
  6686
sl@0
  6687
	User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings));
sl@0
  6688
	CleanupClosePushL(dummyController);
sl@0
  6689
sl@0
  6690
	TBuf8<1> dummyArgs;
sl@0
  6691
	User::LeaveIfError(dummyController.AddDataSource(KUidMmfDescriptorSource, configDes));
sl@0
  6692
	TInt err = dummyController.CustomCommandSync(destination, KDescriptorSource, dummyArgs, dummyArgs);
sl@0
  6693
	if (err != KErrNotSupported)
sl@0
  6694
		{
sl@0
  6695
		INFO_PRINTF2(_L("Descriptor source SourceCustomCommand: Expecting KErrNotSupported, actually got %d"), err);
sl@0
  6696
		iTestResult = EFail;
sl@0
  6697
		}
sl@0
  6698
sl@0
  6699
	CleanupStack::PopAndDestroy(); // dummyController
sl@0
  6700
sl@0
  6701
	CleanupStack::PopAndDestroy(dataDes);
sl@0
  6702
sl@0
  6703
	__MM_HEAP_MARKEND;
sl@0
  6704
	return iTestResult;
sl@0
  6705
	}
sl@0
  6706
sl@0
  6707
sl@0
  6708
/**
sl@0
  6709
 *
sl@0
  6710
 * CTestStep_MMF_SRSSNK_U_0010 constructor
sl@0
  6711
 *
sl@0
  6712
 * @xxxx
sl@0
  6713
 *
sl@0
  6714
 */
sl@0
  6715
CTestStep_MMF_SRSSNK_U_0010::CTestStep_MMF_SRSSNK_U_0010()
sl@0
  6716
	{
sl@0
  6717
	// store the name of this test case
sl@0
  6718
	// this is the name that is used by the script file
sl@0
  6719
	// Each test step initialises it's own name
sl@0
  6720
	iTestStepName = _L("MM-MMF-SRSSNK-U-0010");
sl@0
  6721
	}
sl@0
  6722
sl@0
  6723
/**
sl@0
  6724
 *
sl@0
  6725
 * CTestStep_MMF_SRSSNK_U_0010 destructor
sl@0
  6726
 *
sl@0
  6727
 * @xxxx
sl@0
  6728
 *
sl@0
  6729
 */
sl@0
  6730
sl@0
  6731
CTestStep_MMF_SRSSNK_U_0010::~CTestStep_MMF_SRSSNK_U_0010()
sl@0
  6732
	{
sl@0
  6733
	}
sl@0
  6734
sl@0
  6735
/**
sl@0
  6736
 *
sl@0
  6737
 * CTestStep_MMF_SRSSNK_U_0010
sl@0
  6738
 *
sl@0
  6739
 * Functional test of descriptor sink.
sl@0
  6740
 * Misc. functions test.
sl@0
  6741
 *
sl@0
  6742
 * @xxxx
sl@0
  6743
 */
sl@0
  6744
TVerdict CTestStep_MMF_SRSSNK_U_0010::DoTestStepL()
sl@0
  6745
	{
sl@0
  6746
	__MM_HEAP_MARK;
sl@0
  6747
sl@0
  6748
	// Create sink buffer.
sl@0
  6749
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  6750
	TPtr8 dataPtr(dataDes->Des());
sl@0
  6751
sl@0
  6752
	// Initialise config data.
sl@0
  6753
	TMMFDescriptorConfig configDes;
sl@0
  6754
	configDes().iDes = &dataPtr;
sl@0
  6755
	configDes().iDesThreadId = RThread().Id();
sl@0
  6756
sl@0
  6757
	// Create a dummy sink.
sl@0
  6758
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
  6759
	CleanupStack::PushL(dummySource);
sl@0
  6760
sl@0
  6761
	// Create desciptor sink.
sl@0
  6762
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfDescriptorSink, configDes);
sl@0
  6763
	CleanupDeletePushL(sink);
sl@0
  6764
sl@0
  6765
	// Test create sink buffer.
sl@0
  6766
	TCreateSinkBufferTestStep0 testStep(sink, KUidMmfDescriptorBuffer, ETrue, NULL);
sl@0
  6767
	DoTest(testStep, _L("Descriptor sink CreateSinkBuffer"), KErrNotSupported);
sl@0
  6768
sl@0
  6769
	// Test default base class fns. (These should all do nothing)
sl@0
  6770
	TSinkThreadLogonTestStep testStep2(sink, dummySource);
sl@0
  6771
	DoTest(testStep2, _L("Descriptor sink SinkThreadLogon"), KErrNone);
sl@0
  6772
sl@0
  6773
	TNegotiateTestStep testStep3(sink, dummySource);
sl@0
  6774
	DoTest(testStep3, _L("Descriptor sink NegotiateL"), KErrNone);
sl@0
  6775
sl@0
  6776
	sink->SinkPrimeL();
sl@0
  6777
	sink->SinkPlayL();
sl@0
  6778
	sink->SinkPauseL();
sl@0
  6779
	sink->SinkStopL();
sl@0
  6780
sl@0
  6781
	TMMFPrioritySettings prioritySettings;
sl@0
  6782
	sink->SetSinkPrioritySettings(prioritySettings);
sl@0
  6783
sl@0
  6784
	CleanupStack::PopAndDestroy(sink);
sl@0
  6785
sl@0
  6786
	CleanupStack::PopAndDestroy(2, dataDes); // dummySource, dataDes
sl@0
  6787
sl@0
  6788
	__MM_HEAP_MARKEND;
sl@0
  6789
	return iTestResult;
sl@0
  6790
	}
sl@0
  6791
sl@0
  6792
/**
sl@0
  6793
 *
sl@0
  6794
 * CTestStep_MMF_SRSSNK_U_0011 constructor
sl@0
  6795
 *
sl@0
  6796
 * @xxxx
sl@0
  6797
 *
sl@0
  6798
 */
sl@0
  6799
CTestStep_MMF_SRSSNK_U_0011::CTestStep_MMF_SRSSNK_U_0011()
sl@0
  6800
	{
sl@0
  6801
	// store the name of this test case
sl@0
  6802
	// this is the name that is used by the script file
sl@0
  6803
	// Each test step initialises it's own name
sl@0
  6804
	iTestStepName = _L("MM-MMF-SRSSNK-U-0011");
sl@0
  6805
	}
sl@0
  6806
sl@0
  6807
/**
sl@0
  6808
 *
sl@0
  6809
 * CTestStep_MMF_SRSSNK_U_0011 destructor
sl@0
  6810
 *
sl@0
  6811
 * @xxxx
sl@0
  6812
 *
sl@0
  6813
 */
sl@0
  6814
CTestStep_MMF_SRSSNK_U_0011::~CTestStep_MMF_SRSSNK_U_0011()
sl@0
  6815
	{
sl@0
  6816
	}
sl@0
  6817
sl@0
  6818
/**
sl@0
  6819
 *
sl@0
  6820
 * CTestStep_MMF_SRSSNK_U_0011
sl@0
  6821
 *
sl@0
  6822
 * Functional test of descriptor sink.
sl@0
  6823
 * EmptyBufferL() test.
sl@0
  6824
 *
sl@0
  6825
 * @xxxx
sl@0
  6826
 */
sl@0
  6827
TVerdict CTestStep_MMF_SRSSNK_U_0011::DoTestStepL()
sl@0
  6828
	{
sl@0
  6829
	__MM_HEAP_MARK;
sl@0
  6830
sl@0
  6831
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  6832
	TPtr8 dataPtr(dataDes->Des());
sl@0
  6833
	TUint8* baseDataPtr = CONST_CAST(TUint8*, dataPtr.Ptr());
sl@0
  6834
sl@0
  6835
	HBufC8* copyOfDataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  6836
	TPtr8 copyOfDataPtr(copyOfDataDes->Des());
sl@0
  6837
sl@0
  6838
	// Randomise the data.
sl@0
  6839
	TTime seedTime;
sl@0
  6840
	seedTime.UniversalTime();
sl@0
  6841
	TInt64 seed = seedTime.Int64();
sl@0
  6842
	for (TInt i = 0 ; i<KTestDataSize ; i++)
sl@0
  6843
		baseDataPtr[i] = TUint8(Math::Rand(seed));
sl@0
  6844
	Mem::Copy(CONST_CAST(TUint8*, copyOfDataPtr.Ptr()), baseDataPtr, KTestDataSize);
sl@0
  6845
sl@0
  6846
	// Initialise config data.
sl@0
  6847
	TMMFDescriptorConfig configDes;
sl@0
  6848
	configDes().iDes = &dataPtr;
sl@0
  6849
	configDes().iDesThreadId = RThread().Id();
sl@0
  6850
sl@0
  6851
	// Create zero length buffer.
sl@0
  6852
	CMMFDescriptorBuffer* zeroBuffer = CMMFDescriptorBuffer::NewL(0);
sl@0
  6853
	CleanupStack::PushL(zeroBuffer);
sl@0
  6854
sl@0
  6855
	// Create big buffer.
sl@0
  6856
	CMMFDescriptorBuffer* bigBuffer = CMMFDescriptorBuffer::NewL(KTestOverDataSize);
sl@0
  6857
	CleanupStack::PushL(bigBuffer);
sl@0
  6858
sl@0
  6859
	// Set the length to write.
sl@0
  6860
	bigBuffer->Data().SetLength(KTestOverDataSize);
sl@0
  6861
sl@0
  6862
	// Create a valid buffer.
sl@0
  6863
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  6864
	CleanupStack::PushL(validBuffer);
sl@0
  6865
sl@0
  6866
	// Set the length to write.
sl@0
  6867
	validBuffer->Data().SetLength(KTestWriteSize);
sl@0
  6868
sl@0
  6869
	// Create descriptor sink.
sl@0
  6870
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfDescriptorSink, configDes);
sl@0
  6871
	CleanupDeletePushL(sink);
sl@0
  6872
sl@0
  6873
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
  6874
	CleanupStack::PushL(dummySource);
sl@0
  6875
sl@0
  6876
	// Create test (invalid) buffer.
sl@0
  6877
	CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer;
sl@0
  6878
	CleanupStack::PushL(testBuffer);
sl@0
  6879
sl@0
  6880
	// Test invalid EmptyBufferL.
sl@0
  6881
	TEmptyBufferTestStep testStep(sink, testBuffer, dummySource, dataPtr, copyOfDataPtr);
sl@0
  6882
	DoTest(testStep, _L("Descriptor sink EmptyBufferL"), KErrNotSupported);
sl@0
  6883
	CleanupStack::PopAndDestroy(testBuffer);
sl@0
  6884
sl@0
  6885
	// Test valid empty.
sl@0
  6886
	TEmptyBufferTestStep testStep2(sink, validBuffer, dummySource, dataPtr, copyOfDataPtr);
sl@0
  6887
	DoTestStep(testStep2, _L("Descriptor sink EmptyBufferL"), KErrNone);
sl@0
  6888
sl@0
  6889
	dataPtr.SetLength(0);
sl@0
  6890
	copyOfDataPtr.SetLength(0);
sl@0
  6891
	testStep2.SetPosition(0);
sl@0
  6892
	DoTestStepWithAllocFail(testStep2, _L("Descriptor sink EmptyBufferL"), KErrNone);
sl@0
  6893
sl@0
  6894
	// Test complete empty.
sl@0
  6895
	TEmptyBufferTestStep testStep3(sink, validBuffer, dummySource, dataPtr, copyOfDataPtr);
sl@0
  6896
sl@0
  6897
	dataPtr.SetLength(0);
sl@0
  6898
	copyOfDataPtr.SetLength(0);
sl@0
  6899
	const TUint8* sinkPtr = baseDataPtr;
sl@0
  6900
	TInt bufferSize;
sl@0
  6901
	do
sl@0
  6902
		{
sl@0
  6903
		bufferSize = Min(KTestWriteSize, KTestDataSize - (sinkPtr-baseDataPtr));
sl@0
  6904
		validBuffer->Data().SetLength(bufferSize);
sl@0
  6905
sl@0
  6906
		testStep3.SetWriteLength(bufferSize);
sl@0
  6907
		DoTestStep(testStep3, _L("Descriptor sink EmptyBufferL"), KErrNone);
sl@0
  6908
sl@0
  6909
		sinkPtr += bufferSize;
sl@0
  6910
		} while (bufferSize == KTestWriteSize);
sl@0
  6911
sl@0
  6912
	// Test complete empty with alloc fail.
sl@0
  6913
	TEmptyBufferTestStep testStep4(sink, validBuffer, dummySource, dataPtr, copyOfDataPtr);
sl@0
  6914
	validBuffer->Data().SetLength(KTestWriteSize);
sl@0
  6915
sl@0
  6916
	dataPtr.SetLength(0);
sl@0
  6917
	copyOfDataPtr.SetLength(0);
sl@0
  6918
	sinkPtr = baseDataPtr;
sl@0
  6919
	do
sl@0
  6920
		{
sl@0
  6921
		bufferSize = Min(KTestWriteSize, KTestDataSize - (sinkPtr-baseDataPtr));
sl@0
  6922
		validBuffer->Data().SetLength(bufferSize);
sl@0
  6923
sl@0
  6924
		testStep4.SetWriteLength(bufferSize);
sl@0
  6925
		DoTestStepWithAllocFail(testStep4, _L("Descriptor sink EmptyBufferL"), KErrNone);
sl@0
  6926
sl@0
  6927
		bufferSize = validBuffer->BufferSize();
sl@0
  6928
		sinkPtr += bufferSize;
sl@0
  6929
		} while (bufferSize == KTestWriteSize);
sl@0
  6930
sl@0
  6931
	// Test additional empty request.
sl@0
  6932
	TEmptyBufferTestStep testStep5(sink, validBuffer, dummySource, dataPtr, copyOfDataPtr);
sl@0
  6933
sl@0
  6934
	testStep5.SetWriteLength(0);
sl@0
  6935
	DoTest(testStep5, _L("Descriptor sink EmptyBufferL"), KErrNone);
sl@0
  6936
sl@0
  6937
	// Test zero length write.
sl@0
  6938
	dataPtr.SetLength(0);
sl@0
  6939
	copyOfDataPtr.SetLength(0);
sl@0
  6940
	TEmptyBufferTestStep testStep6(sink, zeroBuffer, dummySource, dataPtr, copyOfDataPtr);
sl@0
  6941
	DoTest(testStep6, _L("Descriptor sink EmptyBufferL"), KErrNone);
sl@0
  6942
sl@0
  6943
	// Test over size write.
sl@0
  6944
	TEmptyBufferTestStep testStep7(sink, bigBuffer, dummySource, dataPtr, copyOfDataPtr);
sl@0
  6945
	testStep7.SetWriteLength(KTestDataSize);
sl@0
  6946
	DoTestStep(testStep7, _L("Descriptor sink EmptyBufferL"), KErrNone /* Should probably be KErrOverflow */);
sl@0
  6947
sl@0
  6948
	dataPtr.SetLength(0);
sl@0
  6949
	copyOfDataPtr.SetLength(0);
sl@0
  6950
	testStep7.SetPosition(0);
sl@0
  6951
	DoTestStepWithAllocFail(testStep7, _L("Descriptor sink EmptyBufferL"), KErrNone /* Should probably be KErrOverflow */);
sl@0
  6952
sl@0
  6953
	CleanupStack::PopAndDestroy(5, zeroBuffer); // sink, dummySource, validBuffer, bigBuffer, zeroBuffer
sl@0
  6954
sl@0
  6955
	CleanupStack::PopAndDestroy(2, dataDes); // copyOfDataDes, dataDes
sl@0
  6956
sl@0
  6957
	__MM_HEAP_MARKEND;
sl@0
  6958
	return iTestResult;
sl@0
  6959
	}
sl@0
  6960
sl@0
  6961
/**
sl@0
  6962
 *
sl@0
  6963
 * CTestStep_MMF_SRSSNK_U_0012 constructor
sl@0
  6964
 *
sl@0
  6965
 * @xxxx
sl@0
  6966
 *
sl@0
  6967
 */
sl@0
  6968
CTestStep_MMF_SRSSNK_U_0012::CTestStep_MMF_SRSSNK_U_0012()
sl@0
  6969
: CTestStep_MMF_SRSSNK(EFalse)
sl@0
  6970
	{
sl@0
  6971
	// store the name of this test case
sl@0
  6972
	// this is the name that is used by the script file
sl@0
  6973
	// Each test step initialises it's own name
sl@0
  6974
	iTestStepName = _L("MM-MMF-SRSSNK-U-0012");
sl@0
  6975
	}
sl@0
  6976
sl@0
  6977
/**
sl@0
  6978
 *
sl@0
  6979
 * CTestStep_MMF_SRSSNK_U_0012 destructor
sl@0
  6980
 *
sl@0
  6981
 * @xxxx
sl@0
  6982
 *
sl@0
  6983
 */
sl@0
  6984
CTestStep_MMF_SRSSNK_U_0012::~CTestStep_MMF_SRSSNK_U_0012()
sl@0
  6985
	{
sl@0
  6986
	}
sl@0
  6987
sl@0
  6988
/**
sl@0
  6989
 *
sl@0
  6990
 * CTestStep_MMF_SRSSNK_U_0012
sl@0
  6991
 *
sl@0
  6992
 * Functional test of descriptor sink.
sl@0
  6993
 * BufferFilledL() panic test.
sl@0
  6994
 *
sl@0
  6995
 * @xxxx
sl@0
  6996
 */
sl@0
  6997
TVerdict CTestStep_MMF_SRSSNK_U_0012::DoTestStepL()
sl@0
  6998
	{
sl@0
  6999
	__MM_HEAP_MARK;
sl@0
  7000
sl@0
  7001
	// This test fails if running a debug StdSourcesAndSinks dll.
sl@0
  7002
	// So only perform the test on target.
sl@0
  7003
sl@0
  7004
	// Create sink buffer.
sl@0
  7005
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  7006
	TPtr8 dataPtr(dataDes->Des());
sl@0
  7007
sl@0
  7008
	// Initialise config data.
sl@0
  7009
	TMMFDescriptorConfig configDes;
sl@0
  7010
	configDes().iDes = &dataPtr;
sl@0
  7011
	configDes().iDesThreadId = RThread().Id();
sl@0
  7012
sl@0
  7013
	// Create valid buffer.
sl@0
  7014
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  7015
	CleanupStack::PushL(validBuffer);
sl@0
  7016
sl@0
  7017
	// Create descriptor sink.
sl@0
  7018
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfDescriptorSink, configDes);
sl@0
  7019
	CleanupDeletePushL(sink);
sl@0
  7020
sl@0
  7021
	// Test BufferFilledL
sl@0
  7022
	sink->BufferFilledL(validBuffer);
sl@0
  7023
sl@0
  7024
	CleanupStack::PopAndDestroy(sink);
sl@0
  7025
sl@0
  7026
	CleanupStack::PopAndDestroy(2, dataDes); // validBuffer, dataDes
sl@0
  7027
sl@0
  7028
	__MM_HEAP_MARKEND;
sl@0
  7029
	return iTestResult;
sl@0
  7030
	}
sl@0
  7031
sl@0
  7032
/**
sl@0
  7033
 *
sl@0
  7034
 * CTestStep_MMF_SRSSNK_U_0013 constructor
sl@0
  7035
 *
sl@0
  7036
 * @xxxx
sl@0
  7037
 *
sl@0
  7038
 */
sl@0
  7039
CTestStep_MMF_SRSSNK_U_0013::CTestStep_MMF_SRSSNK_U_0013()
sl@0
  7040
	{
sl@0
  7041
	// store the name of this test case
sl@0
  7042
	// this is the name that is used by the script file
sl@0
  7043
	// Each test step initialises it's own name
sl@0
  7044
	iTestStepName = _L("MM-MMF-SRSSNK-U-0013");
sl@0
  7045
	}
sl@0
  7046
sl@0
  7047
/**
sl@0
  7048
 *
sl@0
  7049
 * CTestStep_MMF_SRSSNK_U_0013 destructor
sl@0
  7050
 *
sl@0
  7051
 * @xxxx
sl@0
  7052
 *
sl@0
  7053
 */
sl@0
  7054
CTestStep_MMF_SRSSNK_U_0013::~CTestStep_MMF_SRSSNK_U_0013()
sl@0
  7055
	{
sl@0
  7056
	}
sl@0
  7057
sl@0
  7058
/**
sl@0
  7059
 *
sl@0
  7060
 * CTestStep_MMF_SRSSNK_U_0013
sl@0
  7061
 *
sl@0
  7062
 * Functional test of descriptor sink.
sl@0
  7063
 * WriteBufferL() test.
sl@0
  7064
 *
sl@0
  7065
 * @xxxx
sl@0
  7066
 */
sl@0
  7067
TVerdict CTestStep_MMF_SRSSNK_U_0013::DoTestStepL()
sl@0
  7068
	{
sl@0
  7069
	__MM_HEAP_MARK;
sl@0
  7070
sl@0
  7071
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  7072
	TPtr8 dataPtr(dataDes->Des());
sl@0
  7073
	TUint8* baseDataPtr = CONST_CAST(TUint8*, dataPtr.Ptr());
sl@0
  7074
sl@0
  7075
	HBufC8* copyOfDataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  7076
	TPtr8 copyOfDataPtr(copyOfDataDes->Des());
sl@0
  7077
sl@0
  7078
	// Randomise the data.
sl@0
  7079
	TTime seedTime;
sl@0
  7080
	seedTime.UniversalTime();
sl@0
  7081
	TInt64 seed = seedTime.Int64();
sl@0
  7082
	for (TInt i = 0 ; i<KTestDataSize ; i++)
sl@0
  7083
		baseDataPtr[i] = TUint8(Math::Rand(seed));
sl@0
  7084
	Mem::Copy(CONST_CAST(TUint8*, copyOfDataPtr.Ptr()), baseDataPtr, KTestDataSize);
sl@0
  7085
sl@0
  7086
	// Initialise config data.
sl@0
  7087
	TMMFDescriptorConfig configDes;
sl@0
  7088
	configDes().iDes = &dataPtr;
sl@0
  7089
	configDes().iDesThreadId = RThread().Id();
sl@0
  7090
sl@0
  7091
	// Create valid Buffer.
sl@0
  7092
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  7093
	CleanupStack::PushL(validBuffer);
sl@0
  7094
sl@0
  7095
	// Set the length to write.
sl@0
  7096
	validBuffer->Data().SetLength(KTestWriteSize);
sl@0
  7097
sl@0
  7098
	// Create dummy source.
sl@0
  7099
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
  7100
	CleanupStack::PushL(dummySource);
sl@0
  7101
sl@0
  7102
	// Create sink descriptor.
sl@0
  7103
	CMMFClip* sink = STATIC_CAST(CMMFClip*, MDataSink::NewSinkL(KUidMmfDescriptorSink, configDes));
sl@0
  7104
	CleanupStack::PushL(sink);
sl@0
  7105
sl@0
  7106
	// Create test (invalid) buffer.
sl@0
  7107
	CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer;
sl@0
  7108
	CleanupStack::PushL(testBuffer);
sl@0
  7109
sl@0
  7110
	// Test WriteBufferL (these tests should fail)
sl@0
  7111
	TDescriptorClipWriteBufferTestStep testStep(sink, testBuffer, 0, dummySource, dataPtr, copyOfDataPtr);
sl@0
  7112
	DoTest(testStep, _L("Descriptor sink WriteBufferL"), KErrNotSupported);
sl@0
  7113
sl@0
  7114
	TDescriptorClipWriteBuffer2TestStep testStep2(sink, testBuffer, 0, dummySource, dataPtr, copyOfDataPtr, KTestBufferSize);
sl@0
  7115
	DoTest(testStep2, _L("Descriptor sink WriteBufferL"), KErrNotSupported);
sl@0
  7116
sl@0
  7117
	TDescriptorClipWriteBuffer3TestStep testStep3(sink, testBuffer, 0, dataPtr, copyOfDataPtr, KTestBufferSize);
sl@0
  7118
	DoTest(testStep3, _L("Descriptor sink WriteBufferL"), KErrNotSupported);
sl@0
  7119
	CleanupStack::PopAndDestroy(testBuffer);
sl@0
  7120
sl@0
  7121
	// Test writing to the beginning, middle, and end ofthe descriptor.
sl@0
  7122
	TDescriptorClipWriteBufferTestStep testStep4(sink, validBuffer, 0, dummySource, dataPtr, copyOfDataPtr, KTestWriteSize);
sl@0
  7123
	DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7124
sl@0
  7125
	testStep4.SetPosition(1);
sl@0
  7126
	DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7127
sl@0
  7128
	testStep4.SetPosition(KTestDataSize/2);
sl@0
  7129
	DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7130
sl@0
  7131
	testStep4.SetPosition(KTestDataSize/2 + 1);
sl@0
  7132
	DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7133
sl@0
  7134
	testStep4.SetPosition(KTestDataSize-10);
sl@0
  7135
	DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7136
sl@0
  7137
	testStep4.SetWriteLength(11);
sl@0
  7138
	DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7139
sl@0
  7140
	testStep4.SetWriteLength(10);
sl@0
  7141
	DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7142
sl@0
  7143
	testStep4.SetPosition(KTestDataSize);
sl@0
  7144
	DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7145
sl@0
  7146
	testStep4.SetWriteLength(0);
sl@0
  7147
	DoTest(testStep4, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7148
sl@0
  7149
	testStep4.SetPosition(KTestDataSize + 2);
sl@0
  7150
	DoTest(testStep4, _L("Descriptor source WriteBufferL"), KErrArgument);
sl@0
  7151
sl@0
  7152
	// Attempt to write nothing.
sl@0
  7153
	TDescriptorClipWriteBufferTestStep testStep5(sink, validBuffer, 0, dummySource, dataPtr, copyOfDataPtr);
sl@0
  7154
	DoTest(testStep5, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7155
sl@0
  7156
	// Attempt to write more data than is actually in the buffer.
sl@0
  7157
	testStep5.SetWriteLength(KTestOverWriteSize);
sl@0
  7158
	DoTest(testStep5, _L("Descriptor sink WriteBufferL"), KErrArgument);
sl@0
  7159
sl@0
  7160
	// Repeat writes with full length descriptor.
sl@0
  7161
	dataPtr.SetLength(KTestDataSize);
sl@0
  7162
	copyOfDataPtr.SetLength(KTestDataSize);
sl@0
  7163
sl@0
  7164
	TDescriptorClipWriteBufferTestStep testStep6(sink, validBuffer, 0, dummySource, dataPtr, copyOfDataPtr, KTestWriteSize);
sl@0
  7165
	DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7166
sl@0
  7167
	testStep6.SetPosition(1);
sl@0
  7168
	DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7169
sl@0
  7170
	testStep6.SetPosition(KTestDataSize/2);
sl@0
  7171
	DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7172
sl@0
  7173
	testStep6.SetPosition(KTestDataSize/2 + 1);
sl@0
  7174
	DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7175
sl@0
  7176
	testStep6.SetPosition(KTestDataSize - 10);
sl@0
  7177
	DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7178
sl@0
  7179
	testStep6.SetWriteLength(11);
sl@0
  7180
	DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7181
sl@0
  7182
	testStep6.SetWriteLength(10);
sl@0
  7183
	DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7184
sl@0
  7185
	testStep6.SetPosition(KTestDataSize);
sl@0
  7186
	DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7187
sl@0
  7188
	testStep6.SetWriteLength(0);
sl@0
  7189
	DoTest(testStep6, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7190
sl@0
  7191
	testStep6.SetPosition(KTestDataSize + 2);
sl@0
  7192
	DoTest(testStep6, _L("Descriptor source WriteBufferL"), KErrArgument);
sl@0
  7193
sl@0
  7194
	// Reset descriptor.
sl@0
  7195
	dataPtr.SetLength(0);
sl@0
  7196
	copyOfDataPtr.SetLength(0);
sl@0
  7197
sl@0
  7198
	// Repeat writes without supplying the length to write.
sl@0
  7199
	TDescriptorClipWriteBuffer2TestStep testStep7(sink, validBuffer, 0, dummySource, dataPtr, copyOfDataPtr, KTestWriteSize);
sl@0
  7200
	DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7201
sl@0
  7202
	testStep7.SetPosition(1);
sl@0
  7203
	DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7204
sl@0
  7205
	testStep7.SetPosition(KTestDataSize/2);
sl@0
  7206
	DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7207
sl@0
  7208
	testStep7.SetPosition(KTestDataSize/2 + 1);
sl@0
  7209
	DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7210
sl@0
  7211
	testStep7.SetPosition(KTestDataSize - 10);
sl@0
  7212
	DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7213
sl@0
  7214
	validBuffer->Data().SetLength(11);
sl@0
  7215
	DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7216
sl@0
  7217
	validBuffer->Data().SetLength(10);
sl@0
  7218
	testStep7.SetWriteLength(10);
sl@0
  7219
	DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7220
sl@0
  7221
	testStep7.SetPosition(KTestDataSize);
sl@0
  7222
	DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7223
sl@0
  7224
	validBuffer->Data().SetLength(0);
sl@0
  7225
	testStep7.SetWriteLength(0);
sl@0
  7226
	DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7227
sl@0
  7228
	testStep7.SetPosition(KTestDataSize + 2);
sl@0
  7229
	DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrArgument);
sl@0
  7230
sl@0
  7231
	// Attempt to write nothing.
sl@0
  7232
	testStep7.SetPosition(0);
sl@0
  7233
	DoTest(testStep7, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7234
sl@0
  7235
	// Repeat writes with full length descriptor.
sl@0
  7236
	dataPtr.SetLength(KTestDataSize);
sl@0
  7237
	copyOfDataPtr.SetLength(KTestDataSize);
sl@0
  7238
	validBuffer->Data().SetLength(KTestWriteSize);
sl@0
  7239
sl@0
  7240
	TDescriptorClipWriteBuffer2TestStep testStep8(sink, validBuffer, 0, dummySource, dataPtr, copyOfDataPtr, KTestWriteSize);
sl@0
  7241
	DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7242
sl@0
  7243
	testStep8.SetPosition(1);
sl@0
  7244
	DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7245
sl@0
  7246
	testStep8.SetPosition(KTestDataSize/2);
sl@0
  7247
	DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7248
sl@0
  7249
	testStep8.SetPosition(KTestDataSize/2 + 1);
sl@0
  7250
	DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7251
sl@0
  7252
	testStep8.SetPosition(KTestDataSize - 10);
sl@0
  7253
	DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7254
sl@0
  7255
	validBuffer->Data().SetLength(11);
sl@0
  7256
	DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7257
sl@0
  7258
	validBuffer->Data().SetLength(10);
sl@0
  7259
	testStep8.SetWriteLength(10);
sl@0
  7260
	DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7261
sl@0
  7262
	testStep8.SetPosition(KTestDataSize);
sl@0
  7263
	DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7264
sl@0
  7265
	validBuffer->Data().SetLength(0);
sl@0
  7266
	testStep8.SetWriteLength(0);
sl@0
  7267
	DoTest(testStep8, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7268
sl@0
  7269
	testStep8.SetPosition(KTestDataSize + 2);
sl@0
  7270
	DoTest(testStep8, _L("Descriptor source WriteBufferL"), KErrArgument);
sl@0
  7271
sl@0
  7272
	// Reset descriptor.
sl@0
  7273
	dataPtr.SetLength(0);
sl@0
  7274
	copyOfDataPtr.SetLength(0);
sl@0
  7275
	validBuffer->Data().SetLength(KTestWriteSize);
sl@0
  7276
sl@0
  7277
	// Repeat writes without supplying the length, or a sink.
sl@0
  7278
	TDescriptorClipWriteBuffer3TestStep testStep9(sink, validBuffer, 0, dataPtr, copyOfDataPtr, KTestWriteSize);
sl@0
  7279
	DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7280
sl@0
  7281
	testStep9.SetPosition(1);
sl@0
  7282
	DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7283
sl@0
  7284
	testStep9.SetPosition(KTestDataSize/2);
sl@0
  7285
	DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7286
sl@0
  7287
	testStep9.SetPosition(KTestDataSize/2 + 1);
sl@0
  7288
	DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7289
sl@0
  7290
	testStep9.SetPosition(KTestDataSize - 10);
sl@0
  7291
	DoTest(testStep9, _L("Descriptor source ReadBufferL"), KErrOverflow);
sl@0
  7292
sl@0
  7293
	validBuffer->Data().SetLength(11);
sl@0
  7294
	DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7295
sl@0
  7296
	validBuffer->Data().SetLength(10);
sl@0
  7297
	testStep9.SetWriteLength(10);
sl@0
  7298
	DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7299
sl@0
  7300
	validBuffer->Data().SetLength(0);
sl@0
  7301
	testStep9.SetPosition(KTestDataSize);
sl@0
  7302
	testStep9.SetWriteLength(0);
sl@0
  7303
	DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7304
sl@0
  7305
	testStep9.SetPosition(KTestDataSize + 2);
sl@0
  7306
	DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrArgument);
sl@0
  7307
sl@0
  7308
	// Attempt to write nothing.
sl@0
  7309
	testStep9.SetPosition(0);
sl@0
  7310
	DoTest(testStep9, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7311
sl@0
  7312
	// Repeat writes with full length descriptor.
sl@0
  7313
	dataPtr.SetLength(KTestDataSize);
sl@0
  7314
	copyOfDataPtr.SetLength(KTestDataSize);
sl@0
  7315
	validBuffer->Data().SetLength(KTestWriteSize);
sl@0
  7316
sl@0
  7317
	TDescriptorClipWriteBuffer3TestStep testStep10(sink, validBuffer, 0, dataPtr, copyOfDataPtr, KTestWriteSize);
sl@0
  7318
	DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7319
sl@0
  7320
	testStep10.SetPosition(1);
sl@0
  7321
	DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7322
sl@0
  7323
	testStep10.SetPosition(KTestDataSize/2);
sl@0
  7324
	DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7325
sl@0
  7326
	testStep10.SetPosition(KTestDataSize/2 + 1);
sl@0
  7327
	DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7328
sl@0
  7329
	testStep10.SetPosition(KTestDataSize - 10);
sl@0
  7330
	DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7331
sl@0
  7332
	validBuffer->Data().SetLength(11);
sl@0
  7333
	DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7334
sl@0
  7335
	validBuffer->Data().SetLength(10);
sl@0
  7336
	testStep10.SetWriteLength(10);
sl@0
  7337
	DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7338
sl@0
  7339
	testStep10.SetPosition(KTestDataSize);
sl@0
  7340
	DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrOverflow);
sl@0
  7341
sl@0
  7342
	validBuffer->Data().SetLength(0);
sl@0
  7343
	testStep10.SetWriteLength(0);
sl@0
  7344
	DoTest(testStep10, _L("Descriptor sink WriteBufferL"), KErrNone);
sl@0
  7345
sl@0
  7346
	testStep10.SetPosition(KTestDataSize + 2);
sl@0
  7347
	DoTest(testStep10, _L("Descriptor source WriteBufferL"), KErrArgument);
sl@0
  7348
sl@0
  7349
	CleanupStack::PopAndDestroy(3, validBuffer); // sink, dummySource, validBuffer
sl@0
  7350
sl@0
  7351
	CleanupStack::PopAndDestroy(2, dataDes); // copyOfDataDes, dataDes
sl@0
  7352
sl@0
  7353
	__MM_HEAP_MARKEND;
sl@0
  7354
	return iTestResult;
sl@0
  7355
	}
sl@0
  7356
sl@0
  7357
sl@0
  7358
/**
sl@0
  7359
 *
sl@0
  7360
 * CTestStep_MMF_SRSSNK_U_0014 constructor
sl@0
  7361
 *
sl@0
  7362
 * @xxxx
sl@0
  7363
 *
sl@0
  7364
 */
sl@0
  7365
CTestStep_MMF_SRSSNK_U_0014::CTestStep_MMF_SRSSNK_U_0014()
sl@0
  7366
	{
sl@0
  7367
	// store the name of this test case
sl@0
  7368
	// this is the name that is used by the script file
sl@0
  7369
	// Each test step initialises it's own name
sl@0
  7370
	iTestStepName = _L("MM-MMF-SRSSNK-U-0014");
sl@0
  7371
	}
sl@0
  7372
sl@0
  7373
/**
sl@0
  7374
 *
sl@0
  7375
 * CTestStep_MMF_SRSSNK_U_0014 destructor
sl@0
  7376
 *
sl@0
  7377
 * @xxxx
sl@0
  7378
 *
sl@0
  7379
 */
sl@0
  7380
CTestStep_MMF_SRSSNK_U_0014::~CTestStep_MMF_SRSSNK_U_0014()
sl@0
  7381
	{
sl@0
  7382
	}
sl@0
  7383
sl@0
  7384
/**
sl@0
  7385
 *
sl@0
  7386
 * CTestStep_MMF_SRSSNK_U_0014
sl@0
  7387
 *
sl@0
  7388
 * Functional test of descriptor sink.
sl@0
  7389
 * SinkCustomCommand() test.
sl@0
  7390
 *
sl@0
  7391
 * @xxxx
sl@0
  7392
 */
sl@0
  7393
TVerdict CTestStep_MMF_SRSSNK_U_0014::DoTestStepL()
sl@0
  7394
	{
sl@0
  7395
	__MM_HEAP_MARK;
sl@0
  7396
sl@0
  7397
	// Create sink buffer.
sl@0
  7398
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  7399
	TPtr8 dataPtr(dataDes->Des());
sl@0
  7400
sl@0
  7401
	// Initialise config data.
sl@0
  7402
	TMMFDescriptorConfig configDes;
sl@0
  7403
	configDes().iDes = &dataPtr;
sl@0
  7404
	configDes().iDesThreadId = RThread().Id();
sl@0
  7405
sl@0
  7406
	TUid testControllerUid = { KMmfTestControllerUid };
sl@0
  7407
	RMMFController dummyController;
sl@0
  7408
	TMMFPrioritySettings prioritySettings;
sl@0
  7409
	TMMFMessageDestinationPckg destination;
sl@0
  7410
	User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings));
sl@0
  7411
	CleanupClosePushL(dummyController);
sl@0
  7412
sl@0
  7413
	TBuf8<1> dummyArgs;
sl@0
  7414
	User::LeaveIfError(dummyController.AddDataSink(KUidMmfDescriptorSink, configDes));
sl@0
  7415
	TInt err = dummyController.CustomCommandSync(destination, KDescriptorSink, dummyArgs, dummyArgs);
sl@0
  7416
	if (err != KErrNotSupported)
sl@0
  7417
		{
sl@0
  7418
		INFO_PRINTF2(_L("Descriptor sink SinkCustomCommand: Expecting KErrNotSupported, actually got %d"), err);
sl@0
  7419
		iTestResult = EFail;
sl@0
  7420
		}
sl@0
  7421
sl@0
  7422
	CleanupStack::PopAndDestroy(2, dataDes); // dummyController, dataDes.
sl@0
  7423
sl@0
  7424
	__MM_HEAP_MARKEND;
sl@0
  7425
	return iTestResult;
sl@0
  7426
	}
sl@0
  7427
sl@0
  7428
/**
sl@0
  7429
 *
sl@0
  7430
 * CTestStep_MMF_SRSSNK_U_0015 constructor
sl@0
  7431
 *
sl@0
  7432
 * @xxxx
sl@0
  7433
 *
sl@0
  7434
 */
sl@0
  7435
CTestStep_MMF_SRSSNK_U_0015::CTestStep_MMF_SRSSNK_U_0015()
sl@0
  7436
	{
sl@0
  7437
	// store the name of this test case
sl@0
  7438
	// this is the name that is used by the script file
sl@0
  7439
	// Each test step initialises it's own name
sl@0
  7440
	iTestStepName = _L("MM-MMF-SRSSNK-U-0015");
sl@0
  7441
	}
sl@0
  7442
sl@0
  7443
/**
sl@0
  7444
 *
sl@0
  7445
 * CTestStep_MMF_SRSSNK_U_0015 destructor
sl@0
  7446
 *
sl@0
  7447
 * @xxxx
sl@0
  7448
 *
sl@0
  7449
 */
sl@0
  7450
CTestStep_MMF_SRSSNK_U_0015::~CTestStep_MMF_SRSSNK_U_0015()
sl@0
  7451
	{
sl@0
  7452
	}
sl@0
  7453
sl@0
  7454
/**
sl@0
  7455
 *
sl@0
  7456
 * CTestStep_MMF_SRSSNK_U_0015
sl@0
  7457
 *
sl@0
  7458
 * CMMFDescriptor
sl@0
  7459
 * Request size / SetLastBuffer test.
sl@0
  7460
 *
sl@0
  7461
 * @xxxx
sl@0
  7462
 */
sl@0
  7463
TVerdict CTestStep_MMF_SRSSNK_U_0015::DoTestStepL()
sl@0
  7464
	{
sl@0
  7465
	__MM_HEAP_MARK;
sl@0
  7466
sl@0
  7467
	// Create source buffer.
sl@0
  7468
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  7469
	TPtr8 dataPtr(dataDes->Des());
sl@0
  7470
sl@0
  7471
	// Set it's length.
sl@0
  7472
	dataPtr.SetLength(KTestDataSize);
sl@0
  7473
sl@0
  7474
	TTime seedTime;
sl@0
  7475
	seedTime.UniversalTime();
sl@0
  7476
	TInt64 seed = seedTime.Int64();
sl@0
  7477
	for (TInt i = 0 ; i<KTestDataSize ; i++)
sl@0
  7478
		dataPtr[i] = TUint8(Math::Rand(seed));
sl@0
  7479
sl@0
  7480
	// Initialise config data.
sl@0
  7481
	TMMFDescriptorConfig configDes;
sl@0
  7482
	configDes().iDes = &dataPtr;
sl@0
  7483
	configDes().iDesThreadId = RThread().Id();
sl@0
  7484
sl@0
  7485
	// Create dummy sink.
sl@0
  7486
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
  7487
	CleanupStack::PushL(dummySink);
sl@0
  7488
sl@0
  7489
	// Test fill last buffer
sl@0
  7490
	TFillLastBufferTestStep testStep(KUidMmfDescriptorSource, configDes, dummySink, dataPtr);
sl@0
  7491
	DoTest(testStep, _L("Descriptor source: Fill last buffer"), KErrNone);
sl@0
  7492
sl@0
  7493
	// Create a source.
sl@0
  7494
	CMMFClip* source = STATIC_CAST(CMMFClip*, MDataSource::NewSourceL(KUidMmfDescriptorSource, configDes));
sl@0
  7495
	CleanupStack::PushL(source);
sl@0
  7496
sl@0
  7497
	// Test read last buffer (API version 1)
sl@0
  7498
	TReadLastBufferTestStep testStep2(source, dummySink, dataPtr);
sl@0
  7499
	DoTest(testStep2, _L("Descriptor source: Read last buffer"), KErrNone);
sl@0
  7500
sl@0
  7501
	TReadLastBuffer2TestStep testStep3(source, dummySink, dataPtr);
sl@0
  7502
	DoTest(testStep3, _L("Descriptor source: Read last buffer"), KErrNone);
sl@0
  7503
sl@0
  7504
	TReadLastBuffer3TestStep testStep4(source, dataPtr);
sl@0
  7505
	DoTest(testStep4, _L("Descriptor source: Read last buffer"), KErrNone);
sl@0
  7506
sl@0
  7507
	CleanupStack::PopAndDestroy(source);
sl@0
  7508
sl@0
  7509
	CleanupStack::PopAndDestroy(2, dataDes); // dummySink, dataDes
sl@0
  7510
sl@0
  7511
	__MM_HEAP_MARKEND;
sl@0
  7512
	return iTestResult;
sl@0
  7513
	}
sl@0
  7514
sl@0
  7515
sl@0
  7516
/**
sl@0
  7517
 *
sl@0
  7518
 * CTestStep_MMF_SRSSNK_U_0101 constructor
sl@0
  7519
 *
sl@0
  7520
 * @xxxx
sl@0
  7521
 *
sl@0
  7522
 */
sl@0
  7523
CTestStep_MMF_SRSSNK_U_0101::CTestStep_MMF_SRSSNK_U_0101()
sl@0
  7524
	{
sl@0
  7525
	// store the name of this test case
sl@0
  7526
	// this is the name that is used by the script file
sl@0
  7527
	// Each test step initialises it's own name
sl@0
  7528
	iTestStepName = _L("MM-MMF-SRSSNK-U-0101");
sl@0
  7529
	}
sl@0
  7530
sl@0
  7531
/**
sl@0
  7532
 *
sl@0
  7533
 * CTestStep_MMF_SRSSNK_U_0101 destructor
sl@0
  7534
 *
sl@0
  7535
 * @xxxx
sl@0
  7536
 *
sl@0
  7537
 */
sl@0
  7538
CTestStep_MMF_SRSSNK_U_0101::~CTestStep_MMF_SRSSNK_U_0101()
sl@0
  7539
	{
sl@0
  7540
	}
sl@0
  7541
sl@0
  7542
/**
sl@0
  7543
 *
sl@0
  7544
 * CTestStep_MMF_SRSSNK_U_0101
sl@0
  7545
 *
sl@0
  7546
 * Test creation/destruction of file source.
sl@0
  7547
 *
sl@0
  7548
 * @xxxx
sl@0
  7549
 */
sl@0
  7550
_LIT(KTest101CopyFileName, "c:\\mm\\mmf\\testfiles\\srssnk\\CopyOfMMFTestFile1.dat");
sl@0
  7551
TVerdict CTestStep_MMF_SRSSNK_U_0101::DoTestStepL()
sl@0
  7552
	{
sl@0
  7553
	__MM_HEAP_MARK;
sl@0
  7554
sl@0
  7555
	// Get file info.
sl@0
  7556
	RFs testFsSession;
sl@0
  7557
	User::LeaveIfError(testFsSession.Connect()) ;
sl@0
  7558
	CleanupClosePushL(testFsSession);
sl@0
  7559
sl@0
  7560
	// Get the size of the test file.
sl@0
  7561
	RFile testFile;
sl@0
  7562
	TFileName testFileName(KTest101FileName);
sl@0
  7563
	User::LeaveIfError(testFile.Open(testFsSession, testFileName, EFileRead));
sl@0
  7564
	CleanupClosePushL(testFile);
sl@0
  7565
sl@0
  7566
	// Force delete of the copied file - test will leave otherwise
sl@0
  7567
	TInt err = testFsSession.Delete(KTest101CopyFileName);
sl@0
  7568
	if (err == KErrAccessDenied)
sl@0
  7569
		{
sl@0
  7570
		// It's read-only, remove the read-only attribute
sl@0
  7571
		err = testFsSession.SetAtt(KTest101CopyFileName, 0, KEntryAttReadOnly);
sl@0
  7572
		if (err == KErrNone)
sl@0
  7573
			{
sl@0
  7574
			// Try deleting again
sl@0
  7575
			err = testFsSession.Delete(KTest101CopyFileName);
sl@0
  7576
			}
sl@0
  7577
		User::LeaveIfError(err);
sl@0
  7578
		}
sl@0
  7579
sl@0
  7580
	TInt fileSize;
sl@0
  7581
	User::LeaveIfError(testFile.Size(fileSize));
sl@0
  7582
	CleanupStack::PopAndDestroy(); // testFile
sl@0
  7583
sl@0
  7584
	// Copy the file. (Remaining tests work with the copy)
sl@0
  7585
	CopyFileL(testFsSession, testFileName, KTest101CopyFileName);
sl@0
  7586
sl@0
  7587
	// Get the free space on the drive.
sl@0
  7588
	testFileName = KTest101CopyFileName;
sl@0
  7589
	TParsePtr parser(testFileName);
sl@0
  7590
	TDriveUnit drive(parser.Drive());
sl@0
  7591
	TVolumeInfo volInfo;
sl@0
  7592
	User::LeaveIfError(testFsSession.Volume(volInfo, drive));
sl@0
  7593
sl@0
  7594
	TInt64 freeSpace = volInfo.iFree;
sl@0
  7595
sl@0
  7596
sl@0
  7597
	// Set the read only attribute
sl@0
  7598
	err = testFsSession.SetAtt(testFileName, KEntryAttReadOnly, 0);
sl@0
  7599
	if (err != KErrNone)
sl@0
  7600
		{
sl@0
  7601
		INFO_PRINTF2(_L("Error setting read-only attribute (%d)"), err);
sl@0
  7602
		iTestResult = EFail;
sl@0
  7603
		}
sl@0
  7604
sl@0
  7605
	// Initialise config data.
sl@0
  7606
	TMMFFileConfig configDes;
sl@0
  7607
	configDes().iPath = testFileName;
sl@0
  7608
sl@0
  7609
	// Test valid uid and configuration descriptor.
sl@0
  7610
	TNewSourceTestStep testStep(KUidMmfFileSource, configDes);
sl@0
  7611
	DoFileTest(testStep, _L("Construct file source"), KErrNone);
sl@0
  7612
sl@0
  7613
	// Test that the source has been initialised correctly.
sl@0
  7614
	MDataSource* source = MDataSource::NewSourceL(KUidMmfFileSource, configDes);
sl@0
  7615
	CleanupDeletePushL(source);
sl@0
  7616
sl@0
  7617
	// Test that the file has been opened correctly.
sl@0
  7618
	source->SourcePrimeL();
sl@0
  7619
	RFile& file = (STATIC_CAST(CMMFFile*, source))->FileL();
sl@0
  7620
sl@0
  7621
	// Read some bytes from the file. (Check it is as we would expect)
sl@0
  7622
	TBuf8<256> sourceBytes;
sl@0
  7623
	file.Read(sourceBytes);
sl@0
  7624
	for (TInt i = 0 ; i<256 ; i++)
sl@0
  7625
		{
sl@0
  7626
		if (sourceBytes[i] != i)
sl@0
  7627
			{
sl@0
  7628
			INFO_PRINTF3(_L("Construct file source: %d, actually got %d"), sourceBytes[i], i);
sl@0
  7629
			iTestResult = EFail;
sl@0
  7630
			}
sl@0
  7631
		}
sl@0
  7632
sl@0
  7633
	// Test that the source is initialised correctly.
sl@0
  7634
	TSourceTypeTestStep testStep2(source, KUidMmfFileSource, KMMFFourCCCodeNULL, EFalse);
sl@0
  7635
	DoTest(testStep2, _L("File source type"), KErrNone);
sl@0
  7636
sl@0
  7637
	TCanCreateSourceBufferTestStep testStep3(source, EFalse);
sl@0
  7638
	DoTest(testStep3, _L("File CanCreateSourceBuffer"), KErrNone);
sl@0
  7639
sl@0
  7640
	TSourceSampleConvertTestStep testStep4(source, EFalse);
sl@0
  7641
	DoTest(testStep4, _L("File source SourceSampleConvert"), KErrNone);
sl@0
  7642
sl@0
  7643
	// Test that the clip is initialised correctly.
sl@0
  7644
	CMMFClip *sourceClip = STATIC_CAST(CMMFClip*, source);
sl@0
  7645
sl@0
  7646
	// do a bytes free test
sl@0
  7647
	TClipBytesFreeTestStep testStep5(sourceClip, freeSpace);
sl@0
  7648
	DoFileTest(testStep5, _L("File source BytesFree"), KErrNone);
sl@0
  7649
sl@0
  7650
	TClipSizeTestStep testStep6(sourceClip, fileSize);
sl@0
  7651
	DoFileTest(testStep6, _L("File source Size"), KErrNone);
sl@0
  7652
sl@0
  7653
	TClipSetSizeTestStep testStep7(sourceClip, ETrue);
sl@0
  7654
	DoFileTest(testStep7, _L("File source SetSize"), KErrAccessDenied);
sl@0
  7655
sl@0
  7656
	TClipDeleteTestStep testStep8(sourceClip);
sl@0
  7657
	DoFileTest(testStep8, _L("File source Delete"), KErrAccessDenied);
sl@0
  7658
sl@0
  7659
	CleanupStack::PopAndDestroy(source);
sl@0
  7660
sl@0
  7661
	// Remove the read only attribute.
sl@0
  7662
	err = testFsSession.SetAtt(testFileName, 0, KEntryAttReadOnly);
sl@0
  7663
	if (err != KErrNone)
sl@0
  7664
		{
sl@0
  7665
		INFO_PRINTF2(_L("File source SetSize: Expecting KErrNone, actually got %d"), err);
sl@0
  7666
		iTestResult = EFail;
sl@0
  7667
		}
sl@0
  7668
sl@0
  7669
	sourceClip = STATIC_CAST(CMMFClip*, MDataSource::NewSourceL(KUidMmfFileSource, configDes));
sl@0
  7670
	CleanupStack::PushL(sourceClip);
sl@0
  7671
sl@0
  7672
	sourceClip->SourcePrimeL();
sl@0
  7673
	TClipSetSizeTestStep testStep9(sourceClip, EFalse);
sl@0
  7674
	DoFileTest(testStep9, _L("File source SetSize"), KErrAccessDenied);
sl@0
  7675
sl@0
  7676
	CleanupStack::PopAndDestroy(sourceClip);
sl@0
  7677
sl@0
  7678
/* Note - cannot set the size of a source
sl@0
  7679
	// Check the size.
sl@0
  7680
	User::LeaveIfError(testFile.Open(testFsSession, testFileName, EFileRead));
sl@0
  7681
sl@0
  7682
	TInt size;
sl@0
  7683
	err = testFile.Size(size);
sl@0
  7684
	if (err != KErrNone)
sl@0
  7685
		{
sl@0
  7686
		INFO_PRINTF2(_L("File source SetSize: Expecting KErrNone, actually got %d"), err);
sl@0
  7687
		iTestResult = EFail;
sl@0
  7688
		}
sl@0
  7689
	testFile.Close();
sl@0
  7690
sl@0
  7691
	if (size != fileSize+6) // fileSize+6 is the result from SetSize test.
sl@0
  7692
		{
sl@0
  7693
		INFO_PRINTF3(_L("File source Size: Expecting %d, actually got %d"), fileSize+6, size);
sl@0
  7694
		iTestResult = EFail;
sl@0
  7695
		}
sl@0
  7696
*/
sl@0
  7697
sl@0
  7698
	CMMFFile* sourceFile = STATIC_CAST(CMMFFile*, MDataSource::NewSourceL(KUidMmfFileSource, configDes));
sl@0
  7699
	CleanupStack::PushL(sourceFile);
sl@0
  7700
sl@0
  7701
	const TDesC& fileName = sourceFile->FileName();
sl@0
  7702
	if (fileName.Compare(parser.Name()))
sl@0
  7703
		{
sl@0
  7704
		INFO_PRINTF3(_L("File source FileName: Expecting %S, actually got %S"), parser.Name().Ptr(), fileName.Ptr());
sl@0
  7705
		iTestResult = EFail;
sl@0
  7706
		}
sl@0
  7707
sl@0
  7708
	const TDesC& extName = sourceFile->Extension();
sl@0
  7709
	if (extName.Compare(parser.Ext()))
sl@0
  7710
		{
sl@0
  7711
		INFO_PRINTF3(_L("File source FileName: Expecting %S, actually got %S"), parser.Ext().Ptr(), extName.Ptr());
sl@0
  7712
		iTestResult = EFail;
sl@0
  7713
		}
sl@0
  7714
sl@0
  7715
	DoTestStep(testStep8, _L("File source Delete"), KErrNone);
sl@0
  7716
sl@0
  7717
	// Check that the file has actually been deleted.
sl@0
  7718
	err = testFile.Open(testFsSession, testFileName, EFileRead);
sl@0
  7719
	if (err != KErrNotFound)
sl@0
  7720
		{
sl@0
  7721
		testFile.Close();
sl@0
  7722
sl@0
  7723
		INFO_PRINTF2(_L("File source Delete: Expecting KErrNotFound, actually got %d"), err);
sl@0
  7724
		iTestResult = EFail;
sl@0
  7725
		}
sl@0
  7726
sl@0
  7727
	// Copy the file (again).
sl@0
  7728
	CopyFileL(testFsSession, KTest101FileName, KTest101CopyFileName);
sl@0
  7729
sl@0
  7730
	// Remove the read only attribute.
sl@0
  7731
	err = testFsSession.SetAtt(testFileName, 0, KEntryAttReadOnly);
sl@0
  7732
	if (err != KErrNone)
sl@0
  7733
		{
sl@0
  7734
		INFO_PRINTF2(_L("File source SetSize: Expecting KErrNone, actually got %d"), err);
sl@0
  7735
		iTestResult = EFail;
sl@0
  7736
		}
sl@0
  7737
sl@0
  7738
	CleanupStack::PopAndDestroy(sourceFile);
sl@0
  7739
sl@0
  7740
	sourceFile = STATIC_CAST(CMMFFile*, MDataSource::NewSourceL(KUidMmfFileSource, configDes));
sl@0
  7741
	CleanupStack::PushL(sourceFile);
sl@0
  7742
sl@0
  7743
	TClipDeleteTestStep testStep10(sourceFile);
sl@0
  7744
	DoTestStepWithAllocFail(testStep10, _L("File source Delete"), KErrNone);
sl@0
  7745
sl@0
  7746
	// Check that the file has actually been deleted.
sl@0
  7747
	err = testFile.Open(testFsSession, testFileName, EFileRead);
sl@0
  7748
	if (err != KErrNotFound)
sl@0
  7749
		{
sl@0
  7750
		testFile.Close();
sl@0
  7751
sl@0
  7752
		INFO_PRINTF2(_L("File source Delete: Expecting KErrNotFound, actually got %d"), err);
sl@0
  7753
		iTestResult = EFail;
sl@0
  7754
		}
sl@0
  7755
sl@0
  7756
	// Copy the file (again).
sl@0
  7757
	CopyFileL(testFsSession, KTest101FileName, KTest101CopyFileName);
sl@0
  7758
sl@0
  7759
	// Remove the read only attribute.
sl@0
  7760
	err = testFsSession.SetAtt(testFileName, 0, KEntryAttReadOnly);
sl@0
  7761
	if (err != KErrNone)
sl@0
  7762
		{
sl@0
  7763
		INFO_PRINTF2(_L("File source SetSize: Expecting KErrNone, actually got %d"), err);
sl@0
  7764
		iTestResult = EFail;
sl@0
  7765
		}
sl@0
  7766
sl@0
  7767
	CleanupStack::PopAndDestroy(sourceFile);
sl@0
  7768
sl@0
  7769
	if (iFileFailureTestingEnabled)
sl@0
  7770
		{
sl@0
  7771
		sourceFile = STATIC_CAST(CMMFFile*, MDataSource::NewSourceL(KUidMmfFileSource, configDes));
sl@0
  7772
		CleanupStack::PushL(sourceFile);
sl@0
  7773
sl@0
  7774
		TClipDeleteTestStep testStep11(sourceFile);
sl@0
  7775
		DoTestStepWithFileFail(testStep11, _L("File source Delete"), KErrNone);
sl@0
  7776
sl@0
  7777
		// Check that the file has actually been deleted.
sl@0
  7778
		err = testFile.Open(testFsSession, testFileName, EFileRead);
sl@0
  7779
		if (err != KErrNotFound)
sl@0
  7780
			{
sl@0
  7781
			testFile.Close();
sl@0
  7782
sl@0
  7783
			INFO_PRINTF2(_L("File source Delete: Expecting KErrNotFound, actually got %d"), err);
sl@0
  7784
			iTestResult = EFail;
sl@0
  7785
			}
sl@0
  7786
sl@0
  7787
		// Copy the file (again).
sl@0
  7788
		CopyFileL(testFsSession, KTest101FileName, KTest101CopyFileName);
sl@0
  7789
sl@0
  7790
		// Remove the read only attribute.
sl@0
  7791
		err = testFsSession.SetAtt(testFileName, 0, KEntryAttReadOnly);
sl@0
  7792
		if (err != KErrNone)
sl@0
  7793
			{
sl@0
  7794
			INFO_PRINTF2(_L("File source SetSize: Expecting KErrNone, actually got %d"), err);
sl@0
  7795
			iTestResult = EFail;
sl@0
  7796
			}
sl@0
  7797
sl@0
  7798
		CleanupStack::PopAndDestroy(sourceFile);
sl@0
  7799
sl@0
  7800
/*
sl@0
  7801
		// DoTestStepWithAllocAndFileFail test is no longer run.
sl@0
  7802
		// Code kept for reference purposes.
sl@0
  7803
		sourceFile = STATIC_CAST(CMMFFile*, MDataSource::NewSourceL(KUidMmfFileSource, configDes));
sl@0
  7804
		CleanupStack::PushL(sourceFile);
sl@0
  7805
sl@0
  7806
		TClipDeleteTestStep testStep12(sourceFile);
sl@0
  7807
		DoTestStepWithAllocAndFileFail(testStep12, _L("File source Delete"), KErrNone);
sl@0
  7808
sl@0
  7809
		// Check that the file has actually been deleted.
sl@0
  7810
		err = testFile.Open(testFsSession, testFileName, EFileRead);
sl@0
  7811
		if (err != KErrNotFound)
sl@0
  7812
			{
sl@0
  7813
			testFile.Close();
sl@0
  7814
sl@0
  7815
			INFO_PRINTF2(_L("File source Delete: Expecting KErrNotFound, actually got %d"), err);
sl@0
  7816
			iTestResult = EFail;
sl@0
  7817
			}
sl@0
  7818
sl@0
  7819
		CleanupStack::PopAndDestroy(sourceFile);
sl@0
  7820
*/
sl@0
  7821
		}
sl@0
  7822
sl@0
  7823
	CleanupStack::PopAndDestroy(); // testFsSession
sl@0
  7824
sl@0
  7825
	__MM_HEAP_MARKEND;
sl@0
  7826
	return iTestResult;
sl@0
  7827
	}
sl@0
  7828
sl@0
  7829
/**
sl@0
  7830
 *
sl@0
  7831
 * CTestStep_MMF_SRSSNK_U_0102 constructor
sl@0
  7832
 *
sl@0
  7833
 * @xxxx
sl@0
  7834
 *
sl@0
  7835
 */
sl@0
  7836
CTestStep_MMF_SRSSNK_U_0102::CTestStep_MMF_SRSSNK_U_0102()
sl@0
  7837
	{
sl@0
  7838
	// store the name of this test case
sl@0
  7839
	// this is the name that is used by the script file
sl@0
  7840
	// Each test step initialises it's own name
sl@0
  7841
	iTestStepName = _L("MM-MMF-SRSSNK-U-0102");
sl@0
  7842
	}
sl@0
  7843
sl@0
  7844
/**
sl@0
  7845
 *
sl@0
  7846
 * CTestStep_MMF_SRSSNK_U_0102 destructor
sl@0
  7847
 *
sl@0
  7848
 * @xxxx
sl@0
  7849
 *
sl@0
  7850
 */
sl@0
  7851
CTestStep_MMF_SRSSNK_U_0102::~CTestStep_MMF_SRSSNK_U_0102()
sl@0
  7852
	{
sl@0
  7853
	}
sl@0
  7854
sl@0
  7855
/**
sl@0
  7856
 *
sl@0
  7857
 * CTestStep_MMF_SRSSNK_U_0102
sl@0
  7858
 *
sl@0
  7859
 * Attempt to create file source using invalid config data.
sl@0
  7860
 *
sl@0
  7861
 * @xxxx
sl@0
  7862
 */
sl@0
  7863
_LIT(KTest102FileName1, "c:\\DefaultPathSource.dat"); // Valid but no path.
sl@0
  7864
_LIT(KTest102FileName2, ""); // Definitely not valid.
sl@0
  7865
TVerdict CTestStep_MMF_SRSSNK_U_0102::DoTestStepL()
sl@0
  7866
	{
sl@0
  7867
	__MM_HEAP_MARK;
sl@0
  7868
sl@0
  7869
	// Initialise config data.
sl@0
  7870
	TMMFFileConfig configDes;
sl@0
  7871
	configDes().iPath = KTest102FileName1;
sl@0
  7872
sl@0
  7873
	TNewSourceTestStep testStep(KUidMmfFileSource, configDes);
sl@0
  7874
	DoFileTest(testStep, _L("Construct file source 102.1"), KErrNone);
sl@0
  7875
sl@0
  7876
	// Verify that the file has not been created.
sl@0
  7877
	RFs testFsSession;
sl@0
  7878
	User::LeaveIfError(testFsSession.Connect());
sl@0
  7879
	CleanupClosePushL(testFsSession);
sl@0
  7880
sl@0
  7881
	RFile testFile;
sl@0
  7882
	TInt err = testFile.Open(testFsSession, configDes().iPath, EFileRead);
sl@0
  7883
	if (err != KErrNotFound)
sl@0
  7884
		{
sl@0
  7885
		testFile.Close();
sl@0
  7886
		User::LeaveIfError(testFsSession.Delete(configDes().iPath));
sl@0
  7887
sl@0
  7888
		INFO_PRINTF2(_L("File source create: Expecting KErrNotFound, actually got %d"), err);
sl@0
  7889
		iTestResult = EFail;
sl@0
  7890
		}
sl@0
  7891
sl@0
  7892
	TNewFileSourceTestStep testStep2(KUidMmfFileSource, configDes);
sl@0
  7893
	DoFileTest(testStep2, _L("Construct file source 102.2"), KErrNotFound);
sl@0
  7894
sl@0
  7895
	// Verify that the file has not been created.
sl@0
  7896
	err = testFile.Open(testFsSession, configDes().iPath, EFileRead);
sl@0
  7897
	if (err != KErrNotFound)
sl@0
  7898
		{
sl@0
  7899
		testFile.Close();
sl@0
  7900
		User::LeaveIfError(testFsSession.Delete(configDes().iPath));
sl@0
  7901
sl@0
  7902
		INFO_PRINTF2(_L("File source create: Expecting KErrNotFound, actually got %d"), err);
sl@0
  7903
		iTestResult = EFail;
sl@0
  7904
		}
sl@0
  7905
sl@0
  7906
	if (iFileFailureTestingEnabled)
sl@0
  7907
		{
sl@0
  7908
		// Repeat test with file failure only. (Checks for file failure on creation)
sl@0
  7909
		DoTestStepWithFileFail(testStep2, _L("Construct file source 102.3"), KErrNotFound);
sl@0
  7910
sl@0
  7911
		// Verify that the file has not been created.
sl@0
  7912
		err = testFile.Open(testFsSession, configDes().iPath, EFileRead);
sl@0
  7913
		if (err != KErrNotFound)
sl@0
  7914
			{
sl@0
  7915
			testFile.Close();
sl@0
  7916
			User::LeaveIfError(testFsSession.Delete(configDes().iPath));
sl@0
  7917
sl@0
  7918
			INFO_PRINTF2(_L("File source create: Expecting KErrNotFound, actually got %d"), err);
sl@0
  7919
			iTestResult = EFail;
sl@0
  7920
			}
sl@0
  7921
		}
sl@0
  7922
sl@0
  7923
	configDes().iPath = KTest102FileName2;
sl@0
  7924
	TNewSourceTestStep testStep5(KUidMmfFileSource, configDes);
sl@0
  7925
	DoFileTest(testStep5, _L("Construct file source 102.4"), KErrBadName);
sl@0
  7926
sl@0
  7927
	CleanupStack::PopAndDestroy(); // testFsSession
sl@0
  7928
sl@0
  7929
	__MM_HEAP_MARKEND;
sl@0
  7930
sl@0
  7931
	return iTestResult;
sl@0
  7932
	}
sl@0
  7933
sl@0
  7934
/**
sl@0
  7935
 *
sl@0
  7936
 * CTestStep_MMF_SRSSNK_U_0103 constructor
sl@0
  7937
 *
sl@0
  7938
 * @xxxx
sl@0
  7939
 *
sl@0
  7940
 */
sl@0
  7941
CTestStep_MMF_SRSSNK_U_0103::CTestStep_MMF_SRSSNK_U_0103()
sl@0
  7942
	{
sl@0
  7943
	// store the name of this test case
sl@0
  7944
	// this is the name that is used by the script file
sl@0
  7945
	// Each test step initialises it's own name
sl@0
  7946
	iTestStepName = _L("MM-MMF-SRSSNK-U-0103");
sl@0
  7947
	}
sl@0
  7948
sl@0
  7949
/**
sl@0
  7950
 *
sl@0
  7951
 * CTestStep_MMF_SRSSNK_U_0103 destructor
sl@0
  7952
 *
sl@0
  7953
 * @xxxx
sl@0
  7954
 *
sl@0
  7955
 */
sl@0
  7956
CTestStep_MMF_SRSSNK_U_0103::~CTestStep_MMF_SRSSNK_U_0103()
sl@0
  7957
	{
sl@0
  7958
	}
sl@0
  7959
sl@0
  7960
/**
sl@0
  7961
 *
sl@0
  7962
 * CTestStep_MMF_SRSSNK_U_0103
sl@0
  7963
 *
sl@0
  7964
 * Test creation/destruction of file sink.
sl@0
  7965
 *
sl@0
  7966
 * @xxxx
sl@0
  7967
 */
sl@0
  7968
_LIT(KTest103FileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile4.dat");
sl@0
  7969
TVerdict CTestStep_MMF_SRSSNK_U_0103::DoTestStepL()
sl@0
  7970
	{
sl@0
  7971
	__MM_HEAP_MARK;
sl@0
  7972
	// Get file info.
sl@0
  7973
	TInt64 freeSpace = 0;
sl@0
  7974
sl@0
  7975
	RFs testFsSession;
sl@0
  7976
	User::LeaveIfError(testFsSession.Connect()) ;
sl@0
  7977
	CleanupClosePushL(testFsSession);
sl@0
  7978
sl@0
  7979
	// Get the free space on the drive.
sl@0
  7980
	TFileName testFileName(KTest103FileName);
sl@0
  7981
	TParsePtr parser(testFileName);
sl@0
  7982
	TDriveUnit drive(parser.Drive());
sl@0
  7983
	TVolumeInfo volInfo;
sl@0
  7984
	if (testFsSession.Volume(volInfo, drive) == KErrNone)
sl@0
  7985
		freeSpace = volInfo.iFree;
sl@0
  7986
sl@0
  7987
	// Initialise config data.
sl@0
  7988
	TMMFFileConfig configDes;
sl@0
  7989
	configDes().iPath = testFileName;
sl@0
  7990
sl@0
  7991
	// Test valid uid and configuration descriptor.
sl@0
  7992
	TNewSinkTestStep testStep(KUidMmfFileSink, configDes);
sl@0
  7993
	DoFileTest(testStep, _L("Construst file sink 1"), KErrNone);
sl@0
  7994
sl@0
  7995
	// Test that the sink has been initialised correctly.
sl@0
  7996
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfFileSink, configDes);
sl@0
  7997
	CleanupDeletePushL(sink);
sl@0
  7998
sl@0
  7999
	// Test that the file has been opened correctly.
sl@0
  8000
	sink->SinkPrimeL();
sl@0
  8001
	RFile& file = (STATIC_CAST(CMMFFile*, sink))->FileL();
sl@0
  8002
sl@0
  8003
	// Attempt to read some bytes from the file. (Check it is as we would expect)
sl@0
  8004
	TBuf8<256> sourceBytes;
sl@0
  8005
	TInt err = file.Read(sourceBytes);
sl@0
  8006
	if ((err != KErrNone) || (sourceBytes.Length() != 0))
sl@0
  8007
		{
sl@0
  8008
		INFO_PRINTF3(_L("Construct file sink: Expecting KErrNone + zero length file, actually got %d + %d bytes"), err, sourceBytes.Length());
sl@0
  8009
		iTestResult = EFail;
sl@0
  8010
		}
sl@0
  8011
sl@0
  8012
	// Test that the file is writable.
sl@0
  8013
	TUint att;
sl@0
  8014
	err = testFsSession.Att(testFileName, att);
sl@0
  8015
	if ((err != KErrNone) || (att & KEntryAttReadOnly))
sl@0
  8016
		{
sl@0
  8017
		INFO_PRINTF3(_L("Create file sink : Expecting KErrNone + KEntryAttReadOnly, actually got %d, %x"), err, att);
sl@0
  8018
		iTestResult = EFail;
sl@0
  8019
		}
sl@0
  8020
sl@0
  8021
	// Test that the sink is initialised correctly.
sl@0
  8022
	TSinkTypeTestStep testStep2(sink, KUidMmfFileSink, KMMFFourCCCodeNULL, EFalse);
sl@0
  8023
	DoTest(testStep2, _L("Descriptor sink type 2"), KErrNone);
sl@0
  8024
sl@0
  8025
 	TCanCreateSinkBufferTestStep testStep3(sink, EFalse);
sl@0
  8026
	DoTest(testStep3, _L("Descriptor sink CanCreateSinkBuffer 3"), KErrNone);
sl@0
  8027
sl@0
  8028
	// Test that the clip is initialised correctly.
sl@0
  8029
	CMMFClip *sinkClip = STATIC_CAST(CMMFClip*, sink);
sl@0
  8030
sl@0
  8031
	// do a bytes free test
sl@0
  8032
	TClipBytesFreeTestStep testStep4(sinkClip, freeSpace);
sl@0
  8033
	DoFileTest(testStep4, _L("Descriptor sink BytesFree 4"), KErrNone);
sl@0
  8034
sl@0
  8035
	TClipSizeTestStep testStep5(sinkClip, 0);
sl@0
  8036
	DoFileTest(testStep5, _L("Descriptor sink Size 5"), KErrNone);
sl@0
  8037
sl@0
  8038
	TFileSinkSetSizeTestStep testStep6(sinkClip, ETrue);
sl@0
  8039
	DoFileTest(testStep6, _L("Descriptor sink SetSize 6"), KErrNone);
sl@0
  8040
sl@0
  8041
	CleanupStack::PopAndDestroy(sink);
sl@0
  8042
sl@0
  8043
	// Set the read only attribute.
sl@0
  8044
	err = testFsSession.SetAtt(testFileName, KEntryAttReadOnly, 0);
sl@0
  8045
	if (err != KErrNone)
sl@0
  8046
		{
sl@0
  8047
		INFO_PRINTF2(_L("File source SetSize: Expecting KErrNone, actually got %d"), err);
sl@0
  8048
		iTestResult = EFail;
sl@0
  8049
		}
sl@0
  8050
sl@0
  8051
	sinkClip = STATIC_CAST(CMMFClip*, MDataSink::NewSinkL(KUidMmfFileSink, configDes));
sl@0
  8052
	CleanupStack::PushL(sinkClip);
sl@0
  8053
sl@0
  8054
	sinkClip->SinkPrimeL();
sl@0
  8055
	TFileSinkSetSizeTestStep testStep7(sinkClip, ETrue);
sl@0
  8056
	DoFileTest(testStep7, _L("Descriptor sink SetSize 7"), KErrAccessDenied);
sl@0
  8057
sl@0
  8058
	TClipDeleteTestStep testStep8(sinkClip);
sl@0
  8059
	DoFileTest(testStep8, _L("Descriptor sink Delete 8"), KErrAccessDenied);
sl@0
  8060
sl@0
  8061
	CleanupStack::PopAndDestroy(sinkClip);
sl@0
  8062
sl@0
  8063
	RFile testFile;
sl@0
  8064
	// Check the filename.
sl@0
  8065
	CMMFFile* sinkFile = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes));
sl@0
  8066
	CleanupStack::PushL(sinkFile);
sl@0
  8067
sl@0
  8068
	const TDesC& fileName = sinkFile->FileName();
sl@0
  8069
	if (fileName.Compare(parser.Name()))
sl@0
  8070
		{
sl@0
  8071
		INFO_PRINTF3(_L("File sink FileName: Expecting %S, actually got %S"), parser.Name().Ptr(), fileName.Ptr());
sl@0
  8072
		iTestResult = EFail;
sl@0
  8073
		}
sl@0
  8074
sl@0
  8075
	const TDesC& extName = sinkFile->Extension();
sl@0
  8076
	if (extName.Compare(parser.Ext()))
sl@0
  8077
		{
sl@0
  8078
		INFO_PRINTF3(_L("File sink FileName: Expecting %S, actually got %S"), parser.Ext().Ptr(), extName.Ptr());
sl@0
  8079
		iTestResult = EFail;
sl@0
  8080
		}
sl@0
  8081
sl@0
  8082
	CleanupStack::PopAndDestroy(sinkFile);
sl@0
  8083
sl@0
  8084
	// Delete the file.
sl@0
  8085
	// Remove the read only attribute.
sl@0
  8086
	err = testFsSession.SetAtt(testFileName, 0, KEntryAttReadOnly);
sl@0
  8087
	if (err != KErrNone)
sl@0
  8088
		{
sl@0
  8089
		INFO_PRINTF2(_L("File source Delete: Expecting KErrNone, actually got %d"), err);
sl@0
  8090
		iTestResult = EFail;
sl@0
  8091
		}
sl@0
  8092
sl@0
  8093
	sinkFile = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes));
sl@0
  8094
	CleanupStack::PushL(sinkFile);
sl@0
  8095
sl@0
  8096
	TClipDeleteTestStep testStep9(sinkFile);
sl@0
  8097
	DoTestStep(testStep9, _L("File sink Delete 9"), KErrNone);
sl@0
  8098
sl@0
  8099
	CleanupStack::PopAndDestroy(sinkFile);
sl@0
  8100
sl@0
  8101
	// Check that the file has actually been deleted.
sl@0
  8102
	err = testFile.Open(testFsSession, testFileName, EFileRead);
sl@0
  8103
	if (err != KErrNotFound)
sl@0
  8104
		{
sl@0
  8105
		testFile.Close();
sl@0
  8106
sl@0
  8107
		INFO_PRINTF2(_L("File sink Delete: Expecting KErrNotFound, actually got %d"), err);
sl@0
  8108
		iTestResult = EFail;
sl@0
  8109
		}
sl@0
  8110
sl@0
  8111
	// Re-create the file and delete it again.
sl@0
  8112
	sinkFile = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes));
sl@0
  8113
	CleanupStack::PushL(sinkFile);
sl@0
  8114
	sinkFile->SinkPrimeL();
sl@0
  8115
sl@0
  8116
	TClipDeleteTestStep testStep10(sinkClip);
sl@0
  8117
	DoTestStepWithAllocFail(testStep10, _L("File sink Delete 10"), KErrNone);
sl@0
  8118
sl@0
  8119
	CleanupStack::PopAndDestroy(sinkFile);
sl@0
  8120
sl@0
  8121
	// Check that the file has actually been deleted.
sl@0
  8122
	err = testFile.Open(testFsSession, testFileName, EFileRead);
sl@0
  8123
	if (err != KErrNotFound)
sl@0
  8124
		{
sl@0
  8125
		testFile.Close();
sl@0
  8126
sl@0
  8127
		INFO_PRINTF2(_L("File sink Delete: Expecting KErrNotFound, actually got %d"), err);
sl@0
  8128
		iTestResult = EFail;
sl@0
  8129
		}
sl@0
  8130
sl@0
  8131
	if (iFileFailureTestingEnabled)
sl@0
  8132
		{
sl@0
  8133
sl@0
  8134
		// Re-create the file and delete it again.
sl@0
  8135
		sinkFile = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes));
sl@0
  8136
		CleanupStack::PushL(sinkFile);
sl@0
  8137
		sinkFile->SinkPrimeL();
sl@0
  8138
sl@0
  8139
		TClipDeleteTestStep testStep11(sinkClip);
sl@0
  8140
		DoTestStepWithFileFail(testStep11, _L("File sink Delete 11"), KErrNone);
sl@0
  8141
sl@0
  8142
		CleanupStack::PopAndDestroy(sinkFile);
sl@0
  8143
sl@0
  8144
		// Check that the file has actually been deleted.
sl@0
  8145
		err = testFile.Open(testFsSession, testFileName, EFileRead);
sl@0
  8146
		if (err != KErrNotFound)
sl@0
  8147
			{
sl@0
  8148
			testFile.Close();
sl@0
  8149
sl@0
  8150
			INFO_PRINTF2(_L("File sink Delete: Expecting KErrNotFound, actually got %d"), err);
sl@0
  8151
			iTestResult = EFail;
sl@0
  8152
			}
sl@0
  8153
sl@0
  8154
/*
sl@0
  8155
		// DoTestStepWithAllocAndFileFail test is no longer run.
sl@0
  8156
		// Code kept for reference purposes.
sl@0
  8157
sl@0
  8158
		// Re-create the file and delete it again.
sl@0
  8159
		sinkFile = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes));
sl@0
  8160
		CleanupStack::PushL(sinkFile);
sl@0
  8161
		sinkFile->SinkPrimeL();
sl@0
  8162
sl@0
  8163
		TClipDeleteTestStep testStep12(sinkClip);
sl@0
  8164
		DoTestStepWithAllocAndFileFail(testStep12, _L("File sink Delete"), KErrNone);
sl@0
  8165
sl@0
  8166
		CleanupStack::PopAndDestroy(sinkFile);
sl@0
  8167
sl@0
  8168
		// Check that the file has actually been deleted.
sl@0
  8169
		err = testFile.Open(testFsSession, testFileName, EFileRead);
sl@0
  8170
		if (err != KErrNotFound)
sl@0
  8171
			{
sl@0
  8172
			testFile.Close();
sl@0
  8173
sl@0
  8174
			INFO_PRINTF2(_L("File sink Delete: Expecting KErrNotFound, actually got %d"), err);
sl@0
  8175
			iTestResult = EFail;
sl@0
  8176
			}
sl@0
  8177
*/
sl@0
  8178
		}
sl@0
  8179
	CleanupStack::PopAndDestroy(); // testFsSession
sl@0
  8180
sl@0
  8181
	__MM_HEAP_MARKEND;
sl@0
  8182
	return iTestResult;
sl@0
  8183
	}
sl@0
  8184
sl@0
  8185
/**
sl@0
  8186
 *
sl@0
  8187
 * CTestStep_MMF_SRSSNK_U_0104 constructor
sl@0
  8188
 *
sl@0
  8189
 * @xxxx
sl@0
  8190
 *
sl@0
  8191
 */
sl@0
  8192
CTestStep_MMF_SRSSNK_U_0104::CTestStep_MMF_SRSSNK_U_0104()
sl@0
  8193
	{
sl@0
  8194
	// store the name of this test case
sl@0
  8195
	// this is the name that is used by the script file
sl@0
  8196
	// Each test step initialises it's own name
sl@0
  8197
	iTestStepName = _L("MM-MMF-SRSSNK-U-0104");
sl@0
  8198
	}
sl@0
  8199
sl@0
  8200
/**
sl@0
  8201
 *
sl@0
  8202
 * CTestStep_MMF_SRSSNK_U_0104 destructor
sl@0
  8203
 *
sl@0
  8204
 * @xxxx
sl@0
  8205
 *
sl@0
  8206
 */
sl@0
  8207
CTestStep_MMF_SRSSNK_U_0104::~CTestStep_MMF_SRSSNK_U_0104()
sl@0
  8208
	{
sl@0
  8209
	}
sl@0
  8210
sl@0
  8211
/**
sl@0
  8212
 *
sl@0
  8213
 * CTestStep_MMF_SRSSNK_U_0104
sl@0
  8214
 *
sl@0
  8215
 * Attempt to create file sink using invalid config data.
sl@0
  8216
 *
sl@0
  8217
 * @xxxx
sl@0
  8218
 */
sl@0
  8219
_LIT(KTest104FileName1, "c:\\DefaultPathSink.dat"); // Valid but no path.
sl@0
  8220
_LIT(KTest104FileName2, "c:\\DefaultPathNoExtSink"); // Valid but no path or ext.
sl@0
  8221
_LIT(KTest104FileName3, ""); // Definitely not valid.
sl@0
  8222
TVerdict CTestStep_MMF_SRSSNK_U_0104::DoTestStepL()
sl@0
  8223
	{
sl@0
  8224
	__MM_HEAP_MARK;
sl@0
  8225
sl@0
  8226
	// Initialise config data.
sl@0
  8227
	TMMFFileConfig configDes;
sl@0
  8228
	configDes().iPath = KTest104FileName1;
sl@0
  8229
sl@0
  8230
	// Test create the sink.
sl@0
  8231
	TNewSinkTestStep testStep(KUidMmfFileSink, configDes);
sl@0
  8232
	DoFileTest(testStep, _L("Construct file sink 104.1"), KErrNone);
sl@0
  8233
sl@0
  8234
	// Verify that the file has not been created.
sl@0
  8235
	RFs testFsSession;
sl@0
  8236
	User::LeaveIfError(testFsSession.Connect());
sl@0
  8237
	CleanupClosePushL(testFsSession);
sl@0
  8238
sl@0
  8239
	RFile testFile;
sl@0
  8240
	TInt err = testFile.Open(testFsSession, configDes().iPath, EFileRead);
sl@0
  8241
	if (err != KErrNotFound)
sl@0
  8242
		{
sl@0
  8243
		testFile.Close();
sl@0
  8244
sl@0
  8245
		INFO_PRINTF2(_L("File sink create: Expecting KErrNone, actually got %d"), err);
sl@0
  8246
		iTestResult = EFail;
sl@0
  8247
		}
sl@0
  8248
sl@0
  8249
	TNewFileSinkTestStep testStep2(KUidMmfFileSink, configDes);
sl@0
  8250
	DoFileTest(testStep2, _L("Construct file sink 104.2"), KErrNone);
sl@0
  8251
sl@0
  8252
	// Verify that the file has been created.
sl@0
  8253
	err = testFile.Open(testFsSession, configDes().iPath, EFileRead);
sl@0
  8254
	if (err != KErrNone)
sl@0
  8255
		{
sl@0
  8256
		INFO_PRINTF2(_L("File source create: Expecting KErrNone, actually got %d"), err);
sl@0
  8257
		iTestResult = EFail;
sl@0
  8258
		}
sl@0
  8259
	testFile.Close();
sl@0
  8260
sl@0
  8261
	// Delete it.
sl@0
  8262
	CMMFFile* sink = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes));
sl@0
  8263
	CleanupStack::PushL(sink);
sl@0
  8264
	User::LeaveIfError(sink->Delete());
sl@0
  8265
	CleanupStack::PopAndDestroy(sink);
sl@0
  8266
sl@0
  8267
	if (iFileFailureTestingEnabled)
sl@0
  8268
		{
sl@0
  8269
		// Repeat test with file failure only. (Checks for file failure on creation)
sl@0
  8270
		DoTestStepWithFileFail(testStep2, _L("Construct file sink 104.3"), KErrNone);
sl@0
  8271
sl@0
  8272
		// Delete it, now that we don't need it anymore.
sl@0
  8273
		sink = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes));
sl@0
  8274
		CleanupStack::PushL(sink);
sl@0
  8275
		User::LeaveIfError(sink->Delete());
sl@0
  8276
		CleanupStack::PopAndDestroy(sink);
sl@0
  8277
		}
sl@0
  8278
sl@0
  8279
	configDes().iPath = KTest104FileName2;
sl@0
  8280
	TNewSinkTestStep testStep3(KUidMmfFileSink, configDes);
sl@0
  8281
	DoFileTest(testStep3, _L("Construct file sink 104.4"), KErrNone);
sl@0
  8282
sl@0
  8283
	// Verify that the file has not been created.
sl@0
  8284
	err = testFile.Open(testFsSession, configDes().iPath, EFileRead);
sl@0
  8285
	if (err != KErrNotFound)
sl@0
  8286
		{
sl@0
  8287
		testFile.Close();
sl@0
  8288
sl@0
  8289
		INFO_PRINTF2(_L("File sink create: Expecting KErrNone, actually got %d"), err);
sl@0
  8290
		iTestResult = EFail;
sl@0
  8291
		}
sl@0
  8292
sl@0
  8293
	TNewFileSinkTestStep testStep4(KUidMmfFileSink, configDes);
sl@0
  8294
	DoFileTest(testStep4, _L("Construct file sink 104.5"), KErrNone);
sl@0
  8295
sl@0
  8296
	// Verify that the file has been created.
sl@0
  8297
	err = testFile.Open(testFsSession, configDes().iPath, EFileRead);
sl@0
  8298
	if (err != KErrNone)
sl@0
  8299
		{
sl@0
  8300
		INFO_PRINTF2(_L("File sink create: Expecting KErrNone, actually got %d"), err);
sl@0
  8301
		iTestResult = EFail;
sl@0
  8302
		}
sl@0
  8303
	testFile.Close();
sl@0
  8304
sl@0
  8305
	// Delete it.
sl@0
  8306
	sink = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes));
sl@0
  8307
	CleanupStack::PushL(sink);
sl@0
  8308
	User::LeaveIfError(sink->Delete());
sl@0
  8309
	CleanupStack::PopAndDestroy(sink);
sl@0
  8310
sl@0
  8311
	if (iFileFailureTestingEnabled)
sl@0
  8312
		{
sl@0
  8313
		// Repeat test with file failure only. (Checks for file failure on creation)
sl@0
  8314
		DoTestStepWithFileFail(testStep4, _L("Construct file sink 104.6"), KErrNone);
sl@0
  8315
sl@0
  8316
		// Delete it, now that we don't need it anymore.
sl@0
  8317
		sink = STATIC_CAST(CMMFFile*, MDataSink::NewSinkL(KUidMmfFileSink, configDes));
sl@0
  8318
		CleanupStack::PushL(sink);
sl@0
  8319
		User::LeaveIfError(sink->Delete());
sl@0
  8320
		CleanupStack::PopAndDestroy(sink);
sl@0
  8321
		}
sl@0
  8322
sl@0
  8323
	configDes().iPath = KTest104FileName3;
sl@0
  8324
	TNewSinkTestStep testStep5(KUidMmfFileSink, configDes);
sl@0
  8325
	DoFileTest(testStep5, _L("Construct file sink 104.7"), KErrBadName);
sl@0
  8326
sl@0
  8327
	CleanupStack::PopAndDestroy(); // testFsSession
sl@0
  8328
sl@0
  8329
	__MM_HEAP_MARKEND;
sl@0
  8330
	return iTestResult;
sl@0
  8331
	}
sl@0
  8332
sl@0
  8333
/**
sl@0
  8334
 *
sl@0
  8335
 * CTestStep_MMF_SRSSNK_FileSourceMisc constructor
sl@0
  8336
 *
sl@0
  8337
 * @xxxx
sl@0
  8338
 *
sl@0
  8339
 */
sl@0
  8340
CTestStep_MMF_SRSSNK_FileSourceMisc::CTestStep_MMF_SRSSNK_FileSourceMisc(TSourceType aSourceType)
sl@0
  8341
	{
sl@0
  8342
	// store the name of this test case
sl@0
  8343
	// this is the name that is used by the script file
sl@0
  8344
	// Each test step initialises it's own name
sl@0
  8345
	iSourceType = aSourceType;
sl@0
  8346
	ASSERT(iSourceType == ESourceTypeFile || iSourceType == ESourceTypeFileHandle);
sl@0
  8347
	if (iSourceType == ESourceTypeFile)
sl@0
  8348
		{
sl@0
  8349
		iTestStepName = _L("MM-MMF-SRSSNK-U-0105");
sl@0
  8350
		}
sl@0
  8351
	else
sl@0
  8352
		{
sl@0
  8353
		iTestStepName = _L("MM-MMF-SRSSNK-U-0120");
sl@0
  8354
		}
sl@0
  8355
	}
sl@0
  8356
sl@0
  8357
/**
sl@0
  8358
 *
sl@0
  8359
 * CTestStep_MMF_SRSSNK_FileSourceMisc destructor
sl@0
  8360
 *
sl@0
  8361
 * @xxxx
sl@0
  8362
 *
sl@0
  8363
 */
sl@0
  8364
CTestStep_MMF_SRSSNK_FileSourceMisc::~CTestStep_MMF_SRSSNK_FileSourceMisc()
sl@0
  8365
	{
sl@0
  8366
	}
sl@0
  8367
sl@0
  8368
/**
sl@0
  8369
 *
sl@0
  8370
 * CTestStep_MMF_SRSSNK_FileSourceMisc
sl@0
  8371
 *
sl@0
  8372
 * Functional test of file source.
sl@0
  8373
 * Misc. functions test.
sl@0
  8374
 *
sl@0
  8375
 * @xxxx
sl@0
  8376
 */
sl@0
  8377
TVerdict CTestStep_MMF_SRSSNK_FileSourceMisc::DoTestStepL()
sl@0
  8378
	{
sl@0
  8379
	__MM_HEAP_MARK;
sl@0
  8380
sl@0
  8381
	// Initialise config data.
sl@0
  8382
	TMMFFileConfig configFile;
sl@0
  8383
	configFile().iPath = KTest101FileName;
sl@0
  8384
sl@0
  8385
	TInt fileSize;
sl@0
  8386
	OpenFileL(KTest101FileName, EFileRead);
sl@0
  8387
	User::LeaveIfError(iFile.Size(fileSize));
sl@0
  8388
	CloseFile();
sl@0
  8389
	User::LeaveIfError(iFs.Connect());
sl@0
  8390
sl@0
  8391
	// Create a valid buffer.
sl@0
  8392
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  8393
	CleanupStack::PushL(validBuffer);
sl@0
  8394
sl@0
  8395
	// Create a dummy sink.
sl@0
  8396
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
  8397
	CleanupStack::PushL(dummySink);
sl@0
  8398
sl@0
  8399
	// Create source.
sl@0
  8400
	MDataSource* source = CreateFileSourceL(iSourceType, iFs, KTest101FileName);
sl@0
  8401
	CleanupDeletePushL(source);
sl@0
  8402
sl@0
  8403
	// Test create source buffer.
sl@0
  8404
	TCreateSourceBuffer1TestStep testStep(iSourceType, dummySink, KUidMmfDescriptorBuffer, ETrue);
sl@0
  8405
	DoTest(testStep, _L("File source CreateSourceBuffer1"), KErrNotSupported);
sl@0
  8406
sl@0
  8407
	TCreateSourceBuffer2TestStep testStep2(iSourceType, dummySink, validBuffer, KUidMmfDescriptorBuffer, ETrue);
sl@0
  8408
	DoTest(testStep2, _L("File source CreateSourceBuffer2"), KErrNotSupported);
sl@0
  8409
sl@0
  8410
	// Test default base class fns. (These should all do nothing)
sl@0
  8411
	TSourceThreadLogonTestStep testStep3(source, dummySink);
sl@0
  8412
	DoFileTest(testStep3, _L("File source SourceThreadLogon"), KErrNone);
sl@0
  8413
sl@0
  8414
	TNegotiateSourceTestStep testStep4(source, dummySink);
sl@0
  8415
	DoTest(testStep4, _L("File source NegotiateSourceL"), KErrNone);
sl@0
  8416
sl@0
  8417
	source->SourcePrimeL();
sl@0
  8418
	source->SourcePlayL();
sl@0
  8419
	source->SourcePauseL();
sl@0
  8420
	source->SourceStopL();
sl@0
  8421
sl@0
  8422
	TMMFPrioritySettings prioritySettings;
sl@0
  8423
	source->SetSourcePrioritySettings(prioritySettings);
sl@0
  8424
sl@0
  8425
	// Test source log on.
sl@0
  8426
	source->SourcePrimeL();
sl@0
  8427
	TFileSourceThreadLogonTestStep testStep5(source, dummySink, fileSize);
sl@0
  8428
	DoFileTest(testStep5, _L("File source SourceThreadLogon"), KErrNone);
sl@0
  8429
sl@0
  8430
	CleanupStack::PopAndDestroy(source); // source
sl@0
  8431
sl@0
  8432
	CleanupStack::PopAndDestroy(2, validBuffer); // dummySink, validBuffer
sl@0
  8433
sl@0
  8434
	__MM_HEAP_MARKEND;
sl@0
  8435
	return iTestResult;
sl@0
  8436
	}
sl@0
  8437
sl@0
  8438
/**
sl@0
  8439
 *
sl@0
  8440
 * CTestStep_MMF_SRSSNK_FileFillBuffer constructor
sl@0
  8441
 *
sl@0
  8442
 * @xxxx
sl@0
  8443
 *
sl@0
  8444
 */
sl@0
  8445
CTestStep_MMF_SRSSNK_FileFillBuffer::CTestStep_MMF_SRSSNK_FileFillBuffer(TSourceType aSourceType)
sl@0
  8446
	{
sl@0
  8447
	iSourceType = aSourceType;
sl@0
  8448
	ASSERT(iSourceType == ESourceTypeFile || iSourceType == ESourceTypeFileHandle);
sl@0
  8449
	if (iSourceType == ESourceTypeFile)
sl@0
  8450
		{
sl@0
  8451
		iTestStepName = _L("MM-MMF-SRSSNK-U-0106");
sl@0
  8452
		}
sl@0
  8453
	else
sl@0
  8454
		{
sl@0
  8455
		iTestStepName = _L("MM-MMF-SRSSNK-U-0121");
sl@0
  8456
		}
sl@0
  8457
	}
sl@0
  8458
sl@0
  8459
/**
sl@0
  8460
 *
sl@0
  8461
 * CTestStep_MMF_SRSSNK_FileFillBuffer destructor
sl@0
  8462
 *
sl@0
  8463
 * @xxxx
sl@0
  8464
 *
sl@0
  8465
 */
sl@0
  8466
CTestStep_MMF_SRSSNK_FileFillBuffer::~CTestStep_MMF_SRSSNK_FileFillBuffer()
sl@0
  8467
	{
sl@0
  8468
	}
sl@0
  8469
sl@0
  8470
/**
sl@0
  8471
 *
sl@0
  8472
 * CTestStep_MMF_SRSSNK_FileFillBuffer
sl@0
  8473
 *
sl@0
  8474
 * Functional test of descriptor source.
sl@0
  8475
 * FillBufferL() test.
sl@0
  8476
 *
sl@0
  8477
 * @xxxx
sl@0
  8478
 */
sl@0
  8479
TVerdict CTestStep_MMF_SRSSNK_FileFillBuffer::DoTestStepL()
sl@0
  8480
	{
sl@0
  8481
	__MM_HEAP_MARK;
sl@0
  8482
sl@0
  8483
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  8484
	TPtr8 dataPtr(dataDes->Des());
sl@0
  8485
	const TUint8* baseDataPtr = dataPtr.Ptr();
sl@0
  8486
sl@0
  8487
	// Initialise thread active scheduler.
sl@0
  8488
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
  8489
	CleanupStack::PushL(scheduler);
sl@0
  8490
	CActiveScheduler::Install(scheduler);
sl@0
  8491
sl@0
  8492
	// Initialise config data.
sl@0
  8493
	TFileName testFileName(KTest101FileName);
sl@0
  8494
sl@0
  8495
	// Read the data from the file.
sl@0
  8496
	RFs testFsSession;
sl@0
  8497
	User::LeaveIfError(testFsSession.Connect()) ;
sl@0
  8498
	CleanupClosePushL(testFsSession);
sl@0
  8499
sl@0
  8500
	RFile testFile;
sl@0
  8501
	User::LeaveIfError(testFile.Open(testFsSession, testFileName, EFileShareReadersOnly));
sl@0
  8502
	CleanupClosePushL(testFile);
sl@0
  8503
sl@0
  8504
	User::LeaveIfError(testFile.Read(dataPtr));
sl@0
  8505
	CleanupStack::PopAndDestroy(&testFile);
sl@0
  8506
sl@0
  8507
	// Create zero buffer.
sl@0
  8508
	CMMFDescriptorBuffer* zeroBuffer = CMMFDescriptorBuffer::NewL(0);
sl@0
  8509
	CleanupStack::PushL(zeroBuffer);
sl@0
  8510
sl@0
  8511
	// Create big buffer.
sl@0
  8512
	CMMFDescriptorBuffer* bigBuffer = CMMFDescriptorBuffer::NewL(KTestOverDataSize);
sl@0
  8513
	CleanupStack::PushL(bigBuffer);
sl@0
  8514
sl@0
  8515
	// Create valid buffer.
sl@0
  8516
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  8517
	CleanupStack::PushL(validBuffer);
sl@0
  8518
sl@0
  8519
	// Create dummy sink.
sl@0
  8520
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
  8521
	CleanupStack::PushL(dummySink);
sl@0
  8522
sl@0
  8523
	// Create file source.
sl@0
  8524
	MDataSource* source = CreateFileSourceL(iSourceType, testFsSession, KTest101FileName);
sl@0
  8525
	CleanupDeletePushL(source);
sl@0
  8526
sl@0
  8527
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  8528
	source->SourcePrimeL();
sl@0
  8529
sl@0
  8530
	// Create test (invalid) buffer.
sl@0
  8531
	CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer;
sl@0
  8532
	CleanupDeletePushL(testBuffer);
sl@0
  8533
sl@0
  8534
	// Test invalid FillBufferL.
sl@0
  8535
	TFillBufferTestStep testStep(source, testBuffer, dummySink, dataPtr);
sl@0
  8536
	DoFileTest(testStep, _L("File source FillBufferL"), KErrNotSupported);
sl@0
  8537
	CleanupStack::PopAndDestroy(testBuffer);
sl@0
  8538
sl@0
  8539
	// Test valid FillBufferL.
sl@0
  8540
sl@0
  8541
	TFillBufferTestStep testStep2(source, validBuffer, dummySink, dataPtr, KTestBufferSize);
sl@0
  8542
	testStep2.SetAsynchronousRead(ETrue);
sl@0
  8543
	DoFileTestWithoutAllocFail(testStep2, _L("File source FillBufferL"), KErrNone, 2);
sl@0
  8544
sl@0
  8545
	CleanupStack::PopAndDestroy(source);
sl@0
  8546
sl@0
  8547
	TFileFillBufferTestStep testStep3(iSourceType, testFileName, validBuffer, dummySink, dataPtr, KTestBufferSize);
sl@0
  8548
	testStep3.SetAsynchronousRead(ETrue);
sl@0
  8549
	DoFileTest(testStep3, _L("File source FillBufferL"), KErrNone);
sl@0
  8550
sl@0
  8551
	// Test complete fill.
sl@0
  8552
	source = CreateFileSourceL(iSourceType, testFsSession, KTest101FileName);
sl@0
  8553
	CleanupDeletePushL(source);
sl@0
  8554
sl@0
  8555
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  8556
	source->SourcePrimeL();
sl@0
  8557
sl@0
  8558
	TFillBufferTestStep testStep4(source, validBuffer, dummySink, dataPtr, KTestBufferSize);
sl@0
  8559
	testStep4.SetAsynchronousRead(ETrue);
sl@0
  8560
sl@0
  8561
	const TUint8* sourcePtr = baseDataPtr;
sl@0
  8562
	TInt bufferSize;
sl@0
  8563
	do
sl@0
  8564
		{
sl@0
  8565
		testStep4.SetReadLength(Min(KTestBufferSize, KTestDataSize - (sourcePtr-baseDataPtr)));
sl@0
  8566
		DoTestStep(testStep4, _L("File source FillBufferL"), KErrNone, 2);
sl@0
  8567
sl@0
  8568
		bufferSize = validBuffer->BufferSize();
sl@0
  8569
		sourcePtr += bufferSize;
sl@0
  8570
		} while (bufferSize == KTestBufferSize);
sl@0
  8571
sl@0
  8572
	if ((sourcePtr - dataPtr.Ptr()) != KTestDataSize)
sl@0
  8573
		{
sl@0
  8574
		INFO_PRINTF3(_L("File source FillBufferL: Source data ptr, expected %d, got %d"), KTestDataSize, sourcePtr - dataPtr.Ptr());
sl@0
  8575
		iTestResult = EFail;
sl@0
  8576
		}
sl@0
  8577
sl@0
  8578
	// Reset the source.
sl@0
  8579
	source->SourceStopL();
sl@0
  8580
	source->SourcePrimeL();
sl@0
  8581
sl@0
  8582
	if (iFileFailureTestingEnabled)
sl@0
  8583
		{
sl@0
  8584
		// Test complete fill with file fail.
sl@0
  8585
		TFillBufferTestStep testStep5(source, validBuffer, dummySink, dataPtr, KTestBufferSize);
sl@0
  8586
		testStep5.SetAsynchronousRead(ETrue);
sl@0
  8587
sl@0
  8588
		sourcePtr = baseDataPtr;
sl@0
  8589
		do
sl@0
  8590
			{
sl@0
  8591
			testStep5.SetReadLength(Min(KTestBufferSize, KTestDataSize - (sourcePtr-baseDataPtr)));
sl@0
  8592
			DoTestStepWithFileFail(testStep5, _L("File source FillBufferL"), KErrNone, 2);
sl@0
  8593
sl@0
  8594
			bufferSize = validBuffer->BufferSize();
sl@0
  8595
			sourcePtr += bufferSize;
sl@0
  8596
			} while (bufferSize == KTestBufferSize);
sl@0
  8597
sl@0
  8598
		if ((sourcePtr - dataPtr.Ptr()) != KTestDataSize)
sl@0
  8599
			{
sl@0
  8600
			INFO_PRINTF3(_L("File source FillBufferL: Source data ptr, expected %d, got %d"), KTestDataSize, sourcePtr - dataPtr.Ptr());
sl@0
  8601
			iTestResult = EFail;
sl@0
  8602
			}
sl@0
  8603
sl@0
  8604
		// Test additional fill request.
sl@0
  8605
		testStep5.SetReadLength(0);
sl@0
  8606
		DoFileTestWithoutAllocFail(testStep5, _L("File source FillBufferL"), KErrNone, 2);
sl@0
  8607
		}
sl@0
  8608
	CleanupStack::PopAndDestroy(source);
sl@0
  8609
sl@0
  8610
	// Test complete fill. (Single test version)
sl@0
  8611
	TFileFillBuffer2TestStep testStep6(iSourceType, testFileName, validBuffer, dummySink, dataPtr);
sl@0
  8612
	testStep6.SetAsynchronousRead(ETrue);
sl@0
  8613
	DoFileTest(testStep6, _L("File source FillBufferL"), KErrNone);
sl@0
  8614
sl@0
  8615
	// Test multiple read requests.
sl@0
  8616
	RPointerArray<CMMFBuffer> bufferArray;
sl@0
  8617
	CleanupClosePushL(bufferArray);
sl@0
  8618
sl@0
  8619
	User::LeaveIfError(bufferArray.Append(validBuffer));
sl@0
  8620
	TFileFillBuffer3TestStep testStep7(iSourceType, testFileName, &bufferArray, dummySink, dataPtr, KTestBufferSize);
sl@0
  8621
	DoFileTest(testStep7, _L("File source FillBufferL"), KErrNone);
sl@0
  8622
sl@0
  8623
	CMMFDescriptorBuffer* validBuffer2 = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  8624
	CleanupStack::PushL(validBuffer2);
sl@0
  8625
	User::LeaveIfError(bufferArray.Append(validBuffer2));
sl@0
  8626
	DoFileTest(testStep7, _L("File source FillBufferL"), KErrNone);
sl@0
  8627
sl@0
  8628
	CMMFDescriptorBuffer* validBuffer3 = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  8629
	CleanupStack::PushL(validBuffer3);
sl@0
  8630
	User::LeaveIfError(bufferArray.Append(validBuffer3));
sl@0
  8631
	DoFileTest(testStep7, _L("File source FillBufferL"), KErrNone);
sl@0
  8632
sl@0
  8633
	CMMFDescriptorBuffer* validBuffer4 = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  8634
	CleanupStack::PushL(validBuffer4);
sl@0
  8635
	User::LeaveIfError(bufferArray.Append(validBuffer4));
sl@0
  8636
	DoFileTest(testStep7, _L("File source FillBufferL"), KErrNone);
sl@0
  8637
sl@0
  8638
	CMMFDescriptorBuffer* validBuffer5 = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  8639
	CleanupStack::PushL(validBuffer5);
sl@0
  8640
	User::LeaveIfError(bufferArray.Append(validBuffer5));
sl@0
  8641
	DoFileTest(testStep7, _L("File source FillBufferL"), KErrNone);
sl@0
  8642
sl@0
  8643
	// Test multiple read requests that do not get completed.
sl@0
  8644
	testStep7.SetMaxRequestCount(3);
sl@0
  8645
	DoFileTest(testStep7, _L("File source FillBufferL"), KErrNone);
sl@0
  8646
sl@0
  8647
	// Test multiple read requests, checking correct deletion of completed requests.
sl@0
  8648
	source = CreateFileSourceL(iSourceType, testFsSession, KTest101FileName);
sl@0
  8649
	CleanupDeletePushL(source);
sl@0
  8650
sl@0
  8651
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  8652
	source->SourcePrimeL();
sl@0
  8653
sl@0
  8654
	TFileFillBuffer4TestStep testStep8(source, &bufferArray, dummySink, dataPtr, KTestBufferSize);
sl@0
  8655
	DoTestStep(testStep8, _L("File source FillBufferL"), KErrNone, 4);
sl@0
  8656
sl@0
  8657
	CleanupStack::PopAndDestroy(source);
sl@0
  8658
sl@0
  8659
	CleanupStack::PopAndDestroy(5, &bufferArray); // validBuffer5, 4, 3, 2, bufferArray
sl@0
  8660
sl@0
  8661
	// Test zero length read.
sl@0
  8662
	TFileFillBufferTestStep testStep9(iSourceType, testFileName, zeroBuffer, dummySink, dataPtr);
sl@0
  8663
	testStep9.SetAsynchronousRead(ETrue);
sl@0
  8664
	DoFileTest(testStep9, _L("File source FillBufferL"), KErrNone);
sl@0
  8665
sl@0
  8666
	// Test over size read.
sl@0
  8667
	TFileFillBufferTestStep testStep10(iSourceType, testFileName, bigBuffer, dummySink, dataPtr, KTestDataSize);
sl@0
  8668
	testStep10.SetAsynchronousRead(ETrue);
sl@0
  8669
	DoFileTest(testStep10, _L("File source FillBufferL"), KErrNone);
sl@0
  8670
sl@0
  8671
	CleanupStack::PopAndDestroy(7, dataDes); // dummySink, validBuffer, bigBuffer, zeroBuffer, testFsSession, scheduler, dataDes
sl@0
  8672
sl@0
  8673
	__MM_HEAP_MARKEND;
sl@0
  8674
	return iTestResult;
sl@0
  8675
	}
sl@0
  8676
sl@0
  8677
/**
sl@0
  8678
 *
sl@0
  8679
 * CTestStep_MMF_SRSSNK_U_0107 constructor
sl@0
  8680
 *
sl@0
  8681
 * @xxxx
sl@0
  8682
 *
sl@0
  8683
 */
sl@0
  8684
sl@0
  8685
CTestStep_MMF_SRSSNK_U_0107::CTestStep_MMF_SRSSNK_U_0107()
sl@0
  8686
: CTestStep_MMF_SRSSNK(EFalse)
sl@0
  8687
	{
sl@0
  8688
	// store the name of this test case
sl@0
  8689
	// this is the name that is used by the script file
sl@0
  8690
	// Each test step initialises it's own name
sl@0
  8691
	iTestStepName = _L("MM-MMF-SRSSNK-U-0107");
sl@0
  8692
	}
sl@0
  8693
sl@0
  8694
/**
sl@0
  8695
 *
sl@0
  8696
 * CTestStep_MMF_SRSSNK_U_0107 destructor
sl@0
  8697
 *
sl@0
  8698
 * @xxxx
sl@0
  8699
 *
sl@0
  8700
 */
sl@0
  8701
CTestStep_MMF_SRSSNK_U_0107::~CTestStep_MMF_SRSSNK_U_0107()
sl@0
  8702
	{
sl@0
  8703
	}
sl@0
  8704
sl@0
  8705
/**
sl@0
  8706
 *
sl@0
  8707
 * CTestStep_MMF_SRSSNK_U_0107
sl@0
  8708
 *
sl@0
  8709
 * Functional test of file source.
sl@0
  8710
 * BufferEmptiedL() panic test.
sl@0
  8711
 *
sl@0
  8712
 * @xxxx
sl@0
  8713
 */
sl@0
  8714
TVerdict CTestStep_MMF_SRSSNK_U_0107::DoTestStepL()
sl@0
  8715
	{
sl@0
  8716
	__MM_HEAP_MARK;
sl@0
  8717
sl@0
  8718
	// This test fails if running a debug StdSourcesAndSinks dll.
sl@0
  8719
	// So only perform the test on target.
sl@0
  8720
sl@0
  8721
	// Initialise config data.
sl@0
  8722
	TMMFFileConfig configDes;
sl@0
  8723
	configDes().iPath = KTest101FileName;
sl@0
  8724
sl@0
  8725
	// Create valid buffer.
sl@0
  8726
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  8727
	CleanupStack::PushL(validBuffer);
sl@0
  8728
sl@0
  8729
	// Create source file.
sl@0
  8730
	MDataSource* source = MDataSource::NewSourceL(KUidMmfFileSource, configDes);
sl@0
  8731
	CleanupDeletePushL(source);
sl@0
  8732
sl@0
  8733
	// Test BufferEmptiedL
sl@0
  8734
	source->BufferEmptiedL(validBuffer);
sl@0
  8735
sl@0
  8736
	CleanupStack::PopAndDestroy(2, validBuffer); // source, validBuffer
sl@0
  8737
sl@0
  8738
	__MM_HEAP_MARKEND;
sl@0
  8739
	return iTestResult;
sl@0
  8740
	}
sl@0
  8741
sl@0
  8742
/**
sl@0
  8743
 *
sl@0
  8744
 * CTestStep_MMF_SRSSNK_FileReadBuffer constructor
sl@0
  8745
 *
sl@0
  8746
 * @xxxx
sl@0
  8747
 *
sl@0
  8748
 */
sl@0
  8749
CTestStep_MMF_SRSSNK_FileReadBuffer::CTestStep_MMF_SRSSNK_FileReadBuffer(TSourceType aSourceType)
sl@0
  8750
	{
sl@0
  8751
	ASSERT(aSourceType == ESourceTypeFile || aSourceType == ESourceTypeFileHandle);
sl@0
  8752
	iSourceType = aSourceType;
sl@0
  8753
	if (iSourceType == ESourceTypeFile)
sl@0
  8754
		{
sl@0
  8755
		iTestStepName = _L("MM-MMF-SRSSNK-U-0108");
sl@0
  8756
		}
sl@0
  8757
	else
sl@0
  8758
		{
sl@0
  8759
		iTestStepName = _L("MM-MMF-SRSSNK-U-0122");
sl@0
  8760
		}
sl@0
  8761
	}
sl@0
  8762
sl@0
  8763
/**
sl@0
  8764
 *
sl@0
  8765
 * CTestStep_MMF_SRSSNK_FileReadBuffer destructor
sl@0
  8766
 *
sl@0
  8767
 * @xxxx
sl@0
  8768
 *
sl@0
  8769
 */
sl@0
  8770
CTestStep_MMF_SRSSNK_FileReadBuffer::~CTestStep_MMF_SRSSNK_FileReadBuffer()
sl@0
  8771
	{
sl@0
  8772
	}
sl@0
  8773
sl@0
  8774
/**
sl@0
  8775
 *
sl@0
  8776
 * CTestStep_MMF_SRSSNK_FileReadBuffer
sl@0
  8777
 *
sl@0
  8778
 * Functional test of file source.
sl@0
  8779
 * ReadBufferL() test.
sl@0
  8780
 *
sl@0
  8781
 * @xxxx
sl@0
  8782
 */
sl@0
  8783
TVerdict CTestStep_MMF_SRSSNK_FileReadBuffer::DoTestStepL()
sl@0
  8784
	{
sl@0
  8785
	__MM_HEAP_MARK;
sl@0
  8786
sl@0
  8787
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  8788
	TPtr8 dataPtr(dataDes->Des());
sl@0
  8789
sl@0
  8790
	// Initialise thread active scheduler.
sl@0
  8791
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
  8792
	CleanupStack::PushL(scheduler);
sl@0
  8793
	CActiveScheduler::Install(scheduler);
sl@0
  8794
sl@0
  8795
	// Initialise config data.
sl@0
  8796
	TFileName testFileName(KTest101FileName);
sl@0
  8797
sl@0
  8798
	// Read the data from the file.
sl@0
  8799
	RFs testFsSession;
sl@0
  8800
	User::LeaveIfError(testFsSession.Connect()) ;
sl@0
  8801
	CleanupClosePushL(testFsSession);
sl@0
  8802
sl@0
  8803
	RFile testFile;
sl@0
  8804
	User::LeaveIfError(testFile.Open(testFsSession, testFileName, EFileShareReadersOnly));
sl@0
  8805
	CleanupClosePushL(testFile);
sl@0
  8806
sl@0
  8807
	User::LeaveIfError(testFile.Read(dataPtr));
sl@0
  8808
	CleanupStack::PopAndDestroy(&testFile);
sl@0
  8809
sl@0
  8810
	// Create zero buffer.
sl@0
  8811
	CMMFDescriptorBuffer* zeroBuffer = CMMFDescriptorBuffer::NewL(0);
sl@0
  8812
	CleanupStack::PushL(zeroBuffer);
sl@0
  8813
sl@0
  8814
	// Create big buffer.
sl@0
  8815
	CMMFDescriptorBuffer* bigBuffer = CMMFDescriptorBuffer::NewL(KTestOverDataSize);
sl@0
  8816
	CleanupStack::PushL(bigBuffer);
sl@0
  8817
sl@0
  8818
	// Create valid buffer.
sl@0
  8819
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  8820
	CleanupStack::PushL(validBuffer);
sl@0
  8821
sl@0
  8822
	// Create dummy sink.
sl@0
  8823
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
  8824
	CleanupStack::PushL(dummySink);
sl@0
  8825
sl@0
  8826
	// Create source file.
sl@0
  8827
	CMMFClip* source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, testFsSession, KTest101FileName));
sl@0
  8828
	CleanupStack::PushL(source);
sl@0
  8829
sl@0
  8830
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  8831
	source->SourcePrimeL();
sl@0
  8832
sl@0
  8833
	// Test ReadBufferL (these tests should fail)
sl@0
  8834
	CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer;
sl@0
  8835
	CleanupStack::PushL(testBuffer);
sl@0
  8836
sl@0
  8837
	TClipReadBufferTestStep testStep(source, testBuffer, 0, dummySink, dataPtr);
sl@0
  8838
	DoFileTest(testStep, _L("File source ReadBufferL(1)"), KErrNotSupported);
sl@0
  8839
sl@0
  8840
	TClipReadBuffer2TestStep testStep2(source, testBuffer, 0, dummySink, dataPtr, KTestBufferSize);
sl@0
  8841
	DoFileTest(testStep2, _L("File source ReadBufferL(2)"), KErrNotSupported);
sl@0
  8842
sl@0
  8843
	TClipReadBuffer3TestStep testStep3(source, testBuffer, 0, dataPtr, KTestBufferSize);
sl@0
  8844
	DoFileTest(testStep3, _L("File source ReadBufferL(3)"), KErrNotSupported);
sl@0
  8845
	CleanupStack::PopAndDestroy(testBuffer);
sl@0
  8846
sl@0
  8847
	// Test reading from the beginning, middle and end.
sl@0
  8848
	TClipReadBufferTestStep testStep4(source, validBuffer, 0, dummySink, dataPtr, KTestReadSize);
sl@0
  8849
	testStep4.SetAsynchronousRead(ETrue);
sl@0
  8850
	DoFileTestWithoutAllocFail(testStep4, _L("File source ReadBufferL(4)"), KErrNone, 2);
sl@0
  8851
	CleanupStack::PopAndDestroy(source);
sl@0
  8852
sl@0
  8853
	TFileReadBufferTestStep testStep5(iSourceType, testFileName, validBuffer, 0, dummySink, dataPtr, KTestReadSize);
sl@0
  8854
	testStep5.SetAsynchronousRead(ETrue);
sl@0
  8855
	DoFileTest(testStep5, _L("File source ReadBufferL(5)"), KErrNone);
sl@0
  8856
sl@0
  8857
	testStep5.SetPosition(1);
sl@0
  8858
	DoFileTest(testStep5, _L("File source ReadBufferL(6)"), KErrNone);
sl@0
  8859
sl@0
  8860
	testStep5.SetPosition(KTestDataSize/2);
sl@0
  8861
	DoFileTest(testStep5, _L("File source ReadBufferL(7)"), KErrNone);
sl@0
  8862
sl@0
  8863
	testStep5.SetPosition(KTestDataSize/2 + 1);
sl@0
  8864
	DoFileTest(testStep5, _L("File source ReadBufferL(8)"), KErrNone);
sl@0
  8865
sl@0
  8866
	TFileReadBuffer4TestStep testStep6(iSourceType, testFileName, validBuffer, KTestDataSize - 10, dummySink, dataPtr, KTestReadSize);
sl@0
  8867
	testStep6.SetAsynchronousRead(ETrue);
sl@0
  8868
	testStep6.SetExpectedReadLength(10);
sl@0
  8869
	DoFileTest(testStep6, _L("File source ReadBufferL(9)"), KErrNone);
sl@0
  8870
sl@0
  8871
	testStep6.SetPosition(KTestDataSize);
sl@0
  8872
	testStep6.SetExpectedReadLength(0);
sl@0
  8873
	DoFileTest(testStep6, _L("File source ReadBufferL(10)"), KErrNone);
sl@0
  8874
sl@0
  8875
	testStep6.SetPosition(KTestDataSize + 2);
sl@0
  8876
	DoFileTest(testStep6, _L("File source ReadBufferL(11)"), KErrNone);
sl@0
  8877
sl@0
  8878
	// Attempt to read nothing.
sl@0
  8879
	testStep6.SetPosition(0);
sl@0
  8880
	testStep6.SetReadLength(0);
sl@0
  8881
	DoFileTest(testStep6, _L("File source ReadBufferL(12)"), KErrNone);
sl@0
  8882
sl@0
  8883
	// Attempt to read more data than can fit in the buffer.
sl@0
  8884
	testStep6.SetReadLength(KTestOverReadSize);
sl@0
  8885
	DoFileTest(testStep6, _L("File source ReadBufferL(13)"), KErrOverflow);
sl@0
  8886
sl@0
  8887
	// Attempt to read into a zero length buffer.
sl@0
  8888
	TFileReadBufferTestStep testStep7(iSourceType, testFileName, zeroBuffer, 0, dummySink, dataPtr);
sl@0
  8889
	testStep7.SetAsynchronousRead(ETrue);
sl@0
  8890
	DoFileTest(testStep7, _L("File source ReadBufferL(14)"), KErrNone);
sl@0
  8891
sl@0
  8892
	// Attempt to read more data than present in the source.
sl@0
  8893
	TFileReadBuffer4TestStep testStep8(iSourceType, testFileName, bigBuffer, 0, dummySink, dataPtr, KTestOverDataSize);
sl@0
  8894
	testStep8.SetAsynchronousRead(ETrue);
sl@0
  8895
	testStep8.SetExpectedReadLength(KTestDataSize);
sl@0
  8896
	DoFileTest(testStep8, _L("File source ReadBufferL(15)"), KErrNone);
sl@0
  8897
sl@0
  8898
	// Repeat reads without supplying the length to read.
sl@0
  8899
	source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, testFsSession, KTest101FileName));
sl@0
  8900
	CleanupStack::PushL(source);
sl@0
  8901
sl@0
  8902
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  8903
	source->SourcePrimeL();
sl@0
  8904
sl@0
  8905
	TClipReadBuffer2TestStep testStep9(source, validBuffer, 0, dummySink, dataPtr, KTestBufferSize);
sl@0
  8906
	testStep9.SetAsynchronousRead(ETrue);
sl@0
  8907
	DoFileTestWithoutAllocFail(testStep9, _L("File source ReadBufferL(16)"), KErrNone, 2);
sl@0
  8908
	CleanupStack::PopAndDestroy(source);
sl@0
  8909
sl@0
  8910
	TFileReadBuffer2TestStep testStep10(iSourceType, testFileName, validBuffer, 0, dummySink, dataPtr, KTestBufferSize);
sl@0
  8911
	testStep10.SetAsynchronousRead(ETrue);
sl@0
  8912
	DoFileTest(testStep10, _L("File source ReadBufferL(17)"), KErrNone);
sl@0
  8913
sl@0
  8914
	testStep10.SetPosition(1);
sl@0
  8915
	DoFileTest(testStep10, _L("File source ReadBufferL(18)"), KErrNone);
sl@0
  8916
sl@0
  8917
	testStep10.SetPosition(KTestDataSize/2);
sl@0
  8918
	DoFileTest(testStep10, _L("File source ReadBufferL(19)"), KErrNone);
sl@0
  8919
sl@0
  8920
	testStep10.SetPosition(KTestDataSize/2 + 1);
sl@0
  8921
	DoFileTest(testStep10, _L("File source ReadBufferL(20)"), KErrNone);
sl@0
  8922
sl@0
  8923
	testStep10.SetPosition(KTestDataSize - 10);
sl@0
  8924
	testStep10.SetReadLength(10);
sl@0
  8925
	DoFileTest(testStep10, _L("File source ReadBufferL(21)"), KErrNone);
sl@0
  8926
sl@0
  8927
	testStep10.SetPosition(KTestDataSize);
sl@0
  8928
	testStep10.SetReadLength(0);
sl@0
  8929
	DoFileTest(testStep10, _L("File source ReadBufferL(22)"), KErrNone);
sl@0
  8930
sl@0
  8931
	testStep10.SetPosition(KTestDataSize + 2);
sl@0
  8932
	DoFileTest(testStep10, _L("File source ReadBufferL(23)"), KErrNone);
sl@0
  8933
sl@0
  8934
	TFileReadBuffer2TestStep testStep11(iSourceType, testFileName, zeroBuffer, 0, dummySink, dataPtr, 0);
sl@0
  8935
	testStep11.SetAsynchronousRead(ETrue);
sl@0
  8936
	DoFileTest(testStep11, _L("File source ReadBufferL(24)"), KErrNone);
sl@0
  8937
sl@0
  8938
	TFileReadBuffer2TestStep testStep12(iSourceType, testFileName, bigBuffer, 0, dummySink, dataPtr, KTestDataSize);
sl@0
  8939
	testStep12.SetAsynchronousRead(ETrue);
sl@0
  8940
	DoFileTest(testStep12, _L("File source ReadBufferL(25)"), KErrNone);
sl@0
  8941
sl@0
  8942
	// Repeat reads without supplying the length, or a sink.
sl@0
  8943
	source = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, testFsSession, KTest101FileName));
sl@0
  8944
	CleanupStack::PushL(source);
sl@0
  8945
sl@0
  8946
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
  8947
	source->SourcePrimeL();
sl@0
  8948
sl@0
  8949
	TClipReadBuffer3TestStep testStep13(source, validBuffer, 0, dataPtr, KTestBufferSize);
sl@0
  8950
	DoFileTest(testStep13, _L("File source ReadBufferL(26)"), KErrNone);
sl@0
  8951
	CleanupStack::PopAndDestroy(source);
sl@0
  8952
sl@0
  8953
	TFileReadBuffer3TestStep testStep14(iSourceType, testFileName, validBuffer, 0, dataPtr, KTestBufferSize);
sl@0
  8954
	DoFileTest(testStep14, _L("File source ReadBufferL(27)"), KErrNone);
sl@0
  8955
sl@0
  8956
	testStep14.SetPosition(1);
sl@0
  8957
	DoFileTest(testStep14, _L("File source ReadBufferL(28)"), KErrNone);
sl@0
  8958
sl@0
  8959
	testStep14.SetPosition(KTestDataSize/2);
sl@0
  8960
	DoFileTest(testStep14, _L("File source ReadBufferL(29)"), KErrNone);
sl@0
  8961
sl@0
  8962
	testStep14.SetPosition(KTestDataSize/2 + 1);
sl@0
  8963
	DoFileTest(testStep14, _L("File source ReadBufferL(30)"), KErrNone);
sl@0
  8964
sl@0
  8965
	testStep14.SetPosition(KTestDataSize - 10);
sl@0
  8966
	testStep14.SetReadLength(10);
sl@0
  8967
	DoFileTest(testStep14, _L("File source ReadBufferL(31)"), KErrNone);
sl@0
  8968
sl@0
  8969
	testStep14.SetPosition(KTestDataSize);
sl@0
  8970
	testStep14.SetReadLength(0);
sl@0
  8971
	DoFileTest(testStep14, _L("File source ReadBufferL(32)"), KErrNone);
sl@0
  8972
sl@0
  8973
	testStep14.SetPosition(KTestDataSize + 2);
sl@0
  8974
	DoFileTest(testStep14, _L("File source ReadBufferL(33)"), KErrNone);
sl@0
  8975
sl@0
  8976
	TFileReadBuffer3TestStep testStep15(iSourceType, testFileName, zeroBuffer, 0, dataPtr, 0);
sl@0
  8977
	DoFileTest(testStep15, _L("File source ReadBufferL(34)"), KErrNone);
sl@0
  8978
sl@0
  8979
	TFileReadBuffer3TestStep testStep16(iSourceType, testFileName, bigBuffer, 0, dataPtr, KTestDataSize);
sl@0
  8980
	DoFileTest(testStep16, _L("File source ReadBufferL(35)"), KErrNone);
sl@0
  8981
sl@0
  8982
	// Test multiple read requests.
sl@0
  8983
	RPointerArray<CMMFBuffer> bufferArray;
sl@0
  8984
	CleanupClosePushL(bufferArray);
sl@0
  8985
sl@0
  8986
	User::LeaveIfError(bufferArray.Append(validBuffer));
sl@0
  8987
	TFileReadBuffer5TestStep testStep17(iSourceType, testFileName, &bufferArray, 0, dummySink, dataPtr, KTestReadSize);
sl@0
  8988
	TFileReadBuffer6TestStep testStep18(iSourceType, testFileName, &bufferArray, 0, dummySink, dataPtr, KTestBufferSize);
sl@0
  8989
	DoFileTest(testStep17, _L("File source ReadBufferL(36)"), KErrNone);
sl@0
  8990
	DoFileTest(testStep18, _L("File source ReadBufferL(37)"), KErrNone);
sl@0
  8991
sl@0
  8992
	CMMFDescriptorBuffer* validBuffer2 = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  8993
	CleanupStack::PushL(validBuffer2);
sl@0
  8994
	User::LeaveIfError(bufferArray.Append(validBuffer2));
sl@0
  8995
	DoFileTest(testStep17, _L("File source ReadBufferL(38)"), KErrNone);
sl@0
  8996
	DoFileTest(testStep18, _L("File source ReadBufferL(39)"), KErrNone);
sl@0
  8997
sl@0
  8998
	CMMFDescriptorBuffer* validBuffer3 = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  8999
	CleanupStack::PushL(validBuffer3);
sl@0
  9000
	User::LeaveIfError(bufferArray.Append(validBuffer3));
sl@0
  9001
	DoFileTest(testStep17, _L("File source ReadBufferL(40)"), KErrNone);
sl@0
  9002
	DoFileTest(testStep18, _L("File source ReadBufferL(41)"), KErrNone);
sl@0
  9003
sl@0
  9004
	CMMFDescriptorBuffer* validBuffer4 = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  9005
	CleanupStack::PushL(validBuffer4);
sl@0
  9006
	User::LeaveIfError(bufferArray.Append(validBuffer4));
sl@0
  9007
	DoFileTest(testStep17, _L("File source ReadBufferL(42)"), KErrNone);
sl@0
  9008
	DoFileTest(testStep18, _L("File source ReadBufferL(43)"), KErrNone);
sl@0
  9009
sl@0
  9010
	CMMFDescriptorBuffer* validBuffer5 = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  9011
	CleanupStack::PushL(validBuffer5);
sl@0
  9012
	User::LeaveIfError(bufferArray.Append(validBuffer5));
sl@0
  9013
	DoFileTest(testStep17, _L("File source ReadBufferL(44)"), KErrNone);
sl@0
  9014
	DoFileTest(testStep18, _L("File source ReadBufferL(45)"), KErrNone);
sl@0
  9015
sl@0
  9016
	// Test multiple read requests that do not get completed.
sl@0
  9017
	testStep17.SetMaxRequestCount(3);
sl@0
  9018
	DoFileTest(testStep17, _L("File source FillBufferL(46)"), KErrNone);
sl@0
  9019
sl@0
  9020
	testStep18.SetMaxRequestCount(3);
sl@0
  9021
	DoFileTest(testStep18, _L("File source FillBufferL(47)"), KErrNone);
sl@0
  9022
sl@0
  9023
	// Test multiple read requests, checking correct deletion of completed requests.
sl@0
  9024
	CMMFClip* clip = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, testFsSession, KTest101FileName));
sl@0
  9025
	CleanupDeletePushL(clip);
sl@0
  9026
sl@0
  9027
	User::LeaveIfError(clip->SourceThreadLogon(*dummySink));
sl@0
  9028
	clip->SourcePrimeL();
sl@0
  9029
sl@0
  9030
	TFileReadBuffer7TestStep testStep19(clip, &bufferArray, 0, dummySink, dataPtr, KTestBufferSize);
sl@0
  9031
	DoTestStep(testStep19, _L("File source FillBufferL(48)"), KErrNone, 4);
sl@0
  9032
sl@0
  9033
	CleanupStack::PopAndDestroy(clip);
sl@0
  9034
sl@0
  9035
	clip = STATIC_CAST(CMMFClip*, CreateFileSourceL(iSourceType, testFsSession, KTest101FileName));
sl@0
  9036
	CleanupDeletePushL(clip);
sl@0
  9037
sl@0
  9038
	User::LeaveIfError(clip->SourceThreadLogon(*dummySink));
sl@0
  9039
	clip->SourcePrimeL();
sl@0
  9040
sl@0
  9041
	TFileReadBuffer8TestStep testStep20(clip, &bufferArray, 0, dummySink, dataPtr, KTestBufferSize);
sl@0
  9042
	DoTestStep(testStep20, _L("File source FillBufferL(49)"), KErrNone, 4);
sl@0
  9043
sl@0
  9044
	CleanupStack::PopAndDestroy(clip);
sl@0
  9045
sl@0
  9046
	CleanupStack::PopAndDestroy(12, dataDes); // validBuffer5, 4, 3, 2, bufferArray, dummySink, bigBuffer, zeroBuffer, validBuffer, testFsSession, scheduler, dataDes
sl@0
  9047
sl@0
  9048
	__MM_HEAP_MARKEND;
sl@0
  9049
	return iTestResult;
sl@0
  9050
	}
sl@0
  9051
sl@0
  9052
/**
sl@0
  9053
 *
sl@0
  9054
 * CTestStep_MMF_SRSSNK_U_0109 constructor
sl@0
  9055
 *
sl@0
  9056
 * @xxxx
sl@0
  9057
 *
sl@0
  9058
 */
sl@0
  9059
CTestStep_MMF_SRSSNK_U_0109::CTestStep_MMF_SRSSNK_U_0109()
sl@0
  9060
	{
sl@0
  9061
	// store the name of this test case
sl@0
  9062
	// this is the name that is used by the script file
sl@0
  9063
	// Each test step initialises it's own name
sl@0
  9064
	iTestStepName = _L("MM-MMF-SRSSNK-U-0109");
sl@0
  9065
	}
sl@0
  9066
sl@0
  9067
/**
sl@0
  9068
 *
sl@0
  9069
 * CTestStep_MMF_SRSSNK_U_0109 destructor
sl@0
  9070
 *
sl@0
  9071
 * @xxxx
sl@0
  9072
 *
sl@0
  9073
 */
sl@0
  9074
sl@0
  9075
CTestStep_MMF_SRSSNK_U_0109::~CTestStep_MMF_SRSSNK_U_0109()
sl@0
  9076
	{
sl@0
  9077
	}
sl@0
  9078
sl@0
  9079
/**
sl@0
  9080
 *
sl@0
  9081
 * CTestStep_MMF_SRSSNK_U_0109
sl@0
  9082
 *
sl@0
  9083
 * Functional test of file source.
sl@0
  9084
 * Source custom commands test.
sl@0
  9085
 *
sl@0
  9086
 * @xxxx
sl@0
  9087
 */
sl@0
  9088
TVerdict CTestStep_MMF_SRSSNK_U_0109::DoTestStepL()
sl@0
  9089
	{
sl@0
  9090
	__MM_HEAP_MARK;
sl@0
  9091
sl@0
  9092
	// Initialise config data.
sl@0
  9093
	TMMFFileConfig configDes;
sl@0
  9094
	configDes().iPath = KTest101FileName;
sl@0
  9095
sl@0
  9096
	TUid testControllerUid = { KMmfTestControllerUid };
sl@0
  9097
	RMMFController dummyController;
sl@0
  9098
	TMMFPrioritySettings prioritySettings;
sl@0
  9099
	TMMFMessageDestinationPckg destination;
sl@0
  9100
	User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings));
sl@0
  9101
	CleanupClosePushL(dummyController);
sl@0
  9102
sl@0
  9103
	TBuf8<1> dummyArgs;
sl@0
  9104
	User::LeaveIfError(dummyController.AddDataSource(KUidMmfFileSource, configDes));
sl@0
  9105
	TInt err = dummyController.CustomCommandSync(destination, KDescriptorSource, dummyArgs, dummyArgs);
sl@0
  9106
	if (err != KErrNotSupported)
sl@0
  9107
		{
sl@0
  9108
		INFO_PRINTF2(_L("File source SourceCustomCommand: Expecting KErrNotSupported, actually got %d"), err);
sl@0
  9109
		iTestResult = EFail;
sl@0
  9110
		}
sl@0
  9111
sl@0
  9112
	CleanupStack::PopAndDestroy(); // dummyController
sl@0
  9113
sl@0
  9114
	__MM_HEAP_MARKEND;
sl@0
  9115
	return iTestResult;
sl@0
  9116
	}
sl@0
  9117
sl@0
  9118
/**
sl@0
  9119
 *
sl@0
  9120
 * CTestStep_MMF_SRSSNK_FileSinkMisc constructor
sl@0
  9121
 *
sl@0
  9122
 * @xxxx
sl@0
  9123
 *
sl@0
  9124
 */
sl@0
  9125
CTestStep_MMF_SRSSNK_FileSinkMisc::CTestStep_MMF_SRSSNK_FileSinkMisc(TSinkType aSinkType)
sl@0
  9126
	:iSinkType(aSinkType)
sl@0
  9127
	{
sl@0
  9128
	if (iSinkType == ESinkTypeFile)
sl@0
  9129
		{
sl@0
  9130
		iTestStepName = _L("MM-MMF-SRSSNK-U-0110");
sl@0
  9131
		}
sl@0
  9132
	else
sl@0
  9133
		{
sl@0
  9134
		iTestStepName = _L("MM-MMF-SRSSNK-U-0130");
sl@0
  9135
		}
sl@0
  9136
	}
sl@0
  9137
sl@0
  9138
/**
sl@0
  9139
 *
sl@0
  9140
 * CTestStep_MMF_SRSSNK_FileSinkMisc destructor
sl@0
  9141
 *
sl@0
  9142
 * @xxxx
sl@0
  9143
 *
sl@0
  9144
 */
sl@0
  9145
CTestStep_MMF_SRSSNK_FileSinkMisc::~CTestStep_MMF_SRSSNK_FileSinkMisc()
sl@0
  9146
	{
sl@0
  9147
	}
sl@0
  9148
sl@0
  9149
/**
sl@0
  9150
 *
sl@0
  9151
 * CTestStep_MMF_SRSSNK_FileSinkMisc
sl@0
  9152
 *
sl@0
  9153
 * Functional test of file sink.
sl@0
  9154
 * Misc. functions test.
sl@0
  9155
 *
sl@0
  9156
 * @xxxx
sl@0
  9157
 */
sl@0
  9158
TVerdict CTestStep_MMF_SRSSNK_FileSinkMisc::DoTestStepL()
sl@0
  9159
	{
sl@0
  9160
	__MM_HEAP_MARK;
sl@0
  9161
sl@0
  9162
	TFileName testFileName(KTest101FileName);
sl@0
  9163
sl@0
  9164
	// Get file info.
sl@0
  9165
	RFs testFsSession;
sl@0
  9166
	User::LeaveIfError(testFsSession.Connect()) ;
sl@0
  9167
	CleanupClosePushL(testFsSession);
sl@0
  9168
sl@0
  9169
	// Get the size of the test file.
sl@0
  9170
	RFile testFile;
sl@0
  9171
	User::LeaveIfError(testFile.Open(testFsSession, testFileName, EFileRead));
sl@0
  9172
	CleanupClosePushL(testFile);
sl@0
  9173
sl@0
  9174
	TInt fileSize;
sl@0
  9175
	User::LeaveIfError(testFile.Size(fileSize));
sl@0
  9176
	CleanupStack::PopAndDestroy(&testFile);
sl@0
  9177
sl@0
  9178
	// Create dummy source.
sl@0
  9179
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
  9180
	CleanupStack::PushL(dummySource);
sl@0
  9181
sl@0
  9182
	// Create sink.
sl@0
  9183
	MDataSink* sink = CreateFileSinkL(iSinkType, testFsSession, testFileName);
sl@0
  9184
	CleanupDeletePushL(sink);
sl@0
  9185
sl@0
  9186
	// Test create sink buffer. (This should fail)
sl@0
  9187
	TCreateSinkBufferTestStep0 testStep(sink, KUidMmfDescriptorBuffer, ETrue, NULL);
sl@0
  9188
	DoTest(testStep, _L("File sink CreateSinkBuffer"), KErrNotSupported);
sl@0
  9189
sl@0
  9190
	// Test default base class fns. (These should all do nothing)
sl@0
  9191
	TSinkThreadLogonTestStep testStep2(sink, dummySource);
sl@0
  9192
	DoFileTest(testStep2, _L("File sink SinkThreadLogon"), KErrNone);
sl@0
  9193
sl@0
  9194
	TNegotiateTestStep testStep3(sink, dummySource);
sl@0
  9195
	DoTest(testStep3, _L("File sink NegotiateL"), KErrNone);
sl@0
  9196
sl@0
  9197
	sink->SinkPrimeL();
sl@0
  9198
	sink->SinkPlayL();
sl@0
  9199
	sink->SinkPauseL();
sl@0
  9200
	sink->SinkStopL();
sl@0
  9201
sl@0
  9202
	TMMFPrioritySettings prioritySettings;
sl@0
  9203
	sink->SetSinkPrioritySettings(prioritySettings);
sl@0
  9204
sl@0
  9205
	// Test sink log on.
sl@0
  9206
	sink->SinkPrimeL();
sl@0
  9207
	TFileSinkThreadLogonTestStep testStep5(sink, dummySource, fileSize);
sl@0
  9208
	DoFileTest(testStep5, _L("File sink SinkThreadLogon"), KErrNone);
sl@0
  9209
sl@0
  9210
	CleanupStack::PopAndDestroy(sink);
sl@0
  9211
sl@0
  9212
	CleanupStack::PopAndDestroy(2, &testFsSession); //dummySource, testFsSession
sl@0
  9213
sl@0
  9214
	__MM_HEAP_MARKEND;
sl@0
  9215
	return iTestResult;
sl@0
  9216
	}
sl@0
  9217
sl@0
  9218
sl@0
  9219
/**
sl@0
  9220
 *
sl@0
  9221
 * CTestStep_MMF_SRSSNK_FileEmptyBuffer constructor
sl@0
  9222
 *
sl@0
  9223
 * @xxxx
sl@0
  9224
 *
sl@0
  9225
 */
sl@0
  9226
CTestStep_MMF_SRSSNK_FileEmptyBuffer::CTestStep_MMF_SRSSNK_FileEmptyBuffer(TSinkType aSinkType)
sl@0
  9227
	: iSinkType(aSinkType)
sl@0
  9228
	{
sl@0
  9229
	if (iSinkType == ESinkTypeFile)
sl@0
  9230
		{
sl@0
  9231
		iTestStepName = _L("MM-MMF-SRSSNK-U-0111");
sl@0
  9232
		}
sl@0
  9233
	else
sl@0
  9234
		{
sl@0
  9235
		iTestStepName = _L("MM-MMF-SRSSNK-U-0131");
sl@0
  9236
		}
sl@0
  9237
	}
sl@0
  9238
sl@0
  9239
/**
sl@0
  9240
 *
sl@0
  9241
 * CTestStep_MMF_SRSSNK_FileEmptyBuffer destructor
sl@0
  9242
 *
sl@0
  9243
 * @xxxx
sl@0
  9244
 *
sl@0
  9245
 */
sl@0
  9246
CTestStep_MMF_SRSSNK_FileEmptyBuffer::~CTestStep_MMF_SRSSNK_FileEmptyBuffer()
sl@0
  9247
	{
sl@0
  9248
	}
sl@0
  9249
sl@0
  9250
/**
sl@0
  9251
 *
sl@0
  9252
 * CTestStep_MMF_SRSSNK_FileEmptyBuffer
sl@0
  9253
 *
sl@0
  9254
 * There was a flaw in that a failure in DoFileTest and its variants is overlooked.
sl@0
  9255
 * Each time it is called the status of iTestResult must be checked before it's
sl@0
  9256
 * overwritten. It is set to EPass again so that false negatives aren't recorded.
sl@0
  9257
 *
sl@0
  9258
 * The success of this test step depends on the 'failure' variable.
sl@0
  9259
 *
sl@0
  9260
 * EmptyBufferL() test.
sl@0
  9261
 *
sl@0
  9262
 * @xxxx
sl@0
  9263
 */
sl@0
  9264
_LIT(KTest111FileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile4.dat");
sl@0
  9265
TVerdict CTestStep_MMF_SRSSNK_FileEmptyBuffer::DoTestStepL()
sl@0
  9266
	{
sl@0
  9267
	__MM_HEAP_MARK;
sl@0
  9268
sl@0
  9269
	TBool failure = EFalse;
sl@0
  9270
sl@0
  9271
	// Create source buffer.
sl@0
  9272
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  9273
	TPtr8 dataPtr(dataDes->Des());
sl@0
  9274
sl@0
  9275
	// Initialise thread active scheduler.
sl@0
  9276
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
  9277
	CleanupStack::PushL(scheduler);
sl@0
  9278
	CActiveScheduler::Install(scheduler);
sl@0
  9279
sl@0
  9280
	// Set the filename and create a file session.
sl@0
  9281
	TFileName testFileName(KTest111FileName);
sl@0
  9282
sl@0
  9283
	RFs testFsSession;
sl@0
  9284
	User::LeaveIfError(testFsSession.Connect());
sl@0
  9285
	CleanupClosePushL(testFsSession);
sl@0
  9286
sl@0
  9287
	// Delete the test file (might exist from last time)
sl@0
  9288
	testFsSession.Delete(testFileName);
sl@0
  9289
sl@0
  9290
	// Create a dummy source.
sl@0
  9291
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
  9292
	CleanupStack::PushL(dummySource);
sl@0
  9293
sl@0
  9294
	// Create a zero length buffer.
sl@0
  9295
	CMMFDescriptorBuffer* zeroBuffer = CMMFDescriptorBuffer::NewL(0);
sl@0
  9296
	CleanupStack::PushL(zeroBuffer);
sl@0
  9297
sl@0
  9298
	// Create a valid buffer.
sl@0
  9299
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  9300
	CleanupStack::PushL(validBuffer);
sl@0
  9301
sl@0
  9302
	// Set the length to write.
sl@0
  9303
	validBuffer->Data().SetLength(KTestWriteSize);
sl@0
  9304
sl@0
  9305
	// Create the sink.
sl@0
  9306
	MDataSink* sink = CreateFileSinkL(iSinkType, testFsSession, testFileName);
sl@0
  9307
	CleanupDeletePushL(sink);
sl@0
  9308
sl@0
  9309
	// Create a test (invalid) buffer.
sl@0
  9310
	CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer;
sl@0
  9311
	CleanupStack::PushL(testBuffer);
sl@0
  9312
sl@0
  9313
	// Test EmptyBufferL.
sl@0
  9314
	TFileEmptyBufferTestStep testStep(sink, testBuffer, dummySource, testFsSession, testFileName, dataPtr);
sl@0
  9315
	DoFileTest(testStep, _L("File sink EmptyBufferL(1)"), KErrNotSupported);
sl@0
  9316
	CleanupStack::PopAndDestroy(testBuffer);
sl@0
  9317
	if (iTestResult != EPass)
sl@0
  9318
		{
sl@0
  9319
		INFO_PRINTF1(_L("File Sink EmptyBufferL(1) failed"));
sl@0
  9320
		failure = ETrue;
sl@0
  9321
		iTestResult = EPass;
sl@0
  9322
		}
sl@0
  9323
sl@0
  9324
	// Test valid EmptyBufferL.
sl@0
  9325
	TFileEmptyBufferTestStep testStep2(sink, validBuffer, dummySource, testFsSession, testFileName, dataPtr);
sl@0
  9326
	testStep2.SetAsynchronousWrite(ETrue);
sl@0
  9327
	DoFileTestWithoutAllocFail(testStep2, _L("File sink EmptyBufferL(2)"), KErrNone, 2);
sl@0
  9328
	if (iTestResult != EPass)
sl@0
  9329
		{
sl@0
  9330
		INFO_PRINTF1(_L("File Sink EmptyBufferL(2) failed"));
sl@0
  9331
		failure = ETrue;
sl@0
  9332
		iTestResult = EPass;
sl@0
  9333
		}
sl@0
  9334
sl@0
  9335
	CleanupStack::PopAndDestroy(sink);
sl@0
  9336
sl@0
  9337
	TFileEmptyBuffer2TestStep testStep3(iSinkType, validBuffer, dummySource, testFsSession, testFileName, dataPtr);
sl@0
  9338
	testStep3.SetAsynchronousWrite(ETrue);
sl@0
  9339
	DoFileTest(testStep3, _L("File sink EmptyBufferL(3)"), KErrNone);
sl@0
  9340
	if (iTestResult != EPass)
sl@0
  9341
		{
sl@0
  9342
		INFO_PRINTF1(_L("File Sink EmptyBufferL(3) failed"));
sl@0
  9343
		failure = ETrue;
sl@0
  9344
		iTestResult = EPass;
sl@0
  9345
		}
sl@0
  9346
sl@0
  9347
	// Test complete empty.
sl@0
  9348
	TFileEmptyBuffer3TestStep testStep4(iSinkType, validBuffer, dummySource, testFsSession, testFileName, dataPtr);
sl@0
  9349
	testStep4.SetAsynchronousWrite(ETrue);
sl@0
  9350
	DoFileTest(testStep4, _L("File sink EmptyBufferL(4)"), KErrNone);
sl@0
  9351
	if (iTestResult != EPass)
sl@0
  9352
		{
sl@0
  9353
		INFO_PRINTF1(_L("File Sink EmptyBufferL(4) failed"));
sl@0
  9354
		failure = ETrue;
sl@0
  9355
		iTestResult = EPass;
sl@0
  9356
		}
sl@0
  9357
sl@0
  9358
	// Test multiple write requests.
sl@0
  9359
	RPointerArray<CMMFBuffer> bufferArray;
sl@0
  9360
	CleanupClosePushL(bufferArray);
sl@0
  9361
sl@0
  9362
	User::LeaveIfError(bufferArray.Append(validBuffer));
sl@0
  9363
	TFileEmptyBuffer4TestStep testStep5(iSinkType, &bufferArray, dummySource, testFsSession, testFileName, dataPtr);
sl@0
  9364
	testStep5.SetAsynchronousWrite(ETrue);
sl@0
  9365
	testStep5.SetWriteLength(KTestWriteSize);
sl@0
  9366
	DoFileTest(testStep5, _L("File sink EmptyBufferL(5)"), KErrNone);
sl@0
  9367
	if (iTestResult != EPass)
sl@0
  9368
		{
sl@0
  9369
		INFO_PRINTF1(_L("File Sink EmptyBufferL(5) failed"));
sl@0
  9370
		failure = ETrue;
sl@0
  9371
		iTestResult = EPass;
sl@0
  9372
		}
sl@0
  9373
sl@0
  9374
	// Create valid buffer 2.
sl@0
  9375
	CMMFDescriptorBuffer* validBuffer2 = CMMFDescriptorBuffer::NewL(KTestWriteSize);
sl@0
  9376
	CleanupStack::PushL(validBuffer2);
sl@0
  9377
sl@0
  9378
	// Set the length to write.
sl@0
  9379
	validBuffer2->Data().SetLength(KTestWriteSize);
sl@0
  9380
	User::LeaveIfError(bufferArray.Append(validBuffer2));
sl@0
  9381
	DoFileTest(testStep5, _L("File sink EmptyBufferL(6)"), KErrNone);
sl@0
  9382
	if (iTestResult != EPass)
sl@0
  9383
		{
sl@0
  9384
		INFO_PRINTF1(_L("File Sink EmptyBufferL(6) failed"));
sl@0
  9385
		failure = ETrue;
sl@0
  9386
		iTestResult = EPass;
sl@0
  9387
		}
sl@0
  9388
sl@0
  9389
	// Create valid buffer 3.
sl@0
  9390
	CMMFDescriptorBuffer* validBuffer3 = CMMFDescriptorBuffer::NewL(KTestWriteSize);
sl@0
  9391
	CleanupStack::PushL(validBuffer3);
sl@0
  9392
sl@0
  9393
	// Set the length to write.
sl@0
  9394
	validBuffer3->Data().SetLength(KTestWriteSize);
sl@0
  9395
sl@0
  9396
	User::LeaveIfError(bufferArray.Append(validBuffer3));
sl@0
  9397
	DoFileTest(testStep5, _L("File sink EmptyBufferL(7)"), KErrNone);
sl@0
  9398
	if (iTestResult != EPass)
sl@0
  9399
		{
sl@0
  9400
		INFO_PRINTF1(_L("File Sink EmptyBufferL(7) failed"));
sl@0
  9401
		failure = ETrue;
sl@0
  9402
		iTestResult = EPass;
sl@0
  9403
		}
sl@0
  9404
sl@0
  9405
	// Create valid buffer 4.
sl@0
  9406
	CMMFDescriptorBuffer* validBuffer4 = CMMFDescriptorBuffer::NewL(KTestWriteSize);
sl@0
  9407
	CleanupStack::PushL(validBuffer4);
sl@0
  9408
sl@0
  9409
	// Set the length to write.
sl@0
  9410
	validBuffer4->Data().SetLength(KTestWriteSize);
sl@0
  9411
sl@0
  9412
	User::LeaveIfError(bufferArray.Append(validBuffer4));
sl@0
  9413
	DoFileTest(testStep5, _L("File sink EmptyBufferL(8)"), KErrNone);
sl@0
  9414
	if (iTestResult != EPass)
sl@0
  9415
		{
sl@0
  9416
		INFO_PRINTF1(_L("File Sink EmptyBufferL(8) failed"));
sl@0
  9417
		failure = ETrue;
sl@0
  9418
		iTestResult = EPass;
sl@0
  9419
		}
sl@0
  9420
sl@0
  9421
	// Create valid buffer 5.
sl@0
  9422
	CMMFDescriptorBuffer* validBuffer5 = CMMFDescriptorBuffer::NewL(KTestWriteSize);
sl@0
  9423
	CleanupStack::PushL(validBuffer5);
sl@0
  9424
sl@0
  9425
	// Set the length to write.
sl@0
  9426
	validBuffer5->Data().SetLength(KTestWriteSize);
sl@0
  9427
sl@0
  9428
	User::LeaveIfError(bufferArray.Append(validBuffer5));
sl@0
  9429
	DoFileTest(testStep5, _L("File sink EmptyBufferL(9)"), KErrNone);
sl@0
  9430
	if (iTestResult != EPass)
sl@0
  9431
		{
sl@0
  9432
		INFO_PRINTF1(_L("File Sink EmptyBufferL(9) failed"));
sl@0
  9433
		failure = ETrue;
sl@0
  9434
		iTestResult = EPass;
sl@0
  9435
		}
sl@0
  9436
sl@0
  9437
	// Test multiple write requests that do not get completed.
sl@0
  9438
	TFileEmptyBuffer5TestStep testStep6(iSinkType, &bufferArray, dummySource, testFsSession, testFileName, dataPtr);
sl@0
  9439
	testStep6.SetAsynchronousWrite(ETrue);
sl@0
  9440
	testStep6.SetWriteLength(KTestWriteSize);
sl@0
  9441
	testStep6.SetMaxRequestCount(3);
sl@0
  9442
	DoFileTest(testStep6, _L("File sink EmptyBufferL(10)"), KErrNone);
sl@0
  9443
	if (iTestResult != EPass)
sl@0
  9444
		{
sl@0
  9445
		INFO_PRINTF1(_L("File Sink EmptyBufferL(10) failed"));
sl@0
  9446
		failure = ETrue;
sl@0
  9447
		iTestResult = EPass;
sl@0
  9448
		}
sl@0
  9449
sl@0
  9450
	DeleteFileSinkL(iSinkType, testFsSession, testFileName);
sl@0
  9451
sl@0
  9452
	dataPtr.SetLength(0);
sl@0
  9453
	// Test multiple write requests, checking correct deletion of completed requests.
sl@0
  9454
	sink = CreateFileSinkL(iSinkType, testFsSession, testFileName);
sl@0
  9455
	CleanupDeletePushL(sink);
sl@0
  9456
sl@0
  9457
	User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
  9458
	sink->SinkPrimeL();
sl@0
  9459
sl@0
  9460
	TFileEmptyBuffer6TestStep testStep7(sink, &bufferArray, dummySource, testFsSession, testFileName, dataPtr);
sl@0
  9461
	testStep7.SetAsynchronousWrite(ETrue);
sl@0
  9462
	testStep7.SetWriteLength(KTestWriteSize);
sl@0
  9463
	DoTestStep(testStep7, _L("File sink EmptyBufferL(11)"), KErrNone, 4);
sl@0
  9464
	if (iTestResult != EPass)
sl@0
  9465
		{
sl@0
  9466
		INFO_PRINTF1(_L("File Sink EmptyBufferL(11) failed"));
sl@0
  9467
		failure = ETrue;
sl@0
  9468
		iTestResult = EPass;
sl@0
  9469
		}
sl@0
  9470
sl@0
  9471
	CleanupStack::PopAndDestroy(sink);
sl@0
  9472
sl@0
  9473
	CleanupStack::PopAndDestroy(5, &bufferArray); // validBuffer5, 4, 3, 2, bufferArray.
sl@0
  9474
sl@0
  9475
	DeleteFileSinkL(iSinkType, testFsSession, testFileName);
sl@0
  9476
sl@0
  9477
	dataPtr.SetLength(0);
sl@0
  9478
	// Test zero length write.
sl@0
  9479
	TFileEmptyBuffer2TestStep testStep8(iSinkType, zeroBuffer, dummySource, testFsSession, testFileName, dataPtr);
sl@0
  9480
	testStep8.SetAsynchronousWrite(ETrue);
sl@0
  9481
	DoFileTest(testStep8, _L("File sink EmptyBufferL(12)"), KErrNone);
sl@0
  9482
	if (iTestResult != EPass)
sl@0
  9483
		{
sl@0
  9484
		INFO_PRINTF1(_L("File Sink EmptyBufferL(12) failed"));
sl@0
  9485
		failure = ETrue;
sl@0
  9486
		iTestResult = EPass;
sl@0
  9487
		}
sl@0
  9488
sl@0
  9489
	DeleteFileSinkL(iSinkType, testFsSession, testFileName);
sl@0
  9490
sl@0
  9491
	CleanupStack::PopAndDestroy(6, dataDes); // dummySource, validBuffer, zeroBuffer, testFsSession, scheduler, dataDes.
sl@0
  9492
sl@0
  9493
	__MM_HEAP_MARKEND;
sl@0
  9494
sl@0
  9495
	return (failure ? EFail : EPass);
sl@0
  9496
	}
sl@0
  9497
sl@0
  9498
/**
sl@0
  9499
 *
sl@0
  9500
 * CTestStep_MMF_SRSSNK_U_0112 constructor
sl@0
  9501
 *
sl@0
  9502
 * @xxxx
sl@0
  9503
 *
sl@0
  9504
 */
sl@0
  9505
CTestStep_MMF_SRSSNK_U_0112::CTestStep_MMF_SRSSNK_U_0112()
sl@0
  9506
: CTestStep_MMF_SRSSNK(EFalse)
sl@0
  9507
	{
sl@0
  9508
	// store the name of this test case
sl@0
  9509
	// this is the name that is used by the script file
sl@0
  9510
	// Each test step initialises it's own name
sl@0
  9511
	iTestStepName = _L("MM-MMF-SRSSNK-U-0112");
sl@0
  9512
	}
sl@0
  9513
sl@0
  9514
/**
sl@0
  9515
 *
sl@0
  9516
 * CTestStep_MMF_SRSSNK_U_0112 destructor
sl@0
  9517
 *
sl@0
  9518
 * @xxxx
sl@0
  9519
 *
sl@0
  9520
 */
sl@0
  9521
CTestStep_MMF_SRSSNK_U_0112::~CTestStep_MMF_SRSSNK_U_0112()
sl@0
  9522
	{
sl@0
  9523
	}
sl@0
  9524
sl@0
  9525
/**
sl@0
  9526
 *
sl@0
  9527
 * CTestStep_MMF_SRSSNK_U_0112
sl@0
  9528
 *
sl@0
  9529
 * Functional test of file sink.
sl@0
  9530
 * BufferFilledL() panic test.
sl@0
  9531
 *
sl@0
  9532
 * @xxxx
sl@0
  9533
 */
sl@0
  9534
TVerdict CTestStep_MMF_SRSSNK_U_0112::DoTestStepL()
sl@0
  9535
	{
sl@0
  9536
	__MM_HEAP_MARK;
sl@0
  9537
sl@0
  9538
	// This test fails if running a debug StdSourcesAndSinks dll.
sl@0
  9539
	// So only perform the test on target.
sl@0
  9540
sl@0
  9541
	iTestResult = EFail;
sl@0
  9542
sl@0
  9543
	// Initialise config data.
sl@0
  9544
	TMMFFileConfig configDes;
sl@0
  9545
	configDes().iPath = KTest101FileName;
sl@0
  9546
sl@0
  9547
	// Create valid buffer.
sl@0
  9548
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  9549
	CleanupStack::PushL(validBuffer);
sl@0
  9550
sl@0
  9551
	// Create file sink.
sl@0
  9552
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfFileSink, configDes);
sl@0
  9553
	CleanupDeletePushL(sink);
sl@0
  9554
sl@0
  9555
	// Test BufferFilledL
sl@0
  9556
	TRAPD(err, sink->BufferFilledL(validBuffer));
sl@0
  9557
	if (err == KErrNone)
sl@0
  9558
		{
sl@0
  9559
		iTestResult = EPass;
sl@0
  9560
		}
sl@0
  9561
sl@0
  9562
	CleanupStack::PopAndDestroy(sink);
sl@0
  9563
sl@0
  9564
	CleanupStack::PopAndDestroy(validBuffer);
sl@0
  9565
sl@0
  9566
	__MM_HEAP_MARKEND;
sl@0
  9567
	return iTestResult;
sl@0
  9568
	}
sl@0
  9569
sl@0
  9570
/**
sl@0
  9571
 *
sl@0
  9572
 * CTestStep_MMF_SRSSNK_FileWriteBuffer constructor
sl@0
  9573
 *
sl@0
  9574
 * @xxxx
sl@0
  9575
 *
sl@0
  9576
 */
sl@0
  9577
CTestStep_MMF_SRSSNK_FileWriteBuffer::CTestStep_MMF_SRSSNK_FileWriteBuffer(TSinkType aSinkType)
sl@0
  9578
	: iSinkType(aSinkType)
sl@0
  9579
	{
sl@0
  9580
	// store the name of this test case
sl@0
  9581
	// this is the name that is used by the script file
sl@0
  9582
	// Each test step initialises it's own name
sl@0
  9583
	if (aSinkType == ESinkTypeFile)
sl@0
  9584
		{
sl@0
  9585
		iTestStepName = _L("MM-MMF-SRSSNK-U-0113");
sl@0
  9586
		}
sl@0
  9587
	else
sl@0
  9588
		{
sl@0
  9589
		iTestStepName = _L("MM-MMF-SRSSNK-U-0132");
sl@0
  9590
		}
sl@0
  9591
	}
sl@0
  9592
sl@0
  9593
/**
sl@0
  9594
 *
sl@0
  9595
 * CTestStep_MMF_SRSSNK_FileWriteBuffer destructor
sl@0
  9596
 *
sl@0
  9597
 * @xxxx
sl@0
  9598
 *
sl@0
  9599
 */
sl@0
  9600
CTestStep_MMF_SRSSNK_FileWriteBuffer::~CTestStep_MMF_SRSSNK_FileWriteBuffer()
sl@0
  9601
	{
sl@0
  9602
	}
sl@0
  9603
sl@0
  9604
/**
sl@0
  9605
 *
sl@0
  9606
 * CTestStep_MMF_SRSSNK_FileWriteBuffer
sl@0
  9607
 *
sl@0
  9608
 * Functional test of descriptor sink.
sl@0
  9609
 * WriteBufferL() test.
sl@0
  9610
 *
sl@0
  9611
 * @xxxx
sl@0
  9612
 */
sl@0
  9613
TVerdict CTestStep_MMF_SRSSNK_FileWriteBuffer::DoTestStepL()
sl@0
  9614
	{
sl@0
  9615
	__MM_HEAP_MARK;
sl@0
  9616
sl@0
  9617
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  9618
	TPtr8 dataPtr(dataDes->Des());
sl@0
  9619
sl@0
  9620
	// Initialise thread active scheduler.
sl@0
  9621
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
  9622
	CleanupStack::PushL(scheduler);
sl@0
  9623
	CActiveScheduler::Install(scheduler);
sl@0
  9624
sl@0
  9625
	// Set the filename and create a file session.
sl@0
  9626
	TFileName testFileName(KTest103FileName);
sl@0
  9627
sl@0
  9628
	RFs testFsSession;
sl@0
  9629
	User::LeaveIfError(testFsSession.Connect());
sl@0
  9630
	CleanupClosePushL(testFsSession);
sl@0
  9631
sl@0
  9632
	// Initialise config data.
sl@0
  9633
	TMMFFileConfig configFile;
sl@0
  9634
	configFile().iPath = testFileName;
sl@0
  9635
sl@0
  9636
	// Create zero length buffer.
sl@0
  9637
	CMMFDescriptorBuffer* zeroBuffer = CMMFDescriptorBuffer::NewL(0);
sl@0
  9638
	CleanupStack::PushL(zeroBuffer);
sl@0
  9639
sl@0
  9640
	// Create valid buffer.
sl@0
  9641
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  9642
	CleanupStack::PushL(validBuffer);
sl@0
  9643
sl@0
  9644
	// Set it's length
sl@0
  9645
	validBuffer->Data().SetLength(KTestWriteSize);
sl@0
  9646
sl@0
  9647
	// Create dummy source.
sl@0
  9648
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
  9649
	CleanupStack::PushL(dummySource);
sl@0
  9650
sl@0
  9651
	// Create sink.
sl@0
  9652
	CMMFClip* sink = static_cast<CMMFClip*> (CreateFileSinkL(iSinkType, testFsSession, testFileName));
sl@0
  9653
	CleanupStack::PushL(sink);
sl@0
  9654
sl@0
  9655
	// check that Size() can be called before SinkPrimeL()
sl@0
  9656
	TInt size = sink->Size();
sl@0
  9657
sl@0
  9658
	User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
  9659
sl@0
  9660
	// Create a test (invalid) buffer.
sl@0
  9661
	CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer;
sl@0
  9662
	CleanupStack::PushL(testBuffer);
sl@0
  9663
sl@0
  9664
	// Test WriteBufferL (these tests should fail)
sl@0
  9665
	TFileWriteBufferTestStep testStep(sink, testBuffer, 0, dummySource, testFsSession, testFileName, dataPtr);
sl@0
  9666
	DoFileTest(testStep, _L("File sink WriteBufferL(1)"), KErrNotSupported);
sl@0
  9667
sl@0
  9668
	TFileWriteBuffer2TestStep testStep2(sink, testBuffer, 0, dummySource, testFsSession, testFileName, dataPtr);
sl@0
  9669
	DoFileTest(testStep2, _L("File sink WriteBufferL(2)"), KErrNotSupported);
sl@0
  9670
sl@0
  9671
	TFileWriteBuffer3TestStep testStep3(sink, testBuffer, 0, testFsSession, testFileName, dataPtr);
sl@0
  9672
	DoFileTest(testStep3, _L("File sink WriteBufferL(3)"), KErrNotSupported);
sl@0
  9673
	CleanupStack::PopAndDestroy(testBuffer);
sl@0
  9674
sl@0
  9675
	// Test writing to the beginning, middle and end.
sl@0
  9676
	TFileWriteBufferTestStep testStep4(sink, validBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9677
	DoFileTestWithoutAllocFail(testStep4, _L("File sink WriteBufferL(4)"), KErrNone, 2);
sl@0
  9678
	CleanupStack::PopAndDestroy(sink);
sl@0
  9679
sl@0
  9680
	TFileWriteBuffer4TestStep testStep5(iSinkType, testFileName, validBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9681
	DoFileTest(testStep5, _L("File sink WriteBufferL(5)"), KErrNone);
sl@0
  9682
sl@0
  9683
	testStep5.SetPosition(1);
sl@0
  9684
	DoFileTest(testStep5, _L("File sink WriteBufferL(6)"), KErrNone);
sl@0
  9685
sl@0
  9686
	testStep5.SetPosition(KTestDataSize/2);
sl@0
  9687
	DoFileTest(testStep5, _L("File sink WriteBufferL(7)"), KErrNone);
sl@0
  9688
sl@0
  9689
	testStep5.SetPosition(KTestDataSize/2 + 1);
sl@0
  9690
	DoFileTest(testStep5, _L("File sink WriteBufferL(8)"), KErrNone);
sl@0
  9691
sl@0
  9692
	testStep5.SetPosition(KTestDataSize - 10);
sl@0
  9693
	testStep5.SetWriteLength(10);
sl@0
  9694
	DoFileTest(testStep5, _L("File sink WriteBufferL(9)"), KErrNone);
sl@0
  9695
sl@0
  9696
	testStep5.SetPosition(KTestDataSize);
sl@0
  9697
	testStep5.SetWriteLength(0);
sl@0
  9698
	DoFileTest(testStep5, _L("File sink WriteBufferL(10)"), KErrNone);
sl@0
  9699
sl@0
  9700
	testStep5.SetPosition(KTestDataSize + 2);
sl@0
  9701
	testStep5.SetWriteLength(0);
sl@0
  9702
	DoFileTest(testStep5, _L("File sink WriteBufferL(11)"), KErrNone);
sl@0
  9703
sl@0
  9704
	// Attempt to write more data than is in the buffer.
sl@0
  9705
	TFileWriteBuffer5TestStep testStep6(iSinkType, testFileName, validBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9706
	testStep6.SetPosition(KTestDataSize);
sl@0
  9707
	testStep6.SetWriteLength(KTestOverWriteSize);
sl@0
  9708
	DoFileTest(testStep6, _L("File sink WriteBufferL(12)"), KErrNone);
sl@0
  9709
sl@0
  9710
	// Attempt to write a zero length buffer.
sl@0
  9711
	TFileWriteBuffer4TestStep testStep7(iSinkType, testFileName, zeroBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9712
	testStep7.SetWriteLength(0);
sl@0
  9713
	DoFileTest(testStep7, _L("File sink WriteBufferL(13)"), KErrNone);
sl@0
  9714
sl@0
  9715
sl@0
  9716
	DeleteFileSinkL(iSinkType, testFsSession, testFileName);
sl@0
  9717
sl@0
  9718
	// Repeat writes without supplying the length to write.
sl@0
  9719
	dataPtr.SetLength(0);
sl@0
  9720
sl@0
  9721
	sink = static_cast<CMMFClip*> (CreateFileSinkL(iSinkType, testFsSession, testFileName));
sl@0
  9722
	CleanupStack::PushL(sink);
sl@0
  9723
	User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
  9724
sl@0
  9725
	TFileWriteBuffer2TestStep testStep8(sink, validBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9726
	DoFileTestWithoutAllocFail(testStep8, _L("File sink WriteBufferL(14)"), KErrNone, 2);
sl@0
  9727
	CleanupStack::PopAndDestroy(sink);
sl@0
  9728
sl@0
  9729
	TFileWriteBuffer6TestStep testStep9(iSinkType, testFileName, validBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9730
	DoFileTest(testStep9, _L("File sink WriteBufferL(15)"), KErrNone);
sl@0
  9731
sl@0
  9732
	testStep9.SetPosition(1);
sl@0
  9733
	DoFileTest(testStep9, _L("File sink WriteBufferL(16)"), KErrNone);
sl@0
  9734
sl@0
  9735
	testStep9.SetPosition(KTestDataSize/2);
sl@0
  9736
	DoFileTest(testStep9, _L("File sink WriteBufferL(17)"), KErrNone);
sl@0
  9737
sl@0
  9738
	testStep9.SetPosition(KTestDataSize/2 + 1);
sl@0
  9739
	DoFileTest(testStep9, _L("File sink WriteBufferL(18)"), KErrNone);
sl@0
  9740
sl@0
  9741
	testStep9.SetPosition(KTestDataSize - 10);
sl@0
  9742
	testStep9.SetWriteLength(10);
sl@0
  9743
	DoFileTest(testStep9, _L("File sink WriteBufferL(19)"), KErrNone);
sl@0
  9744
sl@0
  9745
	testStep9.SetPosition(KTestDataSize);
sl@0
  9746
	testStep9.SetWriteLength(0);
sl@0
  9747
	DoFileTest(testStep9, _L("File sink WriteBufferL(20)"), KErrNone);
sl@0
  9748
sl@0
  9749
	testStep9.SetPosition(KTestDataSize + 2);
sl@0
  9750
	testStep9.SetWriteLength(0);
sl@0
  9751
	DoFileTest(testStep9, _L("File sink WriteBufferL(21)"), KErrNone);
sl@0
  9752
sl@0
  9753
	// Attempt to write a zero length buffer.
sl@0
  9754
	TFileWriteBuffer6TestStep testStep10(iSinkType, testFileName, zeroBuffer, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9755
	testStep10.SetWriteLength(0);
sl@0
  9756
	DoFileTest(testStep10, _L("File sink WriteBufferL(22)"), KErrNone);
sl@0
  9757
sl@0
  9758
	// Delete the test file.
sl@0
  9759
	DeleteFileSinkL(iSinkType, testFsSession, testFileName);
sl@0
  9760
sl@0
  9761
	// Repeat writes without supplying the length, or a source.
sl@0
  9762
	dataPtr.SetLength(0);
sl@0
  9763
sl@0
  9764
	sink = static_cast<CMMFClip*> (CreateFileSinkL(iSinkType, testFsSession, testFileName));
sl@0
  9765
	CleanupStack::PushL(sink);
sl@0
  9766
	User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
  9767
sl@0
  9768
	TFileWriteBuffer3TestStep testStep11(sink, validBuffer, 0, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9769
	DoFileTest(testStep11, _L("File sink WriteBufferL(23)"), KErrNone);
sl@0
  9770
	CleanupStack::PopAndDestroy(sink);
sl@0
  9771
sl@0
  9772
	TFileWriteBuffer7TestStep testStep12(iSinkType, testFileName, validBuffer, 0, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9773
	DoFileTest(testStep12, _L("File sink WriteBufferL(24)"), KErrNone);
sl@0
  9774
sl@0
  9775
	testStep12.SetPosition(1);
sl@0
  9776
	DoFileTest(testStep12, _L("File sink WriteBufferL(25)"), KErrNone);
sl@0
  9777
sl@0
  9778
	testStep12.SetPosition(KTestDataSize/2);
sl@0
  9779
	DoFileTest(testStep12, _L("File sink WriteBufferL(26)"), KErrNone);
sl@0
  9780
sl@0
  9781
	testStep12.SetPosition(KTestDataSize/2 + 1);
sl@0
  9782
	DoFileTest(testStep12, _L("File sink WriteBufferL(27)"), KErrNone);
sl@0
  9783
sl@0
  9784
	testStep12.SetPosition(KTestDataSize - 10);
sl@0
  9785
	testStep12.SetWriteLength(10);
sl@0
  9786
	DoFileTest(testStep12, _L("File sink WriteBufferL(28)"), KErrNone);
sl@0
  9787
sl@0
  9788
	testStep12.SetPosition(KTestDataSize);
sl@0
  9789
	testStep12.SetWriteLength(0);
sl@0
  9790
	DoFileTest(testStep12, _L("File sink WriteBufferL(29)"), KErrNone);
sl@0
  9791
sl@0
  9792
	testStep12.SetPosition(KTestDataSize + 2);
sl@0
  9793
	testStep12.SetWriteLength(0);
sl@0
  9794
	DoFileTest(testStep12, _L("File sink WriteBufferL(30)"), KErrNone);
sl@0
  9795
sl@0
  9796
	// Attempt to write a zero length buffer.
sl@0
  9797
	TFileWriteBuffer7TestStep testStep13(iSinkType, testFileName, zeroBuffer, 0, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9798
	testStep13.SetWriteLength(0);
sl@0
  9799
	DoFileTest(testStep13, _L("File sink WriteBufferL(31)"), KErrNone);
sl@0
  9800
sl@0
  9801
	// Delete the test file.
sl@0
  9802
	DeleteFileSinkL(iSinkType, testFsSession, testFileName);
sl@0
  9803
sl@0
  9804
	// Test multiple write requests.
sl@0
  9805
	dataPtr.SetLength(0);
sl@0
  9806
	RPointerArray<CMMFBuffer> bufferArray;
sl@0
  9807
	CleanupClosePushL(bufferArray);
sl@0
  9808
sl@0
  9809
	User::LeaveIfError(bufferArray.Append(validBuffer));
sl@0
  9810
	TFileWriteBuffer8TestStep testStep14(iSinkType, testFileName, &bufferArray, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9811
	TFileWriteBuffer9TestStep testStep15(iSinkType, testFileName, &bufferArray, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9812
	DoFileTest(testStep14, _L("File sink WriteBufferL(32)"), KErrNone);
sl@0
  9813
	DoFileTest(testStep15, _L("File sink WriteBufferL(33)"), KErrNone);
sl@0
  9814
sl@0
  9815
	CMMFDescriptorBuffer* validBuffer2 = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  9816
	CleanupStack::PushL(validBuffer2);
sl@0
  9817
sl@0
  9818
	validBuffer2->Data().SetLength(KTestWriteSize);
sl@0
  9819
	User::LeaveIfError(bufferArray.Append(validBuffer2));
sl@0
  9820
	DoFileTest(testStep14, _L("File sink WriteBufferL(34)"), KErrNone);
sl@0
  9821
	DoFileTest(testStep15, _L("File sink WriteBufferL(35)"), KErrNone);
sl@0
  9822
sl@0
  9823
	CMMFDescriptorBuffer* validBuffer3 = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  9824
	CleanupStack::PushL(validBuffer3);
sl@0
  9825
sl@0
  9826
	validBuffer3->Data().SetLength(KTestWriteSize);
sl@0
  9827
	User::LeaveIfError(bufferArray.Append(validBuffer3));
sl@0
  9828
	DoFileTest(testStep14, _L("File sink WriteBufferL(36)"), KErrNone);
sl@0
  9829
	DoFileTest(testStep15, _L("File sink WriteBufferL(37)"), KErrNone);
sl@0
  9830
sl@0
  9831
	CMMFDescriptorBuffer* validBuffer4 = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  9832
	CleanupStack::PushL(validBuffer4);
sl@0
  9833
sl@0
  9834
	validBuffer4->Data().SetLength(KTestWriteSize);
sl@0
  9835
	User::LeaveIfError(bufferArray.Append(validBuffer4));
sl@0
  9836
	DoFileTest(testStep14, _L("File sink WriteBufferL(38)"), KErrNone);
sl@0
  9837
	DoFileTest(testStep15, _L("File sink WriteBufferL(39)"), KErrNone);
sl@0
  9838
sl@0
  9839
	CMMFDescriptorBuffer* validBuffer5 = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
  9840
	CleanupStack::PushL(validBuffer5);
sl@0
  9841
sl@0
  9842
	validBuffer5->Data().SetLength(KTestWriteSize);
sl@0
  9843
	User::LeaveIfError(bufferArray.Append(validBuffer5));
sl@0
  9844
	DoFileTest(testStep14, _L("File sink WriteBufferL(40)"), KErrNone);
sl@0
  9845
	DoFileTest(testStep15, _L("File sink WriteBufferL(41)"), KErrNone);
sl@0
  9846
sl@0
  9847
	// Test multiple write requests that do not get completed.
sl@0
  9848
	TFileWriteBuffer10TestStep testStep16(iSinkType, testFileName, &bufferArray, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9849
	DoFileTest(testStep16, _L("File sink WriteBufferL(42)"), KErrNone);
sl@0
  9850
sl@0
  9851
	TFileWriteBuffer11TestStep testStep17(iSinkType, testFileName, &bufferArray, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9852
	DoFileTest(testStep17, _L("File sink WriteBufferL(43)"), KErrNone);
sl@0
  9853
sl@0
  9854
	// Test multiple write requests, checking correct deletion of completed requests.
sl@0
  9855
	CMMFClip* clip = static_cast<CMMFClip*> (CreateFileSinkL(iSinkType, testFsSession, testFileName));
sl@0
  9856
	CleanupDeletePushL(clip);
sl@0
  9857
sl@0
  9858
	User::LeaveIfError(clip->SinkThreadLogon(*dummySource));
sl@0
  9859
	TFileWriteBuffer12TestStep testStep18(clip, &bufferArray, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9860
	DoTestStep(testStep18, _L("File sink WriteBufferL(44)"), KErrNone, 4);
sl@0
  9861
sl@0
  9862
	CleanupStack::PopAndDestroy(clip);
sl@0
  9863
sl@0
  9864
	clip = static_cast<CMMFClip*> (CreateFileSinkL(iSinkType, testFsSession, testFileName));
sl@0
  9865
	CleanupStack::PushL(clip);
sl@0
  9866
sl@0
  9867
	User::LeaveIfError(clip->SinkThreadLogon(*dummySource));
sl@0
  9868
	TFileWriteBuffer13TestStep testStep19(clip, &bufferArray, 0, dummySource, testFsSession, testFileName, dataPtr, KTestWriteSize);
sl@0
  9869
	DoTestStep(testStep19, _L("File sink WriteBufferL(45)"), KErrNone, 4);
sl@0
  9870
sl@0
  9871
	CleanupStack::PopAndDestroy(clip);
sl@0
  9872
sl@0
  9873
	// Delete the test file.
sl@0
  9874
	DeleteFileSinkL(iSinkType, testFsSession, testFileName);
sl@0
  9875
sl@0
  9876
	CleanupStack::PopAndDestroy(11, dataDes); // validBuffer5, 4, 3, 2, bufferArray, dummySource, validBuffer, zeroBuffer, testFsSession, scheduler, dataDes
sl@0
  9877
sl@0
  9878
	__MM_HEAP_MARKEND;
sl@0
  9879
	return iTestResult;
sl@0
  9880
	}
sl@0
  9881
sl@0
  9882
/**
sl@0
  9883
 *
sl@0
  9884
 * CTestStep_MMF_SRSSNK_U_0114 constructor
sl@0
  9885
 *
sl@0
  9886
 * @xxxx
sl@0
  9887
 *
sl@0
  9888
 */
sl@0
  9889
CTestStep_MMF_SRSSNK_U_0114::CTestStep_MMF_SRSSNK_U_0114()
sl@0
  9890
	{
sl@0
  9891
	// store the name of this test case
sl@0
  9892
	// this is the name that is used by the script file
sl@0
  9893
	// Each test step initialises it's own name
sl@0
  9894
	iTestStepName = _L("MM-MMF-SRSSNK-U-0114");
sl@0
  9895
	}
sl@0
  9896
sl@0
  9897
/**
sl@0
  9898
 *
sl@0
  9899
 * CTestStep_MMF_SRSSNK_U_0114 destructor
sl@0
  9900
 *
sl@0
  9901
 * @xxxx
sl@0
  9902
 *
sl@0
  9903
 */
sl@0
  9904
CTestStep_MMF_SRSSNK_U_0114::~CTestStep_MMF_SRSSNK_U_0114()
sl@0
  9905
	{
sl@0
  9906
	}
sl@0
  9907
sl@0
  9908
/**
sl@0
  9909
 *
sl@0
  9910
 * CTestStep_MMF_SRSSNK_U_0114
sl@0
  9911
 *
sl@0
  9912
 * Functional test of file sink.
sl@0
  9913
 * SinkCustomCommand() test.
sl@0
  9914
 *
sl@0
  9915
 * @xxxx
sl@0
  9916
 */
sl@0
  9917
TVerdict CTestStep_MMF_SRSSNK_U_0114::DoTestStepL()
sl@0
  9918
	{
sl@0
  9919
	__MM_HEAP_MARK;
sl@0
  9920
sl@0
  9921
	// Initialise config data.
sl@0
  9922
	TMMFFileConfig configDes;
sl@0
  9923
	configDes().iPath = KTest101FileName;
sl@0
  9924
sl@0
  9925
	TUid testControllerUid = { KMmfTestControllerUid };
sl@0
  9926
	RMMFController dummyController;
sl@0
  9927
	TMMFPrioritySettings prioritySettings;
sl@0
  9928
	TMMFMessageDestinationPckg destination;
sl@0
  9929
	User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings));
sl@0
  9930
	CleanupClosePushL(dummyController);
sl@0
  9931
sl@0
  9932
	TBuf8<1> dummyArgs;
sl@0
  9933
	User::LeaveIfError(dummyController.AddDataSink(KUidMmfFileSink, configDes));
sl@0
  9934
	TInt err = dummyController.CustomCommandSync(destination, KDescriptorSink, dummyArgs, dummyArgs);
sl@0
  9935
	if (err != KErrNotSupported)
sl@0
  9936
		{
sl@0
  9937
		INFO_PRINTF2(_L("File sink SinkCustomCommand: Expecting KErrNotSupported, actually got %d"), err);
sl@0
  9938
		iTestResult = EFail;
sl@0
  9939
		}
sl@0
  9940
sl@0
  9941
	CleanupStack::PopAndDestroy(&dummyController);
sl@0
  9942
sl@0
  9943
	__MM_HEAP_MARKEND;
sl@0
  9944
	return iTestResult;
sl@0
  9945
	}
sl@0
  9946
sl@0
  9947
/**
sl@0
  9948
 *
sl@0
  9949
 * CTestStep_MMF_SRSSNK_U_0115 constructor
sl@0
  9950
 *
sl@0
  9951
 * @xxxx
sl@0
  9952
 *
sl@0
  9953
 */
sl@0
  9954
CTestStep_MMF_SRSSNK_U_0115::CTestStep_MMF_SRSSNK_U_0115()
sl@0
  9955
	{
sl@0
  9956
	// store the name of this test case
sl@0
  9957
	// this is the name that is used by the script file
sl@0
  9958
	// Each test step initialises it's own name
sl@0
  9959
	iTestStepName = _L("MM-MMF-SRSSNK-U-0115");
sl@0
  9960
	}
sl@0
  9961
sl@0
  9962
/**
sl@0
  9963
 *
sl@0
  9964
 * CTestStep_MMF_SRSSNK_U_0115 destructor
sl@0
  9965
 *
sl@0
  9966
 * @xxxx
sl@0
  9967
 *
sl@0
  9968
 */
sl@0
  9969
CTestStep_MMF_SRSSNK_U_0115::~CTestStep_MMF_SRSSNK_U_0115()
sl@0
  9970
	{
sl@0
  9971
	}
sl@0
  9972
sl@0
  9973
/**
sl@0
  9974
 *
sl@0
  9975
 * CTestStep_MMF_SRSSNK_U_0115
sl@0
  9976
 *
sl@0
  9977
 * CMMFFile
sl@0
  9978
 * Request size / SetLastBuffer test.
sl@0
  9979
 *
sl@0
  9980
 * @xxxx
sl@0
  9981
 */
sl@0
  9982
TVerdict CTestStep_MMF_SRSSNK_U_0115::DoTestStepL()
sl@0
  9983
	{
sl@0
  9984
	__MM_HEAP_MARK;
sl@0
  9985
sl@0
  9986
	// Create source buffer.
sl@0
  9987
	HBufC8* dataDes = HBufC8::NewLC(KTestDataSize);
sl@0
  9988
	TPtr8 dataPtr(dataDes->Des());
sl@0
  9989
sl@0
  9990
	// Initialise thread active scheduler.
sl@0
  9991
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
  9992
	CleanupStack::PushL(scheduler);
sl@0
  9993
	CActiveScheduler::Install(scheduler);
sl@0
  9994
sl@0
  9995
	// Initialise config data.
sl@0
  9996
	TMMFFileConfig configDes;
sl@0
  9997
	configDes().iPath = KTest101FileName;
sl@0
  9998
sl@0
  9999
	// Read the data from the file.
sl@0
 10000
	RFs testFsSession;
sl@0
 10001
	User::LeaveIfError(testFsSession.Connect()) ;
sl@0
 10002
	CleanupClosePushL(testFsSession);
sl@0
 10003
sl@0
 10004
	RFile testFile;
sl@0
 10005
	User::LeaveIfError(testFile.Open(testFsSession, configDes().iPath, EFileShareReadersOnly));
sl@0
 10006
	CleanupClosePushL(testFile);
sl@0
 10007
sl@0
 10008
	User::LeaveIfError(testFile.Read(dataPtr));
sl@0
 10009
	CleanupStack::PopAndDestroy(2); // testFile, testFsSession
sl@0
 10010
sl@0
 10011
	// Create dummy sink.
sl@0
 10012
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
 10013
	CleanupStack::PushL(dummySink);
sl@0
 10014
sl@0
 10015
	// Test fill last buffer
sl@0
 10016
	TFillLastBufferTestStep testStep(KUidMmfFileSource, configDes, dummySink, dataPtr);
sl@0
 10017
	testStep.SetAsynchronousRead(ETrue);
sl@0
 10018
	DoFileTest(testStep, _L("File source: Fill last buffer"), KErrNone);
sl@0
 10019
sl@0
 10020
	// Create a source.
sl@0
 10021
	CMMFClip* source = STATIC_CAST(CMMFClip*, MDataSource::NewSourceL(KUidMmfFileSource, configDes));
sl@0
 10022
	CleanupDeletePushL(source);
sl@0
 10023
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
 10024
	source->SourcePrimeL();
sl@0
 10025
sl@0
 10026
	// Test read last buffer (API version 1)
sl@0
 10027
	TReadLastBufferTestStep testStep2(source, dummySink, dataPtr);
sl@0
 10028
	testStep2.SetAsynchronousRead(ETrue);
sl@0
 10029
	DoFileTestWithoutAllocFail(testStep2, _L("File source: Read last buffer"), KErrNone, 2);
sl@0
 10030
sl@0
 10031
	TReadLastBuffer2TestStep testStep3(source, dummySink, dataPtr);
sl@0
 10032
	testStep3.SetAsynchronousRead(ETrue);
sl@0
 10033
	DoFileTestWithoutAllocFail(testStep3, _L("File source: Read last buffer"), KErrNone, 2);
sl@0
 10034
sl@0
 10035
	TReadLastBuffer3TestStep testStep4(source, dataPtr);
sl@0
 10036
	testStep4.SetAsynchronousRead(ETrue);
sl@0
 10037
	DoFileTestWithoutAllocFail(testStep4, _L("File source: Read last buffer"), KErrNone, 2);
sl@0
 10038
sl@0
 10039
	CleanupStack::PopAndDestroy(source);
sl@0
 10040
sl@0
 10041
	CleanupStack::PopAndDestroy(3, dataDes); // dummySink, scheduler, dataDes
sl@0
 10042
sl@0
 10043
	__MM_HEAP_MARKEND;
sl@0
 10044
	return iTestResult;
sl@0
 10045
	}
sl@0
 10046
sl@0
 10047
sl@0
 10048
sl@0
 10049
/**
sl@0
 10050
 *
sl@0
 10051
 * CTestStep_MMF_SRSSNK_FileEvaluateIntent constructor
sl@0
 10052
 *
sl@0
 10053
 * @xxxx
sl@0
 10054
 *
sl@0
 10055
 */
sl@0
 10056
CTestStep_MMF_SRSSNK_FileEvaluateIntent::CTestStep_MMF_SRSSNK_FileEvaluateIntent(TSourceType aSourceType)
sl@0
 10057
	: iSourceType(aSourceType)
sl@0
 10058
	{
sl@0
 10059
	if (aSourceType == ESourceTypeFile)
sl@0
 10060
		{
sl@0
 10061
		iTestStepName = _L("MM-MMF-SRSSNK-U-0116");
sl@0
 10062
		iSinkType = ESinkTypeFile;
sl@0
 10063
		}
sl@0
 10064
	else
sl@0
 10065
		{
sl@0
 10066
		iTestStepName = _L("MM-MMF-SRSSNK-U-0140");
sl@0
 10067
		iSinkType = ESinkTypeFileHandle;
sl@0
 10068
		}
sl@0
 10069
	}
sl@0
 10070
sl@0
 10071
/**
sl@0
 10072
 *
sl@0
 10073
 * CTestStep_MMF_SRSSNK_FileEvaluateIntent destructor
sl@0
 10074
 *
sl@0
 10075
 * @xxxx
sl@0
 10076
 *
sl@0
 10077
 */
sl@0
 10078
CTestStep_MMF_SRSSNK_FileEvaluateIntent::~CTestStep_MMF_SRSSNK_FileEvaluateIntent()
sl@0
 10079
	{
sl@0
 10080
	}
sl@0
 10081
sl@0
 10082
/**
sl@0
 10083
 *
sl@0
 10084
 * CTestStep_MMF_SRSSNK_FileEvaluateIntent
sl@0
 10085
 *
sl@0
 10086
 * CMMFFile
sl@0
 10087
 * Evaluate Intent
sl@0
 10088
 *
sl@0
 10089
 * @xxxx
sl@0
 10090
 */
sl@0
 10091
TVerdict CTestStep_MMF_SRSSNK_FileEvaluateIntent::DoTestStepL()
sl@0
 10092
	{
sl@0
 10093
	__MM_HEAP_MARK;
sl@0
 10094
sl@0
 10095
	// Initialise thread active scheduler.
sl@0
 10096
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 10097
	CleanupStack::PushL(scheduler);
sl@0
 10098
	CActiveScheduler::Install(scheduler);
sl@0
 10099
sl@0
 10100
	TFileName testFileName(KTest101FileName);
sl@0
 10101
	RFs testFsSession;
sl@0
 10102
	User::LeaveIfError(testFsSession.Connect());
sl@0
 10103
	CleanupClosePushL(testFsSession);
sl@0
 10104
sl@0
 10105
	// Create dummy source
sl@0
 10106
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
 10107
	CleanupStack::PushL(dummySource);
sl@0
 10108
sl@0
 10109
sl@0
 10110
	// Create dummy sink.
sl@0
 10111
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
 10112
	CleanupStack::PushL(dummySink);
sl@0
 10113
sl@0
 10114
sl@0
 10115
	// Create a source.
sl@0
 10116
	CMMFClip* source = static_cast<CMMFClip*>(CreateFileSourceL(iSourceType, testFsSession, testFileName));
sl@0
 10117
	CleanupDeletePushL(source);
sl@0
 10118
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
 10119
	source->SourcePrimeL();
sl@0
 10120
sl@0
 10121
	// we know it is a file source since we have just created it
sl@0
 10122
	CMMFFile* file = static_cast<CMMFFile*>(source);
sl@0
 10123
sl@0
 10124
	// file open, for unprotected files this should always return KErrNone
sl@0
 10125
	TInt err = file->EvaluateIntent(EPeek);
sl@0
 10126
	if (err != KErrNone)
sl@0
 10127
		iTestResult = EFail;
sl@0
 10128
sl@0
 10129
	source->SourceStopL();
sl@0
 10130
sl@0
 10131
	// file closed
sl@0
 10132
	err = file->EvaluateIntent(EPeek);
sl@0
 10133
	if (((iSinkType == ESinkTypeFile) && (err != KErrNotReady)) ||
sl@0
 10134
		((iSinkType == ESinkTypeFileHandle) && (err != KErrNone)))
sl@0
 10135
		{
sl@0
 10136
		iTestResult = EFail;
sl@0
 10137
		}
sl@0
 10138
sl@0
 10139
	CleanupStack::PopAndDestroy(source);
sl@0
 10140
sl@0
 10141
	// Create a sink.
sl@0
 10142
	CMMFClip* sink = static_cast<CMMFClip*>(CreateFileSinkL(iSinkType, testFsSession, testFileName));
sl@0
 10143
	CleanupDeletePushL(sink);
sl@0
 10144
	User::LeaveIfError(sink->SourceThreadLogon(*dummySource));
sl@0
 10145
	sink->SinkPrimeL();
sl@0
 10146
sl@0
 10147
	// we know it is a file sink since we have just created it
sl@0
 10148
	file = static_cast<CMMFFile*>(sink);
sl@0
 10149
sl@0
 10150
	// file open, for unprotected files this should always return KErrNone
sl@0
 10151
	err = file->EvaluateIntent(EPeek);
sl@0
 10152
	if (err != KErrNone)
sl@0
 10153
		iTestResult = EFail;
sl@0
 10154
sl@0
 10155
	sink->SinkStopL();
sl@0
 10156
sl@0
 10157
	// file closed
sl@0
 10158
	err = file->EvaluateIntent(EPeek);
sl@0
 10159
	if (((iSinkType == ESinkTypeFile) && (err != KErrNotReady)) ||
sl@0
 10160
		((iSinkType == ESinkTypeFileHandle) && (err != KErrNone)))
sl@0
 10161
		{
sl@0
 10162
		iTestResult = EFail;
sl@0
 10163
		}
sl@0
 10164
sl@0
 10165
	CleanupStack::PopAndDestroy(sink);
sl@0
 10166
sl@0
 10167
sl@0
 10168
	CleanupStack::PopAndDestroy(4, scheduler); // dummySink, dummySource, testFsSession, scheduler
sl@0
 10169
sl@0
 10170
	__MM_HEAP_MARKEND;
sl@0
 10171
	return iTestResult;
sl@0
 10172
	}
sl@0
 10173
sl@0
 10174
sl@0
 10175
sl@0
 10176
/**
sl@0
 10177
 *
sl@0
 10178
 * CTestStep_MMF_SRSSNK_FileExecuteIntent constructor
sl@0
 10179
 *
sl@0
 10180
 * @xxxx
sl@0
 10181
 *
sl@0
 10182
 */
sl@0
 10183
CTestStep_MMF_SRSSNK_FileExecuteIntent::CTestStep_MMF_SRSSNK_FileExecuteIntent(TSourceType aSourceType)
sl@0
 10184
	: iSourceType(aSourceType)
sl@0
 10185
	{
sl@0
 10186
	if (aSourceType == ESourceTypeFile)
sl@0
 10187
		{
sl@0
 10188
		iTestStepName = _L("MM-MMF-SRSSNK-U-0117");
sl@0
 10189
		iSinkType = ESinkTypeFile;
sl@0
 10190
		}
sl@0
 10191
	else
sl@0
 10192
		{
sl@0
 10193
		iTestStepName = _L("MM-MMF-SRSSNK-U-0141");
sl@0
 10194
		iSinkType = ESinkTypeFileHandle;
sl@0
 10195
		}
sl@0
 10196
sl@0
 10197
	}
sl@0
 10198
sl@0
 10199
/**
sl@0
 10200
 *
sl@0
 10201
 * CTestStep_MMF_SRSSNK_FileExecuteIntent destructor
sl@0
 10202
 *
sl@0
 10203
 * @xxxx
sl@0
 10204
 *
sl@0
 10205
 */
sl@0
 10206
CTestStep_MMF_SRSSNK_FileExecuteIntent::~CTestStep_MMF_SRSSNK_FileExecuteIntent()
sl@0
 10207
	{
sl@0
 10208
	}
sl@0
 10209
sl@0
 10210
/**
sl@0
 10211
 *
sl@0
 10212
 * CTestStep_MMF_SRSSNK_FileExecuteIntent
sl@0
 10213
 *
sl@0
 10214
 * CMMFFile
sl@0
 10215
 * Execute Intent test
sl@0
 10216
 *
sl@0
 10217
 * @xxxx
sl@0
 10218
 */
sl@0
 10219
TVerdict CTestStep_MMF_SRSSNK_FileExecuteIntent::DoTestStepL()
sl@0
 10220
	{
sl@0
 10221
	__MM_HEAP_MARK;
sl@0
 10222
sl@0
 10223
	// Initialise thread active scheduler.
sl@0
 10224
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 10225
	CleanupStack::PushL(scheduler);
sl@0
 10226
	CActiveScheduler::Install(scheduler);
sl@0
 10227
sl@0
 10228
	TFileName testFileName(KTest101FileName);
sl@0
 10229
	RFs testFsSession;
sl@0
 10230
	User::LeaveIfError(testFsSession.Connect());
sl@0
 10231
	CleanupClosePushL(testFsSession);
sl@0
 10232
sl@0
 10233
	// Create dummy source
sl@0
 10234
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
 10235
	CleanupStack::PushL(dummySource);
sl@0
 10236
sl@0
 10237
sl@0
 10238
	// Create dummy sink.
sl@0
 10239
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
 10240
	CleanupStack::PushL(dummySink);
sl@0
 10241
sl@0
 10242
sl@0
 10243
	// Create a source.
sl@0
 10244
	CMMFClip* source = static_cast<CMMFClip*>(CreateFileSourceL(iSourceType, testFsSession, testFileName));
sl@0
 10245
	CleanupDeletePushL(source);
sl@0
 10246
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
 10247
	source->SourcePrimeL();
sl@0
 10248
sl@0
 10249
	// we know it is a file source since we have just created it
sl@0
 10250
	CMMFFile* file = static_cast<CMMFFile*>(source);
sl@0
 10251
sl@0
 10252
	// file open, for unprotected files this should always return KErrNone
sl@0
 10253
	TInt err = file->ExecuteIntent(EPeek);
sl@0
 10254
	if (err != KErrNone)
sl@0
 10255
		{
sl@0
 10256
		iTestResult = EFail;
sl@0
 10257
		INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), KErrNone, err);
sl@0
 10258
		}
sl@0
 10259
sl@0
 10260
	source->SourceStopL();
sl@0
 10261
sl@0
 10262
	// file closed
sl@0
 10263
	err = file->ExecuteIntent(EPeek);
sl@0
 10264
	if (((iSinkType == ESinkTypeFile) && (err != KErrNotReady)) ||
sl@0
 10265
		((iSinkType == ESinkTypeFileHandle) && (err != KErrNone)))
sl@0
 10266
		{
sl@0
 10267
		iTestResult = EFail;
sl@0
 10268
		INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), iSinkType == ESinkTypeFile ? KErrNotReady : KErrNone, err);
sl@0
 10269
		}
sl@0
 10270
sl@0
 10271
	CleanupStack::PopAndDestroy(source);
sl@0
 10272
sl@0
 10273
	// Create a sink.
sl@0
 10274
	CMMFClip* sink = static_cast<CMMFClip*>(CreateFileSinkL(iSinkType, testFsSession, testFileName));
sl@0
 10275
	CleanupDeletePushL(sink);
sl@0
 10276
	User::LeaveIfError(sink->SourceThreadLogon(*dummySource));
sl@0
 10277
	sink->SinkPrimeL();
sl@0
 10278
sl@0
 10279
	// we know it is a file sink since we have just created it
sl@0
 10280
	file = static_cast<CMMFFile*>(sink);
sl@0
 10281
sl@0
 10282
	// file open, for unprotected files this should always return KErrNone
sl@0
 10283
	err = file->ExecuteIntent(EPeek);
sl@0
 10284
	if (err != KErrNone)
sl@0
 10285
		{
sl@0
 10286
		iTestResult = EFail;
sl@0
 10287
		INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), KErrNone, err);
sl@0
 10288
		}
sl@0
 10289
sl@0
 10290
	sink->SinkStopL();
sl@0
 10291
sl@0
 10292
	// file closed
sl@0
 10293
	err = file->ExecuteIntent(EPeek);
sl@0
 10294
	if (((iSinkType == ESinkTypeFile) && (err != KErrNotReady)) ||
sl@0
 10295
		((iSinkType == ESinkTypeFileHandle) && (err != KErrNone)))
sl@0
 10296
		{
sl@0
 10297
		iTestResult = EFail;
sl@0
 10298
		INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), iSinkType == ESinkTypeFile ? KErrNotReady : KErrNone, err);
sl@0
 10299
		}
sl@0
 10300
sl@0
 10301
	CleanupStack::PopAndDestroy(sink);
sl@0
 10302
sl@0
 10303
sl@0
 10304
	CleanupStack::PopAndDestroy(4, scheduler); // dummySink, dummySource, testFsSession, scheduler
sl@0
 10305
sl@0
 10306
	__MM_HEAP_MARKEND;
sl@0
 10307
	return iTestResult;
sl@0
 10308
	}
sl@0
 10309
sl@0
 10310
sl@0
 10311
/**
sl@0
 10312
 *
sl@0
 10313
 * CTestStep_MMF_SRSSNK_FileIsProtected constructor
sl@0
 10314
 *
sl@0
 10315
 * IsProtected Test
sl@0
 10316
 * @xxxx
sl@0
 10317
 *
sl@0
 10318
 */
sl@0
 10319
CTestStep_MMF_SRSSNK_FileIsProtected::CTestStep_MMF_SRSSNK_FileIsProtected(TSourceType aSourceType)
sl@0
 10320
	: iSourceType(aSourceType)
sl@0
 10321
	{
sl@0
 10322
	if (aSourceType == ESourceTypeFile)
sl@0
 10323
		{
sl@0
 10324
		iTestStepName = _L("MM-MMF-SRSSNK-U-0118");
sl@0
 10325
		iSinkType = ESinkTypeFile;
sl@0
 10326
		}
sl@0
 10327
	else
sl@0
 10328
		{
sl@0
 10329
		iTestStepName = _L("MM-MMF-SRSSNK-U-0142");
sl@0
 10330
		iSinkType = ESinkTypeFileHandle;
sl@0
 10331
		}
sl@0
 10332
	}
sl@0
 10333
sl@0
 10334
/**
sl@0
 10335
 *
sl@0
 10336
 * CTestStep_MMF_SRSSNK_FileIsProtected destructor
sl@0
 10337
 *
sl@0
 10338
 * @xxxx
sl@0
 10339
 *
sl@0
 10340
 */
sl@0
 10341
CTestStep_MMF_SRSSNK_FileIsProtected::~CTestStep_MMF_SRSSNK_FileIsProtected()
sl@0
 10342
	{
sl@0
 10343
	}
sl@0
 10344
sl@0
 10345
/**
sl@0
 10346
 *
sl@0
 10347
 * CTestStep_MMF_SRSSNK_FileIsProtected
sl@0
 10348
 *
sl@0
 10349
 * CMMFFile
sl@0
 10350
 * Execute Intent test
sl@0
 10351
 *
sl@0
 10352
 * @xxxx
sl@0
 10353
 */
sl@0
 10354
TVerdict CTestStep_MMF_SRSSNK_FileIsProtected::DoTestStepL()
sl@0
 10355
	{
sl@0
 10356
	__MM_HEAP_MARK;
sl@0
 10357
sl@0
 10358
	// Initialise thread active scheduler.
sl@0
 10359
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 10360
	CleanupStack::PushL(scheduler);
sl@0
 10361
	CActiveScheduler::Install(scheduler);
sl@0
 10362
sl@0
 10363
	TFileName testFileName(KTest101FileName);
sl@0
 10364
	RFs testFsSession;
sl@0
 10365
	User::LeaveIfError(testFsSession.Connect());
sl@0
 10366
	CleanupClosePushL(testFsSession);
sl@0
 10367
sl@0
 10368
	// Create dummy source
sl@0
 10369
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
 10370
	CleanupStack::PushL(dummySource);
sl@0
 10371
sl@0
 10372
sl@0
 10373
	// Create dummy sink.
sl@0
 10374
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
 10375
	CleanupStack::PushL(dummySink);
sl@0
 10376
sl@0
 10377
sl@0
 10378
	// Create a source.
sl@0
 10379
	CMMFClip* source = static_cast<CMMFClip*>(CreateFileSourceL(iSourceType, testFsSession, testFileName));
sl@0
 10380
	CleanupDeletePushL(source);
sl@0
 10381
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
 10382
	source->SourcePrimeL();
sl@0
 10383
sl@0
 10384
	// we know it is a file source since we have just created it
sl@0
 10385
	CMMFFile* file = static_cast<CMMFFile*>(source);
sl@0
 10386
sl@0
 10387
	TBool isProtected = EFalse;
sl@0
 10388
	TInt err = KErrNone;
sl@0
 10389
	// file open, for unprotected files this should always be false
sl@0
 10390
	TRAP(err, isProtected = file->IsProtectedL());
sl@0
 10391
	if (err != KErrNone)
sl@0
 10392
		{
sl@0
 10393
		iTestResult = EFail;
sl@0
 10394
		INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), KErrNone, err);
sl@0
 10395
		}
sl@0
 10396
	else if (isProtected)
sl@0
 10397
		{
sl@0
 10398
		iTestResult = EFail;
sl@0
 10399
		INFO_PRINTF1(_L("Failure, expected unprotected file"));
sl@0
 10400
		}
sl@0
 10401
sl@0
 10402
	source->SourceStopL();
sl@0
 10403
sl@0
 10404
	// file closed, should leave KErrNotReady
sl@0
 10405
	TRAP(err, isProtected = file->IsProtectedL());
sl@0
 10406
	if (((iSinkType == ESinkTypeFile) && (err != KErrNotReady)) ||
sl@0
 10407
		((iSinkType == ESinkTypeFileHandle) && (err != KErrNone)))
sl@0
 10408
		{
sl@0
 10409
		iTestResult = EFail;
sl@0
 10410
		INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), iSinkType == ESinkTypeFile ? KErrNotReady : KErrNone, err);
sl@0
 10411
		}
sl@0
 10412
sl@0
 10413
	CleanupStack::PopAndDestroy(source);
sl@0
 10414
sl@0
 10415
	// Create a sink.
sl@0
 10416
	CMMFClip* sink = static_cast<CMMFClip*>(CreateFileSinkL(iSinkType, testFsSession, testFileName));
sl@0
 10417
	CleanupDeletePushL(sink);
sl@0
 10418
	User::LeaveIfError(sink->SourceThreadLogon(*dummySource));
sl@0
 10419
	sink->SinkPrimeL();
sl@0
 10420
sl@0
 10421
	// we know it is a file sink since we have just created it
sl@0
 10422
	file = static_cast<CMMFFile*>(sink);
sl@0
 10423
sl@0
 10424
	// file open, for unprotected files this should always return EFalse
sl@0
 10425
	TRAP(err, isProtected = file->IsProtectedL());
sl@0
 10426
	if (err != KErrNone)
sl@0
 10427
		{
sl@0
 10428
		iTestResult = EFail;
sl@0
 10429
		INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), KErrNone, err);
sl@0
 10430
		}
sl@0
 10431
	else if (isProtected)
sl@0
 10432
		{
sl@0
 10433
		iTestResult = EFail;
sl@0
 10434
		INFO_PRINTF1(_L("Failure, expected unprotected file"));
sl@0
 10435
		}
sl@0
 10436
sl@0
 10437
	sink->SinkStopL();
sl@0
 10438
sl@0
 10439
	// file closed, should leave KErrNotReady
sl@0
 10440
	TRAP(err, isProtected = file->IsProtectedL());
sl@0
 10441
	if (((iSinkType == ESinkTypeFile) && (err != KErrNotReady)) ||
sl@0
 10442
		((iSinkType == ESinkTypeFileHandle) && (err != KErrNone)))
sl@0
 10443
		{
sl@0
 10444
		iTestResult = EFail;
sl@0
 10445
		INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), iSinkType == ESinkTypeFile ? KErrNotReady : KErrNone, err);
sl@0
 10446
		}
sl@0
 10447
sl@0
 10448
	CleanupStack::PopAndDestroy(sink);
sl@0
 10449
sl@0
 10450
sl@0
 10451
	CleanupStack::PopAndDestroy(4, scheduler); // dummySink, dummySource, testFsSession, scheduler
sl@0
 10452
sl@0
 10453
	__MM_HEAP_MARKEND;
sl@0
 10454
	return iTestResult;
sl@0
 10455
	}
sl@0
 10456
sl@0
 10457
/**
sl@0
 10458
 *
sl@0
 10459
 * CTestStep_MMF_SRSSNK_U_0119 constructor
sl@0
 10460
 *
sl@0
 10461
 * @xxxx
sl@0
 10462
 *
sl@0
 10463
 */
sl@0
 10464
CTestStep_MMF_SRSSNK_U_0119::CTestStep_MMF_SRSSNK_U_0119()
sl@0
 10465
	{
sl@0
 10466
	iTestStepName = _L("MM-MMF-SRSSNK-U-0119");
sl@0
 10467
	}
sl@0
 10468
sl@0
 10469
/**
sl@0
 10470
 *
sl@0
 10471
 * CTestStep_MMF_SRSSNK_U_0119 destructor
sl@0
 10472
 *
sl@0
 10473
 * @xxxx
sl@0
 10474
 *
sl@0
 10475
 */
sl@0
 10476
CTestStep_MMF_SRSSNK_U_0119::~CTestStep_MMF_SRSSNK_U_0119()
sl@0
 10477
	{
sl@0
 10478
	}
sl@0
 10479
sl@0
 10480
/**
sl@0
 10481
 *
sl@0
 10482
 * CTestStep_MMF_SRSSNK_U_0119
sl@0
 10483
 *
sl@0
 10484
 * CMMFFile
sl@0
 10485
 * Test file access denied
sl@0
 10486
 *
sl@0
 10487
 * @xxxx
sl@0
 10488
 */
sl@0
 10489
TVerdict CTestStep_MMF_SRSSNK_U_0119::DoTestStepL()
sl@0
 10490
	{
sl@0
 10491
	__MM_HEAP_MARK;
sl@0
 10492
sl@0
 10493
	iTestResult = EPass;
sl@0
 10494
	// Initialise thread active scheduler.
sl@0
 10495
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 10496
	CleanupStack::PushL(scheduler);
sl@0
 10497
	CActiveScheduler::Install(scheduler);
sl@0
 10498
sl@0
 10499
	// Initialise config data.
sl@0
 10500
	TMMFFileConfig configDes;
sl@0
 10501
	configDes().iPath = KTest101FileName;
sl@0
 10502
sl@0
 10503
	// lock the file by opening it for writing for the duration of this test
sl@0
 10504
	RFs fs;
sl@0
 10505
	User::LeaveIfError(fs.Connect());
sl@0
 10506
	CleanupClosePushL(fs);
sl@0
 10507
sl@0
 10508
	RFile file;
sl@0
 10509
	User::LeaveIfError(file.Open(fs,KTest101FileName, EFileWrite));
sl@0
 10510
	CleanupClosePushL(file);
sl@0
 10511
sl@0
 10512
	// Create dummy source
sl@0
 10513
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
 10514
	CleanupStack::PushL(dummySource);
sl@0
 10515
sl@0
 10516
sl@0
 10517
	// Create dummy sink.
sl@0
 10518
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
 10519
	CleanupStack::PushL(dummySink);
sl@0
 10520
sl@0
 10521
sl@0
 10522
	// Create a source.
sl@0
 10523
	CMMFClip* source = static_cast<CMMFClip*>(MDataSource::NewSourceL(KUidMmfFileSource, configDes));
sl@0
 10524
	CleanupDeletePushL(source);
sl@0
 10525
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
 10526
	TRAPD(err, source->SourcePrimeL());
sl@0
 10527
	if (err != KErrInUse)
sl@0
 10528
		{
sl@0
 10529
		iTestResult = EFail;
sl@0
 10530
		INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), KErrInUse, err);
sl@0
 10531
		}
sl@0
 10532
sl@0
 10533
sl@0
 10534
	CleanupStack::PopAndDestroy(source);
sl@0
 10535
sl@0
 10536
	// Create a sink.
sl@0
 10537
	CMMFClip* sink = static_cast<CMMFClip*>(MDataSink::NewSinkL(KUidMmfFileSink, configDes));
sl@0
 10538
	CleanupDeletePushL(sink);
sl@0
 10539
	User::LeaveIfError(sink->SourceThreadLogon(*dummySource));
sl@0
 10540
sl@0
 10541
	TRAP(err, sink->SinkPrimeL());
sl@0
 10542
	if (err != KErrInUse)
sl@0
 10543
sl@0
 10544
		{
sl@0
 10545
		iTestResult = EFail;
sl@0
 10546
		INFO_PRINTF3(_L("Failure, expected error %d, received error %d"), KErrInUse, err);
sl@0
 10547
		}
sl@0
 10548
sl@0
 10549
sl@0
 10550
	CleanupStack::PopAndDestroy(sink);
sl@0
 10551
sl@0
 10552
sl@0
 10553
	CleanupStack::PopAndDestroy(5, scheduler); // dummySink, dummySource, file, fs, scheduler
sl@0
 10554
sl@0
 10555
	__MM_HEAP_MARKEND;
sl@0
 10556
	return iTestResult;
sl@0
 10557
	}
sl@0
 10558
sl@0
 10559
sl@0
 10560
sl@0
 10561
/**
sl@0
 10562
 *
sl@0
 10563
 * CTestStep_MMF_SRSSNK_U_0201 constructor
sl@0
 10564
 *
sl@0
 10565
 * @xxxx
sl@0
 10566
 *
sl@0
 10567
 */
sl@0
 10568
CTestStep_MMF_SRSSNK_U_0201::CTestStep_MMF_SRSSNK_U_0201()
sl@0
 10569
	{
sl@0
 10570
	// store the name of this test case
sl@0
 10571
	// this is the name that is used by the script file
sl@0
 10572
	// Each test step initialises it's own name
sl@0
 10573
	iTestStepName = _L("MM-MMF-SRSSNK-U-0201");
sl@0
 10574
	}
sl@0
 10575
sl@0
 10576
/**
sl@0
 10577
 *
sl@0
 10578
 * CTestStep_MMF_SRSSNK_U_0201 destructor
sl@0
 10579
 *
sl@0
 10580
 * @xxxx
sl@0
 10581
 *
sl@0
 10582
 */
sl@0
 10583
CTestStep_MMF_SRSSNK_U_0201::~CTestStep_MMF_SRSSNK_U_0201()
sl@0
 10584
	{
sl@0
 10585
	}
sl@0
 10586
sl@0
 10587
/**
sl@0
 10588
 *
sl@0
 10589
 * CTestStep_MMF_SRSSNK_U_0201
sl@0
 10590
 *
sl@0
 10591
 * Test creation/destruction of descriptor source.
sl@0
 10592
 *
sl@0
 10593
 * @xxxx
sl@0
 10594
 */
sl@0
 10595
TVerdict CTestStep_MMF_SRSSNK_U_0201::DoTestStepL()
sl@0
 10596
	{
sl@0
 10597
	__MM_HEAP_MARK;
sl@0
 10598
sl@0
 10599
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 10600
	CleanupStack::PushL(scheduler);
sl@0
 10601
	CActiveScheduler::Install(scheduler);
sl@0
 10602
sl@0
 10603
	// Test construction/destruction.
sl@0
 10604
	TBuf8<1> configDes;
sl@0
 10605
	TNewSourceTestStep testStep(KUidMmfAudioInput, configDes);
sl@0
 10606
	DoTest(testStep, _L("Construct audio source"), KErrNone);
sl@0
 10607
sl@0
 10608
	// Create dummy sink.
sl@0
 10609
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
 10610
	CleanupStack::PushL(dummySink);
sl@0
 10611
sl@0
 10612
	// Create an audio source.
sl@0
 10613
	MDataSource* source = MDataSource::NewSourceL(KUidMmfAudioInput, configDes);
sl@0
 10614
	CleanupDeletePushL(source);
sl@0
 10615
sl@0
 10616
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
 10617
	source->SourcePrimeL();
sl@0
 10618
sl@0
 10619
	// Test that the source is initialised correctly.
sl@0
 10620
	TSourceTypeTestStep testStep2(source, KUidMmfAudioInput, KMMFFourCCCodePCM16, ETrue);
sl@0
 10621
	DoTest(testStep2, _L("Audio source type"), KErrNone);
sl@0
 10622
sl@0
 10623
	TCanCreateSourceBufferTestStep testStep3(source, ETrue);
sl@0
 10624
	DoTest(testStep3, _L("Audio Can create source buffer"), KErrNone);
sl@0
 10625
sl@0
 10626
	TSourceSampleConvertTestStep testStep4(source, EFalse);
sl@0
 10627
	DoTest(testStep4, _L("Audio source sample convert"), KErrNone);
sl@0
 10628
sl@0
 10629
	// Test that the audio source is initialised correctly.
sl@0
 10630
	CMMFAudioInput* sourceAudioInput = STATIC_CAST(CMMFAudioInput*, source);
sl@0
 10631
sl@0
 10632
	// XXX These fns. go bang after construction. This is not good.
sl@0
 10633
	// They are ok, provided we have logged on and called SourcePrimeL().
sl@0
 10634
	#ifndef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
sl@0
 10635
	if (sourceAudioInput->SoundDevice().Volume() != 0)
sl@0
 10636
	#else
sl@0
 10637
	if (sourceAudioInput->SoundDevice().Volume() != (sourceAudioInput->SoundDevice().MaxVolume() + 1) / 2)
sl@0
 10638
	#endif
sl@0
 10639
		{
sl@0
 10640
		#ifndef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
sl@0
 10641
		INFO_PRINTF1(_L("Audio Input: Device volume != 0\n"));
sl@0
 10642
		#else
sl@0
 10643
		INFO_PRINTF2(_L("Audio Input: Device volume != %d\n"), (sourceAudioInput->SoundDevice().MaxVolume() + 1) / 2);
sl@0
 10644
		#endif
sl@0
 10645
		iTestResult = EFail;
sl@0
 10646
		}
sl@0
 10647
sl@0
 10648
	if (sourceAudioInput->BytesPlayed() != 0)
sl@0
 10649
		{
sl@0
 10650
		INFO_PRINTF1(_L("Audio Input: Bytes played != 0\n"));
sl@0
 10651
		iTestResult = EFail;
sl@0
 10652
		}
sl@0
 10653
sl@0
 10654
	CleanupStack::PopAndDestroy(source);
sl@0
 10655
sl@0
 10656
	CleanupStack::PopAndDestroy(dummySink);
sl@0
 10657
	CleanupStack::PopAndDestroy(scheduler);
sl@0
 10658
sl@0
 10659
	__MM_HEAP_MARKEND;
sl@0
 10660
	return iTestResult;
sl@0
 10661
	}
sl@0
 10662
sl@0
 10663
sl@0
 10664
sl@0
 10665
/**
sl@0
 10666
 *
sl@0
 10667
 * CTestStep_MMF_SRSSNK_U_0202 constructor
sl@0
 10668
 *
sl@0
 10669
 * @xxxx
sl@0
 10670
 *
sl@0
 10671
 */
sl@0
 10672
CTestStep_MMF_SRSSNK_U_0202::CTestStep_MMF_SRSSNK_U_0202()
sl@0
 10673
	{
sl@0
 10674
	// store the name of this test case
sl@0
 10675
	// this is the name that is used by the script file
sl@0
 10676
	// Each test step initialises it's own name
sl@0
 10677
	iTestStepName = _L("MM-MMF-SRSSNK-U-0202");
sl@0
 10678
	}
sl@0
 10679
sl@0
 10680
/**
sl@0
 10681
 *
sl@0
 10682
 * CTestStep_MMF_SRSSNK_U_0202 destructor
sl@0
 10683
 *
sl@0
 10684
 * @xxxx
sl@0
 10685
 *
sl@0
 10686
 */
sl@0
 10687
CTestStep_MMF_SRSSNK_U_0202::~CTestStep_MMF_SRSSNK_U_0202()
sl@0
 10688
	{
sl@0
 10689
	}
sl@0
 10690
sl@0
 10691
/**
sl@0
 10692
 *
sl@0
 10693
 * CTestStep_MMF_SRSSNK_U_0202
sl@0
 10694
 *
sl@0
 10695
 * Test creation/destruction of audio sink.
sl@0
 10696
 *
sl@0
 10697
 * @xxxx
sl@0
 10698
 */
sl@0
 10699
TVerdict CTestStep_MMF_SRSSNK_U_0202::DoTestStepL()
sl@0
 10700
	{
sl@0
 10701
	__MM_HEAP_MARK;
sl@0
 10702
sl@0
 10703
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 10704
	CleanupStack::PushL(scheduler);
sl@0
 10705
	CActiveScheduler::Install(scheduler);
sl@0
 10706
sl@0
 10707
	// Test construction/destruction.
sl@0
 10708
	TBuf8<1> configDes;
sl@0
 10709
	TNewSinkTestStep testStep(KUidMmfAudioOutput, configDes);
sl@0
 10710
	DoTest(testStep, _L("Construct audio sink"), KErrNone);
sl@0
 10711
sl@0
 10712
	// Create a dummy source.
sl@0
 10713
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
 10714
	CleanupStack::PushL(dummySource);
sl@0
 10715
sl@0
 10716
	// Create an audio sink.
sl@0
 10717
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, configDes);
sl@0
 10718
	CleanupDeletePushL(sink);
sl@0
 10719
sl@0
 10720
	User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
 10721
	sink->SinkPrimeL();
sl@0
 10722
sl@0
 10723
	// Test that the sink is initialised correctly.
sl@0
 10724
	TSinkTypeTestStep testStep2(sink, KUidMmfAudioOutput, KMMFFourCCCodePCM16, ETrue);
sl@0
 10725
	DoTest(testStep2, _L("Audio sink type"), KErrNone);
sl@0
 10726
sl@0
 10727
	TCanCreateSinkBufferTestStep testStep3(sink, ETrue);
sl@0
 10728
	DoTest(testStep3, _L("Audio Can create sink buffer"), KErrNone);
sl@0
 10729
sl@0
 10730
	// Test that the audio sink is initialised correctly.
sl@0
 10731
	CMMFAudioOutput* sinkAudioOutput = STATIC_CAST(CMMFAudioOutput*, sink);
sl@0
 10732
	if (sinkAudioOutput->BytesPlayed() != 0)
sl@0
 10733
		{
sl@0
 10734
		INFO_PRINTF1(_L("Audio Input: Bytes played != 0\n"));
sl@0
 10735
		iTestResult = EFail;
sl@0
 10736
		}
sl@0
 10737
sl@0
 10738
	CleanupStack::PopAndDestroy(sink);
sl@0
 10739
sl@0
 10740
	CleanupStack::PopAndDestroy(dummySource);
sl@0
 10741
	CleanupStack::PopAndDestroy(scheduler);
sl@0
 10742
sl@0
 10743
	__MM_HEAP_MARKEND;
sl@0
 10744
	return iTestResult;
sl@0
 10745
	}
sl@0
 10746
sl@0
 10747
sl@0
 10748
/**
sl@0
 10749
 *
sl@0
 10750
 * CTestStep_MMF_SRSSNK_U_0203 constructor
sl@0
 10751
 *
sl@0
 10752
 * @xxxx
sl@0
 10753
 *
sl@0
 10754
 */
sl@0
 10755
CTestStep_MMF_SRSSNK_U_0203::CTestStep_MMF_SRSSNK_U_0203()
sl@0
 10756
	{
sl@0
 10757
	// store the name of this test case
sl@0
 10758
	// this is the name that is used by the script file
sl@0
 10759
	// Each test step initialises it's own name
sl@0
 10760
	iTestStepName = _L("MM-MMF-SRSSNK-U-0203");
sl@0
 10761
	}
sl@0
 10762
sl@0
 10763
/**
sl@0
 10764
 *
sl@0
 10765
 * CTestStep_MMF_SRSSNK_U_0203 destructor
sl@0
 10766
 *
sl@0
 10767
 * @xxxx
sl@0
 10768
 *
sl@0
 10769
 */
sl@0
 10770
CTestStep_MMF_SRSSNK_U_0203::~CTestStep_MMF_SRSSNK_U_0203()
sl@0
 10771
	{
sl@0
 10772
	}
sl@0
 10773
sl@0
 10774
/**
sl@0
 10775
 *
sl@0
 10776
 * CTestStep_MMF_SRSSNK_U_0203
sl@0
 10777
 *
sl@0
 10778
 * Test audio source misc. fns.
sl@0
 10779
 *
sl@0
 10780
 * @xxxx
sl@0
 10781
 */
sl@0
 10782
TVerdict CTestStep_MMF_SRSSNK_U_0203::DoTestStepL()
sl@0
 10783
	{
sl@0
 10784
	__MM_HEAP_MARK;
sl@0
 10785
sl@0
 10786
	const TInt KDevSoundMaxFrameSize = 0x4000;  //16K from SoundDeviceBody.h
sl@0
 10787
sl@0
 10788
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 10789
	CleanupStack::PushL(scheduler);
sl@0
 10790
	CActiveScheduler::Install(scheduler);
sl@0
 10791
sl@0
 10792
	// Create a dummy sink.
sl@0
 10793
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
 10794
	CleanupStack::PushL(dummySink);
sl@0
 10795
sl@0
 10796
	// Create an audio source.
sl@0
 10797
	TBuf8<1> configDes;
sl@0
 10798
	MDataSource* source = MDataSource::NewSourceL(KUidMmfAudioInput, configDes);
sl@0
 10799
	CleanupDeletePushL(source);
sl@0
 10800
sl@0
 10801
	// Test create source buffer.
sl@0
 10802
	TCreateSourceBuffer1TestStep testStep(ESourceTypeAudio, dummySink, KUidMmfPtrBuffer, ETrue, KDevSoundMaxFrameSize);
sl@0
 10803
sl@0
 10804
	DoTest(testStep, _L("Audio source CreateSourceBuffer1"), KErrNone);
sl@0
 10805
sl@0
 10806
sl@0
 10807
sl@0
 10808
	TCreateSourceBuffer2TestStep testStep2(ESourceTypeAudio, dummySink, NULL, KUidMmfPtrBuffer, ETrue, KDevSoundMaxFrameSize);
sl@0
 10809
sl@0
 10810
sl@0
 10811
sl@0
 10812
	DoTest(testStep2, _L("Audio source CreateSourceBuffer2"), KErrNone);
sl@0
 10813
sl@0
 10814
	CMMFAudioInput* sourceAudioInput = STATIC_CAST(CMMFAudioInput*, source);
sl@0
 10815
	TAudioInputCreateSourceBuffer1TestStep testStep3(sourceAudioInput);
sl@0
 10816
	DoTest(testStep3, _L("Audio source CreateSourceBuffer3"), KErrNone);
sl@0
 10817
sl@0
 10818
	TAudioInputCreateSourceBuffer2TestStep testStep4(sourceAudioInput, NULL);
sl@0
 10819
	DoTest(testStep4, _L("Audio source CreateSourceBuffer4"), KErrNone);
sl@0
 10820
sl@0
 10821
	// Test the rest...
sl@0
 10822
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
 10823
sl@0
 10824
	TFourCC fourCC = KMMFFourCCCodePCM16;
sl@0
 10825
	TFourCC emptyFourCC;
sl@0
 10826
sl@0
 10827
	TBufC8<5> fourCCString(KEmptyFourCCCode);
sl@0
 10828
	TPtr8 fourCCPtr = fourCCString.Des();
sl@0
 10829
	TPtr8 fourCCPtr1(&fourCCPtr[0], 4);
sl@0
 10830
	emptyFourCC.FourCC(&fourCCPtr1);
sl@0
 10831
	source->NegotiateSourceL(*dummySink);
sl@0
 10832
sl@0
 10833
	TMediaId mediaId;
sl@0
 10834
	if ((source->SourceDataTypeCode(mediaId) != fourCC) && (source->SourceDataTypeCode(mediaId) != emptyFourCC))
sl@0
 10835
		{
sl@0
 10836
		INFO_PRINTF1(_L("Audio Input: NegotiateL source code does not match\n"));
sl@0
 10837
		iTestResult = EFail;
sl@0
 10838
		}
sl@0
 10839
sl@0
 10840
	source->SourcePrimeL();
sl@0
 10841
	source->SourcePlayL();
sl@0
 10842
	source->SourcePauseL();
sl@0
 10843
	source->SourceStopL();
sl@0
 10844
sl@0
 10845
	TMMFPrioritySettings prioritySettings;
sl@0
 10846
	source->SetSourcePrioritySettings(prioritySettings);
sl@0
 10847
sl@0
 10848
	source->SourceThreadLogoff();
sl@0
 10849
sl@0
 10850
	CleanupStack::PopAndDestroy(source);
sl@0
 10851
sl@0
 10852
	CleanupStack::PopAndDestroy(dummySink);
sl@0
 10853
	CleanupStack::PopAndDestroy(scheduler);
sl@0
 10854
sl@0
 10855
	__MM_HEAP_MARKEND;
sl@0
 10856
	return iTestResult;
sl@0
 10857
	}
sl@0
 10858
sl@0
 10859
/**
sl@0
 10860
 *
sl@0
 10861
 * CTestStep_MMF_SRSSNK_U_0204 constructor
sl@0
 10862
 *
sl@0
 10863
 * @xxxx
sl@0
 10864
 *
sl@0
 10865
 */
sl@0
 10866
CTestStep_MMF_SRSSNK_U_0204::CTestStep_MMF_SRSSNK_U_0204()
sl@0
 10867
	{
sl@0
 10868
	// store the name of this test case
sl@0
 10869
	// this is the name that is used by the script file
sl@0
 10870
	// Each test step initialises it's own name
sl@0
 10871
	iTestStepName = _L("MM-MMF-SRSSNK-U-0204");
sl@0
 10872
	}
sl@0
 10873
sl@0
 10874
/**
sl@0
 10875
 *
sl@0
 10876
 * CTestStep_MMF_SRSSNK_U_0204 destructor
sl@0
 10877
 *
sl@0
 10878
 * @xxxx
sl@0
 10879
 *
sl@0
 10880
 */
sl@0
 10881
CTestStep_MMF_SRSSNK_U_0204::~CTestStep_MMF_SRSSNK_U_0204()
sl@0
 10882
	{
sl@0
 10883
	}
sl@0
 10884
sl@0
 10885
/**
sl@0
 10886
 *
sl@0
 10887
 * CTestStep_MMF_SRSSNK_U_0204
sl@0
 10888
 *
sl@0
 10889
 * Functional test of audio input
sl@0
 10890
 * FillBuifferL test.
sl@0
 10891
 *
sl@0
 10892
 * @xxxx
sl@0
 10893
 */
sl@0
 10894
TVerdict CTestStep_MMF_SRSSNK_U_0204::DoTestStepL()
sl@0
 10895
	{
sl@0
 10896
	__MM_HEAP_MARK;
sl@0
 10897
sl@0
 10898
	// Initialise thread active scheduler.
sl@0
 10899
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 10900
	CleanupStack::PushL(scheduler);
sl@0
 10901
	CActiveScheduler::Install(scheduler);
sl@0
 10902
sl@0
 10903
	// Create valid buffer.
sl@0
 10904
	// NB: a valid buffer will be created by DevSound through asynchronous buffer creation.
sl@0
 10905
	CMMFDescriptorBuffer* validBuffer = NULL;
sl@0
 10906
sl@0
 10907
	// Create a dummy sink.
sl@0
 10908
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
 10909
	CleanupStack::PushL(dummySink);
sl@0
 10910
sl@0
 10911
	// Create an audio source.
sl@0
 10912
	TBuf8<1> configDes;
sl@0
 10913
	MDataSource* source = MDataSource::NewSourceL(KUidMmfAudioInput, configDes);
sl@0
 10914
	CleanupDeletePushL(source);
sl@0
 10915
sl@0
 10916
	// Test fill source buffer.
sl@0
 10917
	User::LeaveIfError(source->SourceThreadLogon(*dummySink));
sl@0
 10918
	source->NegotiateSourceL(*dummySink);
sl@0
 10919
	source->SourcePrimeL();
sl@0
 10920
sl@0
 10921
	// Create a test (invalid) buffer.
sl@0
 10922
	CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer;
sl@0
 10923
	CleanupStack::PushL(testBuffer);
sl@0
 10924
sl@0
 10925
	// Invalid fill buffer.
sl@0
 10926
	TAudioInputFillBufferTestStep testStep(source, testBuffer, dummySink);
sl@0
 10927
	DoTest(testStep, _L("Audio Input: FillBufferL"), KErrNotSupported);
sl@0
 10928
	CleanupStack::PopAndDestroy(testBuffer);
sl@0
 10929
sl@0
 10930
sl@0
 10931
	// If we have buffer cycling switched on the DevSound, allocs will occur as
sl@0
 10932
	// the buffers are switched over. This will cause the __MM_HEAP_MARKENDC() macro to fail.
sl@0
 10933
	TUint expectedAllocs=0;
sl@0
 10934
sl@0
 10935
	// Valid fill buffer.
sl@0
 10936
	TAudioInputFillBufferTestStep testStep2(source, validBuffer, dummySink);
sl@0
 10937
	DoTest(testStep2, _L("Audio Input: FillBufferL"), KErrNone,expectedAllocs);
sl@0
 10938
sl@0
 10939
	// Valid fill buffer. (Make multiple requests)
sl@0
 10940
	TAudioInputFillBuffer2TestStep testStep3(source, validBuffer, dummySink);
sl@0
 10941
	DoTest(testStep3, _L("Audio Input: FillBufferL"), KErrNone,expectedAllocs);
sl@0
 10942
sl@0
 10943
	// XXX Valid fill buffer. (Make multiple requests at once)
sl@0
 10944
	// removed below lines because the audio input currently doesn't support multiple requests.
sl@0
 10945
	// TAudioInputFillBuffer3TestStep testStep4(source, validBuffer, dummySink);
sl@0
 10946
	// DoTest(testStep4, _L("Audio Input: FillBufferL"), KErrNone);
sl@0
 10947
sl@0
 10948
	CleanupStack::PopAndDestroy(source);
sl@0
 10949
sl@0
 10950
	// Repeat tests, creating a source each time.
sl@0
 10951
	// Valid fill buffer.
sl@0
 10952
	TAudioInputFillBuffer4TestStep testStep5(validBuffer, dummySink);
sl@0
 10953
	DoTest(testStep5, _L("Audio Input: FillBufferL"), KErrNone);
sl@0
 10954
sl@0
 10955
	// Valid fill buffer. (Make multiple requests)
sl@0
 10956
	TAudioInputFillBuffer5TestStep testStep6(validBuffer, dummySink);
sl@0
 10957
	DoTest(testStep6, _L("Audio Input: FillBufferL"), KErrNone);
sl@0
 10958
sl@0
 10959
	// xxx Valid fill buffer. (Make multiple requests at once)
sl@0
 10960
	// removed below lines because the audio input currently doesn't support multiple requests.
sl@0
 10961
	// TAudioInputFillBuffer6TestStep testStep7(validBuffer, dummySink);
sl@0
 10962
	// DoTest(testStep7, _L("Audio Input: FillBufferL"), KErrNone);
sl@0
 10963
sl@0
 10964
	// Valid fill buffer + pause + fill (should pass, we can now pause AudioInput and still request data already captured)
sl@0
 10965
	TAudioInputFillBuffer7TestStep testStep8(validBuffer, dummySink);
sl@0
 10966
	DoTest(testStep8, _L("Audio Input: FillBufferL"), KErrNone);
sl@0
 10967
sl@0
 10968
	// Valid fill buffer + stop + fill (should fail)
sl@0
 10969
	TAudioInputFillBuffer8TestStep testStep9(validBuffer, dummySink);
sl@0
 10970
	DoTest(testStep9, _L("Audio Input: FillBufferL"), KErrNotReady);
sl@0
 10971
sl@0
 10972
	CleanupStack::PopAndDestroy(2, scheduler); // dummySink, scheduler
sl@0
 10973
sl@0
 10974
	__MM_HEAP_MARKEND;
sl@0
 10975
	return iTestResult;
sl@0
 10976
	}
sl@0
 10977
sl@0
 10978
/**
sl@0
 10979
 *
sl@0
 10980
 * CTestStep_MMF_SRSSNK_U_0205 constructor
sl@0
 10981
 *
sl@0
 10982
 * @xxxx
sl@0
 10983
 *
sl@0
 10984
 */
sl@0
 10985
CTestStep_MMF_SRSSNK_U_0205::CTestStep_MMF_SRSSNK_U_0205()
sl@0
 10986
	{
sl@0
 10987
	// store the name of this test case
sl@0
 10988
	// this is the name that is used by the script file
sl@0
 10989
	// Each test step initialises it's own name
sl@0
 10990
	iTestStepName = _L("MM-MMF-SRSSNK-U-0205");
sl@0
 10991
	}
sl@0
 10992
sl@0
 10993
/**
sl@0
 10994
 *
sl@0
 10995
 * CTestStep_MMF_SRSSNK_U_0205 destructor
sl@0
 10996
 *
sl@0
 10997
 * @xxxx
sl@0
 10998
 *
sl@0
 10999
 */
sl@0
 11000
CTestStep_MMF_SRSSNK_U_0205::~CTestStep_MMF_SRSSNK_U_0205()
sl@0
 11001
	{
sl@0
 11002
	}
sl@0
 11003
sl@0
 11004
/**
sl@0
 11005
 *
sl@0
 11006
 * CTestStep_MMF_SRSSNK_U_0205
sl@0
 11007
 *
sl@0
 11008
 * Functional test of audio input source.
sl@0
 11009
 * BufferEmptiedL() test.
sl@0
 11010
 *
sl@0
 11011
 * @xxxx
sl@0
 11012
 */
sl@0
 11013
TVerdict CTestStep_MMF_SRSSNK_U_0205::DoTestStepL()
sl@0
 11014
	{
sl@0
 11015
	__MM_HEAP_MARK;
sl@0
 11016
sl@0
 11017
	iTestResult = EFail;
sl@0
 11018
sl@0
 11019
	// Create valid buffer.
sl@0
 11020
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
 11021
	CleanupStack::PushL(validBuffer);
sl@0
 11022
sl@0
 11023
	// Create source file.
sl@0
 11024
	TBuf8<1> configDes;
sl@0
 11025
	MDataSource* source = MDataSource::NewSourceL(KUidMmfAudioInput, configDes);
sl@0
 11026
	CleanupDeletePushL(source);
sl@0
 11027
sl@0
 11028
	// Test BufferEmptiedL
sl@0
 11029
	TRAPD(err, source->BufferEmptiedL(validBuffer));
sl@0
 11030
	if (err == KErrNone)
sl@0
 11031
		{
sl@0
 11032
		iTestResult = EPass;
sl@0
 11033
		}
sl@0
 11034
sl@0
 11035
	CleanupStack::PopAndDestroy(2, validBuffer); // source, validBuffer
sl@0
 11036
sl@0
 11037
	__MM_HEAP_MARKEND;
sl@0
 11038
	return iTestResult;
sl@0
 11039
	}
sl@0
 11040
sl@0
 11041
/**
sl@0
 11042
 *
sl@0
 11043
 * CTestStep_MMF_SRSSNK_U_0206 constructor
sl@0
 11044
 *
sl@0
 11045
 * @xxxx
sl@0
 11046
 *
sl@0
 11047
 */
sl@0
 11048
CTestStep_MMF_SRSSNK_U_0206::CTestStep_MMF_SRSSNK_U_0206()
sl@0
 11049
	{
sl@0
 11050
	// store the name of this test case
sl@0
 11051
	// this is the name that is used by the script file
sl@0
 11052
	// Each test step initialises it's own name
sl@0
 11053
	iTestStepName = _L("MM-MMF-SRSSNK-U-0206");
sl@0
 11054
	}
sl@0
 11055
sl@0
 11056
/**
sl@0
 11057
 *
sl@0
 11058
 * CTestStep_MMF_SRSSNK_U_0206 destructor
sl@0
 11059
 *
sl@0
 11060
 * @xxxx
sl@0
 11061
 *
sl@0
 11062
 */
sl@0
 11063
CTestStep_MMF_SRSSNK_U_0206::~CTestStep_MMF_SRSSNK_U_0206()
sl@0
 11064
	{
sl@0
 11065
	}
sl@0
 11066
sl@0
 11067
/**
sl@0
 11068
 *
sl@0
 11069
 * CTestStep_MMF_SRSSNK_U_0206
sl@0
 11070
 *
sl@0
 11071
 * Functional test of audio input source.
sl@0
 11072
 * Source custom commands test.
sl@0
 11073
 *
sl@0
 11074
 * @xxxx
sl@0
 11075
 */
sl@0
 11076
TVerdict CTestStep_MMF_SRSSNK_U_0206::DoTestStepL()
sl@0
 11077
	{
sl@0
 11078
	__MM_HEAP_MARK;
sl@0
 11079
sl@0
 11080
	iTestResult = EFail;
sl@0
 11081
	TUid testControllerUid = { KMmfTestControllerUid };
sl@0
 11082
	RMMFController dummyController;
sl@0
 11083
	TMMFPrioritySettings prioritySettings;
sl@0
 11084
	TMMFMessageDestinationPckg destination;
sl@0
 11085
	User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings));
sl@0
 11086
	CleanupClosePushL(dummyController);
sl@0
 11087
sl@0
 11088
	TBuf8<1> dummyArgs;
sl@0
 11089
	User::LeaveIfError(dummyController.AddDataSource(KUidMmfAudioInput, dummyArgs));
sl@0
 11090
	TInt err = dummyController.CustomCommandSync(destination, KDescriptorSource, dummyArgs, dummyArgs);
sl@0
 11091
	if (err == KErrNotSupported)
sl@0
 11092
		{
sl@0
 11093
		iTestResult = EPass;
sl@0
 11094
		}
sl@0
 11095
	else
sl@0
 11096
		{
sl@0
 11097
		INFO_PRINTF2(_L("File source SourceCustomCommand: Expecting KErrNotSupported, actually got %d"), err);
sl@0
 11098
		}
sl@0
 11099
sl@0
 11100
	CleanupStack::PopAndDestroy(); // dummyController
sl@0
 11101
sl@0
 11102
	__MM_HEAP_MARKEND;
sl@0
 11103
	return iTestResult;
sl@0
 11104
	}
sl@0
 11105
sl@0
 11106
/**
sl@0
 11107
 *
sl@0
 11108
 * CTestStep_MMF_SRSSNK_U_0207 constructor
sl@0
 11109
 *
sl@0
 11110
 * @xxxx
sl@0
 11111
 *
sl@0
 11112
 */
sl@0
 11113
CTestStep_MMF_SRSSNK_U_0207::CTestStep_MMF_SRSSNK_U_0207()
sl@0
 11114
	{
sl@0
 11115
	// store the name of this test case
sl@0
 11116
	// this is the name that is used by the script file
sl@0
 11117
	// Each test step initialises it's own name
sl@0
 11118
	iTestStepName = _L("MM-MMF-SRSSNK-U-0207");
sl@0
 11119
	}
sl@0
 11120
sl@0
 11121
/**
sl@0
 11122
 *
sl@0
 11123
 * CTestStep_MMF_SRSSNK_U_0207 destructor
sl@0
 11124
 *
sl@0
 11125
 * @xxxx
sl@0
 11126
 *
sl@0
 11127
 */
sl@0
 11128
CTestStep_MMF_SRSSNK_U_0207::~CTestStep_MMF_SRSSNK_U_0207()
sl@0
 11129
	{
sl@0
 11130
	}
sl@0
 11131
sl@0
 11132
/**
sl@0
 11133
 *
sl@0
 11134
 * CTestStep_MMF_SRSSNK_U_0207
sl@0
 11135
 *
sl@0
 11136
 * Functional test of audio input source.
sl@0
 11137
 * Misc. fns. test.
sl@0
 11138
 *
sl@0
 11139
 * @xxxx
sl@0
 11140
 */
sl@0
 11141
TVerdict CTestStep_MMF_SRSSNK_U_0207::DoTestStepL()
sl@0
 11142
	{
sl@0
 11143
	__MM_HEAP_MARK;
sl@0
 11144
sl@0
 11145
	// Initialise thread active scheduler.
sl@0
 11146
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 11147
	CleanupStack::PushL(scheduler);
sl@0
 11148
	CActiveScheduler::Install(scheduler);
sl@0
 11149
sl@0
 11150
	// Create a dummy sink.
sl@0
 11151
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
 11152
	CleanupStack::PushL(dummySink);
sl@0
 11153
sl@0
 11154
	// Create source file.
sl@0
 11155
	TBuf8<1> configDes;
sl@0
 11156
	iSource = STATIC_CAST(CMMFAudioInput*, MDataSource::NewSourceL(KUidMmfAudioInput, configDes));
sl@0
 11157
	CleanupStack::PushL(iSource);
sl@0
 11158
sl@0
 11159
	User::LeaveIfError(iSource->SourceThreadLogon(*dummySink));
sl@0
 11160
	iSource->SourcePrimeL();
sl@0
 11161
sl@0
 11162
	iSource->SoundDevice().InitializeL(*this, EMMFStatePlaying);
sl@0
 11163
	CActiveScheduler::Start();	// wait for InitializeComplete callback
sl@0
 11164
sl@0
 11165
	//post InitializeComplete callback
sl@0
 11166
	
sl@0
 11167
	if(iError!=KErrNone)
sl@0
 11168
		 iTestResult=EFail;
sl@0
 11169
	
sl@0
 11170
sl@0
 11171
	CleanupStack::PopAndDestroy(3,scheduler); // dummySink, iSource, scheduler
sl@0
 11172
sl@0
 11173
	__MM_HEAP_MARKEND;
sl@0
 11174
	return iTestResult;
sl@0
 11175
		}
sl@0
 11176
sl@0
 11177
void CTestStep_MMF_SRSSNK_U_0207::InitializeComplete(TInt aError)
sl@0
 11178
	{
sl@0
 11179
	CActiveScheduler::Stop();
sl@0
 11180
	iError=aError;
sl@0
 11181
	if(iError==KErrNone)
sl@0
 11182
		{
sl@0
 11183
	 	TRAP(iError,iSource->SoundDevice().PlayInitL());
sl@0
 11184
		}
sl@0
 11185
sl@0
 11186
	}
sl@0
 11187
sl@0
 11188
/**
sl@0
 11189
 *
sl@0
 11190
 * CTestStep_MMF_SRSSNK_U_0208 constructor
sl@0
 11191
 *
sl@0
 11192
 * @xxxx
sl@0
 11193
 *
sl@0
 11194
 */
sl@0
 11195
CTestStep_MMF_SRSSNK_U_0208::CTestStep_MMF_SRSSNK_U_0208()
sl@0
 11196
	{
sl@0
 11197
	// store the name of this test case
sl@0
 11198
	// this is the name that is used by the script file
sl@0
 11199
	// Each test step initialises it's own name
sl@0
 11200
	iTestStepName = _L("MM-MMF-SRSSNK-U-0208");
sl@0
 11201
	}
sl@0
 11202
sl@0
 11203
/**
sl@0
 11204
 *
sl@0
 11205
 * CTestStep_MMF_SRSSNK_U_0208 destructor
sl@0
 11206
 *
sl@0
 11207
 * @xxxx
sl@0
 11208
 *
sl@0
 11209
 */
sl@0
 11210
CTestStep_MMF_SRSSNK_U_0208::~CTestStep_MMF_SRSSNK_U_0208()
sl@0
 11211
	{
sl@0
 11212
	}
sl@0
 11213
sl@0
 11214
/**
sl@0
 11215
 *
sl@0
 11216
 * CTestStep_MMF_SRSSNK_U_0208
sl@0
 11217
 *
sl@0
 11218
 * Functional test of audio output.
sl@0
 11219
 * Misc. fns. test.
sl@0
 11220
 *
sl@0
 11221
 * @xxxx
sl@0
 11222
 */
sl@0
 11223
_LIT(KTest208FileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile1.wav");
sl@0
 11224
_LIT(KTest208SWFileName, "c:\\mm\\mmf\\testfiles\\srssnk\\MMFTestFile2.wav");
sl@0
 11225
// DevSound now calculates it's own buffer size depending on the Sample Rate,
sl@0
 11226
// bytes per channel & channels etc :
sl@0
 11227
const TUint KBytesPerSample8 = 2;
sl@0
 11228
const TUint KChannels8 = 1;
sl@0
 11229
const TUint KDevSoundDeltaFrameSize = 0x800; //2K
sl@0
 11230
const TUint KAudioOutputDefaultFrameSize22K =
sl@0
 11231
	(((22*1024*KBytesPerSample8*KChannels8)/4)+ (KDevSoundDeltaFrameSize-1)) &~ (KDevSoundDeltaFrameSize-1);
sl@0
 11232
TVerdict CTestStep_MMF_SRSSNK_U_0208::DoTestStepL()
sl@0
 11233
	{
sl@0
 11234
	__MM_HEAP_MARK;
sl@0
 11235
sl@0
 11236
	// Initialise thread active scheduler.
sl@0
 11237
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 11238
	CleanupStack::PushL(scheduler);
sl@0
 11239
	CActiveScheduler::Install(scheduler);
sl@0
 11240
sl@0
 11241
	// Create a dummy source.
sl@0
 11242
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
 11243
	CleanupStack::PushL(dummySource);
sl@0
 11244
sl@0
 11245
	// Create an audio sink.
sl@0
 11246
// Test 1
sl@0
 11247
	// Test create sink buffer.
sl@0
 11248
	TCreateSinkBufferTestStep1 testStep(KUidMmfPtrBuffer, ETrue, NULL, KAudioOutputDefaultFrameSize22K, dummySource);
sl@0
 11249
sl@0
 11250
sl@0
 11251
	DoTest(testStep, _L("Audio sink CreateSinkBuffer"), KErrNotSupported);
sl@0
 11252
sl@0
 11253
// Test 2
sl@0
 11254
	TCreateSinkBufferTestStep2 testStep2(KUidMmfPtrBuffer, ETrue, NULL, KAudioOutputDefaultFrameSize22K);
sl@0
 11255
sl@0
 11256
	//DoTest(testStep2, _L("Audio sink CreateSinkBuffer"), KErrArgument);
sl@0
 11257
	//DevSound WP  if we prime before the logon then the error should be KErrNotReady
sl@0
 11258
	DoTest(testStep2, _L("Audio sink CreateSinkBuffer"), KErrNotReady);
sl@0
 11259
sl@0
 11260
// Test 3
sl@0
 11261
	// Create a new sink.
sl@0
 11262
	// This time configured correctly.
sl@0
 11263
	// Create a real source.
sl@0
 11264
	// Initialise config data.
sl@0
 11265
	TMMFFileConfig configDes;
sl@0
 11266
	configDes().iPath = KTest208FileName;
sl@0
 11267
	MDataSource* realSource = MDataSource::NewSourceL(KUidMmfFileSource, configDes);
sl@0
 11268
	CleanupDeletePushL(realSource);
sl@0
 11269
sl@0
 11270
	TUid KWavReadUid = { KMmfUidFormatWAVRead };
sl@0
 11271
	CMMFFormatDecode* realFormat = CMMFFormatDecode::NewL(KWavReadUid, realSource);
sl@0
 11272
	CleanupStack::PushL(realFormat);
sl@0
 11273
	TCreateSinkBufferTestStep3 testStep3(KUidMmfPtrBuffer, ETrue, realFormat, KAudioOutputDefaultFrameSize22K, dummySource);
sl@0
 11274
sl@0
 11275
	DoTest(testStep3, _L("Audio sink CreateSinkBuffer"), KErrNone);
sl@0
 11276
sl@0
 11277
	CleanupStack::PopAndDestroy(2, realSource); // realFormat, realSource
sl@0
 11278
sl@0
 11279
// Test 4
sl@0
 11280
	// Create a new sink.
sl@0
 11281
	// This time configured correctly for software conversion.
sl@0
 11282
	// Create a real source.
sl@0
 11283
	// Initialise config data.
sl@0
 11284
	configDes().iPath = KTest208SWFileName;
sl@0
 11285
	realSource = MDataSource::NewSourceL(KUidMmfFileSource, configDes);
sl@0
 11286
	CleanupDeletePushL(realSource);
sl@0
 11287
sl@0
 11288
	realFormat = CMMFFormatDecode::NewL(KWavReadUid, realSource);
sl@0
 11289
	CleanupStack::PushL(realFormat);
sl@0
 11290
sl@0
 11291
	TCreateSinkBufferTestStep4 testStep4(KUidMmfPtrBuffer, ETrue, realFormat, KAudioOutputDefaultFrameSize22K, dummySource);
sl@0
 11292
sl@0
 11293
	DoTest(testStep4, _L("Audio sink CreateSinkBuffer"), KErrNone);
sl@0
 11294
sl@0
 11295
	CleanupStack::PopAndDestroy(2, realSource); // realFormat, realSource
sl@0
 11296
sl@0
 11297
	CleanupStack::PopAndDestroy(dummySource);
sl@0
 11298
	CleanupStack::PopAndDestroy(scheduler);
sl@0
 11299
sl@0
 11300
	__MM_HEAP_MARKEND;
sl@0
 11301
	return iTestResult;
sl@0
 11302
	}
sl@0
 11303
sl@0
 11304
/**
sl@0
 11305
 *
sl@0
 11306
 * CTestStep_MMF_SRSSNK_U_0209 constructor
sl@0
 11307
 *
sl@0
 11308
 * @xxxx
sl@0
 11309
 *
sl@0
 11310
 */
sl@0
 11311
CTestStep_MMF_SRSSNK_U_0209::CTestStep_MMF_SRSSNK_U_0209()
sl@0
 11312
	{
sl@0
 11313
	// store the name of this test case
sl@0
 11314
	// this is the name that is used by the script file
sl@0
 11315
	// Each test step initialises it's own name
sl@0
 11316
	iTestStepName = _L("MM-MMF-SRSSNK-U-0209");
sl@0
 11317
	}
sl@0
 11318
sl@0
 11319
/**
sl@0
 11320
 *
sl@0
 11321
 * CTestStep_MMF_SRSSNK_U_0209 destructor
sl@0
 11322
 *
sl@0
 11323
 * @xxxx
sl@0
 11324
 *
sl@0
 11325
 */
sl@0
 11326
CTestStep_MMF_SRSSNK_U_0209::~CTestStep_MMF_SRSSNK_U_0209()
sl@0
 11327
	{
sl@0
 11328
	}
sl@0
 11329
sl@0
 11330
/**
sl@0
 11331
 *
sl@0
 11332
 * CTestStep_MMF_SRSSNK_U_0209
sl@0
 11333
 *
sl@0
 11334
 * Functional test of audio input
sl@0
 11335
 * EmptyBuifferL test.
sl@0
 11336
 *
sl@0
 11337
 * @xxxx
sl@0
 11338
 */
sl@0
 11339
const TInt KDevSoundAllocs = 2;
sl@0
 11340
TVerdict CTestStep_MMF_SRSSNK_U_0209::DoTestStepL()
sl@0
 11341
	{
sl@0
 11342
	__MM_HEAP_MARK;
sl@0
 11343
sl@0
 11344
	// Create a dummy source.
sl@0
 11345
	CMMFDummySource* dummySource = new(ELeave) CMMFDummySource;
sl@0
 11346
	CleanupStack::PushL(dummySource);
sl@0
 11347
sl@0
 11348
	// Set it to fill buffers it receives.
sl@0
 11349
	dummySource->SetFillBuffer();
sl@0
 11350
sl@0
 11351
	// Create a real source.
sl@0
 11352
	// Initialise config data.
sl@0
 11353
	TMMFFileConfig configDes;
sl@0
 11354
	configDes().iPath = KTest208FileName;
sl@0
 11355
	MDataSource* realSource = MDataSource::NewSourceL(KUidMmfFileSource, configDes);
sl@0
 11356
	CleanupDeletePushL(realSource);
sl@0
 11357
sl@0
 11358
	TUid KWavReadUid = { KMmfUidFormatWAVRead };
sl@0
 11359
	CMMFFormatDecode* realFormat = CMMFFormatDecode::NewL(KWavReadUid, realSource);
sl@0
 11360
	CleanupStack::PushL(realFormat);
sl@0
 11361
sl@0
 11362
	// Initialise thread active scheduler.
sl@0
 11363
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 11364
	CleanupStack::PushL(scheduler);
sl@0
 11365
	CActiveScheduler::Install(scheduler);
sl@0
 11366
sl@0
 11367
	// Create valid buffer.
sl@0
 11368
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
 11369
	CleanupStack::PushL(validBuffer);
sl@0
 11370
sl@0
 11371
	// Create an audio sink.
sl@0
 11372
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, configDes);
sl@0
 11373
	CleanupDeletePushL(sink);
sl@0
 11374
sl@0
 11375
	// Test empty sink buffer.
sl@0
 11376
	User::LeaveIfError(sink->SinkThreadLogon(*dummySource));
sl@0
 11377
	sink->SinkPrimeL();
sl@0
 11378
	sink->NegotiateL(*realFormat);
sl@0
 11379
sl@0
 11380
	// Create a test (invalid) buffer.
sl@0
 11381
	CMMFBuffer* testBuffer = new(ELeave) CMMFTestBuffer;
sl@0
 11382
	CleanupStack::PushL(testBuffer);
sl@0
 11383
sl@0
 11384
	// Invalid empty buffer.
sl@0
 11385
	TAudioOutputEmptyBufferTestStep testStep(sink, testBuffer, dummySource);
sl@0
 11386
	// Expect two allocs because CMMFDevSound::CBody::SetConfigL()
sl@0
 11387
	// re-allocates it's buffer to match the sample rate of the input file:
sl@0
 11388
	// one alloc is for the new CMMFDescriptorBuffer and the other is for
sl@0
 11389
	// CMMFDescriptorBuffer's internal buffer.
sl@0
 11390
	DoTest(testStep, _L("Audio Output: EmptyBufferL"), KErrNotSupported, KDevSoundAllocs);
sl@0
 11391
	CleanupStack::PopAndDestroy(testBuffer);
sl@0
 11392
sl@0
 11393
	// Valid empty buffer.
sl@0
 11394
	TAudioOutputEmptyBufferTestStep testStep2(sink, validBuffer, dummySource);
sl@0
 11395
	testStep2.SetAsynchronousWrite();
sl@0
 11396
	dummySource->SetActiveScheduler();
sl@0
 11397
	DoTestStep(testStep2, _L("Audio Output: EmptyBufferL"), KErrNone, KDevSoundAllocs);
sl@0
 11398
sl@0
 11399
	// Abandon test if the previous step failed because the remaining tests rely on it's success.
sl@0
 11400
	if (iTestResult != EPass)
sl@0
 11401
		{
sl@0
 11402
		CleanupStack::PopAndDestroy(6, dummySource); // sink, validBuffer, scheduler, realFormat, realSource, dummySource
sl@0
 11403
		__MM_HEAP_MARKEND;
sl@0
 11404
		return iTestResult;
sl@0
 11405
		}
sl@0
 11406
sl@0
 11407
	testStep2.SetAsynchronousWrite();
sl@0
 11408
	dummySource->SetActiveScheduler();
sl@0
 11409
	DoTest(testStep2, _L("Audio Output: EmptyBufferL"), KErrNone, KDevSoundAllocs);
sl@0
 11410
sl@0
 11411
	// Valid empty buffer. (Make multiple requests)
sl@0
 11412
	TAudioOutputEmptyBuffer2TestStep testStep3(sink, validBuffer, dummySource);
sl@0
 11413
	DoTest(testStep3, _L("Audio Output: EmptyBufferL"), KErrNone, KDevSoundAllocs);
sl@0
 11414
sl@0
 11415
	// xxx Valid empty buffer. (Make multiple requests at once)
sl@0
 11416
	// removed below lines because the audio output currently doesn't support multiple requests.
sl@0
 11417
	// TAudioOutputFillBuffer3TestStep testStep4(sink, validBuffer, dummySource);
sl@0
 11418
	// DoTest(testStep4, _L("Audio Output: EmptyBufferL"), KErrNone);
sl@0
 11419
sl@0
 11420
	CleanupStack::PopAndDestroy(sink);
sl@0
 11421
sl@0
 11422
	// These next tests create aand destroy their own sinks,
sl@0
 11423
	// so the CMMFDevSound's buffer allocs shouldn't be counted (see above).
sl@0
 11424
sl@0
 11425
	// Repeat tests, creating a source each time.
sl@0
 11426
	// Valid empty buffer.
sl@0
 11427
	TAudioOutputEmptyBuffer4TestStep testStep5(validBuffer, dummySource, *realFormat);
sl@0
 11428
	DoTest(testStep5, _L("Audio Output: EmptyBufferL"), KErrNone, 0);
sl@0
 11429
sl@0
 11430
	// Valid empty buffer. (Make multiple requests)
sl@0
 11431
	//DevSound WP this test is invalid with HwDevice plugin devsound as you cannot pass
sl@0
 11432
	//in your own buffer and ask the audio utput to empty it because the buffer
sl@0
 11433
	//is owned by audio output.  ie the audio output is effectively active and
sl@0
 11434
	//drives the low itself
sl@0
 11435
	//	TAudioOutputEmptyBuffer5TestStep testStep6(validBuffer, dummySource, *realFormat);
sl@0
 11436
	//	DoTest(testStep6, _L("Audio Output: EmptyBufferL"), KErrNone, 0);
sl@0
 11437
sl@0
 11438
	// xxx Valid empty buffer. (Make multiple requests at once)
sl@0
 11439
	// removed below lines because the audio output currently doesn't support multiple requests.
sl@0
 11440
	// TAudioOutputEmptyBuffer6TestStep testStep7(validBuffer, dummySource);
sl@0
 11441
	// DoTest(testStep7, _L("Audio Output: EmptyBufferL"), KErrNone);
sl@0
 11442
sl@0
 11443
	// Repeat tests using software conversion.
sl@0
 11444
	// Don't forget to call CreateSinkBufferL!
sl@0
 11445
sl@0
 11446
	CleanupStack::PopAndDestroy(5, dummySource); // validBuffer, scheduler, realFormat, realSource, dummySource
sl@0
 11447
sl@0
 11448
	__MM_HEAP_MARKEND;
sl@0
 11449
	return iTestResult;
sl@0
 11450
	}
sl@0
 11451
sl@0
 11452
/**
sl@0
 11453
 *
sl@0
 11454
 * CTestStep_MMF_SRSSNK_U_0210 constructor
sl@0
 11455
 *
sl@0
 11456
 * @xxxx
sl@0
 11457
 *
sl@0
 11458
 */
sl@0
 11459
CTestStep_MMF_SRSSNK_U_0210::CTestStep_MMF_SRSSNK_U_0210()
sl@0
 11460
: CTestStep_MMF_SRSSNK(EFalse)
sl@0
 11461
	{
sl@0
 11462
	// store the name of this test case
sl@0
 11463
	// this is the name that is used by the script file
sl@0
 11464
	// Each test step initialises it's own name
sl@0
 11465
	iTestStepName = _L("MM-MMF-SRSSNK-U-0210");
sl@0
 11466
	}
sl@0
 11467
sl@0
 11468
/**
sl@0
 11469
 *
sl@0
 11470
 * CTestStep_MMF_SRSSNK_U_0210 destructor
sl@0
 11471
 *
sl@0
 11472
 * @xxxx
sl@0
 11473
 *
sl@0
 11474
 */
sl@0
 11475
CTestStep_MMF_SRSSNK_U_0210::~CTestStep_MMF_SRSSNK_U_0210()
sl@0
 11476
	{
sl@0
 11477
	}
sl@0
 11478
sl@0
 11479
/**
sl@0
 11480
 *
sl@0
 11481
 * CTestStep_MMF_SRSSNK_U_0210
sl@0
 11482
 *
sl@0
 11483
 * Functional test of audio output source.
sl@0
 11484
 * BufferFilledL() test.
sl@0
 11485
 *
sl@0
 11486
 * @xxxx
sl@0
 11487
 */
sl@0
 11488
TVerdict CTestStep_MMF_SRSSNK_U_0210::DoTestStepL()
sl@0
 11489
	{
sl@0
 11490
	__MM_HEAP_MARK;
sl@0
 11491
sl@0
 11492
	// This test fails if running a debug StdSourcesAndSinks dll.
sl@0
 11493
	// So only perform the test on target.
sl@0
 11494
sl@0
 11495
	CMMFDescriptorBuffer* validBuffer = CMMFDescriptorBuffer::NewL(KTestBufferSize);
sl@0
 11496
	CleanupStack::PushL(validBuffer);
sl@0
 11497
sl@0
 11498
	// Create sink.
sl@0
 11499
	TBuf8<1> configDes;
sl@0
 11500
	MDataSink* sink = MDataSink::NewSinkL(KUidMmfAudioOutput, configDes);
sl@0
 11501
	CleanupDeletePushL(sink);
sl@0
 11502
sl@0
 11503
	// Test BufferFilledL
sl@0
 11504
	sink->BufferFilledL(validBuffer);
sl@0
 11505
sl@0
 11506
	CleanupStack::PopAndDestroy(2, validBuffer); // sink, validBuffer
sl@0
 11507
sl@0
 11508
	__MM_HEAP_MARKEND;
sl@0
 11509
	return iTestResult;
sl@0
 11510
	}
sl@0
 11511
sl@0
 11512
/**
sl@0
 11513
 *
sl@0
 11514
 * CTestStep_MMF_SRSSNK_U_0211 constructor
sl@0
 11515
 *
sl@0
 11516
 * @xxxx
sl@0
 11517
 *
sl@0
 11518
 */
sl@0
 11519
CTestStep_MMF_SRSSNK_U_0211::CTestStep_MMF_SRSSNK_U_0211()
sl@0
 11520
	{
sl@0
 11521
	// store the name of this test case
sl@0
 11522
	// this is the name that is used by the script file
sl@0
 11523
	// Each test step initialises it's own name
sl@0
 11524
	iTestStepName = _L("MM-MMF-SRSSNK-U-0211");
sl@0
 11525
	}
sl@0
 11526
sl@0
 11527
/**
sl@0
 11528
 *
sl@0
 11529
 * CTestStep_MMF_SRSSNK_U_0211 destructor
sl@0
 11530
 *
sl@0
 11531
 * @xxxx
sl@0
 11532
 *
sl@0
 11533
 */
sl@0
 11534
CTestStep_MMF_SRSSNK_U_0211::~CTestStep_MMF_SRSSNK_U_0211()
sl@0
 11535
	{
sl@0
 11536
	}
sl@0
 11537
sl@0
 11538
/**
sl@0
 11539
 *
sl@0
 11540
 * CTestStep_MMF_SRSSNK_U_0211
sl@0
 11541
 *
sl@0
 11542
 * Functional test of audio output sink.
sl@0
 11543
 * Sink custom commands test.
sl@0
 11544
 *
sl@0
 11545
 * @xxxx
sl@0
 11546
 */
sl@0
 11547
TVerdict CTestStep_MMF_SRSSNK_U_0211::DoTestStepL()
sl@0
 11548
	{
sl@0
 11549
	__MM_HEAP_MARK;
sl@0
 11550
sl@0
 11551
	iTestResult = EFail;
sl@0
 11552
	TUid testControllerUid = { KMmfTestControllerUid };
sl@0
 11553
	RMMFController dummyController;
sl@0
 11554
	TMMFPrioritySettings prioritySettings;
sl@0
 11555
	TMMFMessageDestinationPckg destination;
sl@0
 11556
	User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings));
sl@0
 11557
	CleanupClosePushL(dummyController);
sl@0
 11558
sl@0
 11559
	TBuf8<1> dummyArgs;
sl@0
 11560
	User::LeaveIfError(dummyController.AddDataSink(KUidMmfAudioOutput, dummyArgs));
sl@0
 11561
	TInt err = dummyController.CustomCommandSync(destination, KDescriptorSink, dummyArgs, dummyArgs);
sl@0
 11562
	if (err == KErrNotSupported)
sl@0
 11563
		{
sl@0
 11564
		iTestResult = EPass;
sl@0
 11565
		}
sl@0
 11566
	else
sl@0
 11567
		{
sl@0
 11568
		INFO_PRINTF2(_L("Audio sink SinkCustomCommand: Expecting KErrNotSupported, actually got %d"), err);
sl@0
 11569
		}
sl@0
 11570
sl@0
 11571
	CleanupStack::PopAndDestroy(); // dummyController
sl@0
 11572
sl@0
 11573
	__MM_HEAP_MARKEND;
sl@0
 11574
	return iTestResult;
sl@0
 11575
	}
sl@0
 11576
sl@0
 11577
/**
sl@0
 11578
 *
sl@0
 11579
 * CTestStep_MMF_SRSSNK_U_0212 constructor
sl@0
 11580
 *
sl@0
 11581
 * @xxxx
sl@0
 11582
 *
sl@0
 11583
 */
sl@0
 11584
CTestStep_MMF_SRSSNK_U_0212::CTestStep_MMF_SRSSNK_U_0212()
sl@0
 11585
	{
sl@0
 11586
	// store the name of this test case
sl@0
 11587
	// this is the name that is used by the script file
sl@0
 11588
	// Each test step initialises it's own name
sl@0
 11589
	iTestStepName = _L("MM-MMF-SRSSNK-U-0212");
sl@0
 11590
	}
sl@0
 11591
sl@0
 11592
/**
sl@0
 11593
 *
sl@0
 11594
 * CTestStep_MMF_SRSSNK_U_0212 destructor
sl@0
 11595
 *
sl@0
 11596
 * @xxxx
sl@0
 11597
 *
sl@0
 11598
 */
sl@0
 11599
CTestStep_MMF_SRSSNK_U_0212::~CTestStep_MMF_SRSSNK_U_0212()
sl@0
 11600
	{
sl@0
 11601
	}
sl@0
 11602
sl@0
 11603
/**
sl@0
 11604
 *
sl@0
 11605
 * CTestStep_MMF_SRSSNK_U_0212
sl@0
 11606
 *
sl@0
 11607
 * Functional test of audio output sink.
sl@0
 11608
 * Misc. fns. test.
sl@0
 11609
 *
sl@0
 11610
 * @xxxx
sl@0
 11611
 */
sl@0
 11612
TVerdict CTestStep_MMF_SRSSNK_U_0212::DoTestStepL()
sl@0
 11613
	{
sl@0
 11614
	// All the MDevSoundObserver fns. are untestable.
sl@0
 11615
	return iTestResult;
sl@0
 11616
	}
sl@0
 11617
sl@0
 11618
/**
sl@0
 11619
 *
sl@0
 11620
 * CTestStep_MMF_SRSSNK_U_0301 constructor
sl@0
 11621
 *
sl@0
 11622
 * @xxxx
sl@0
 11623
 *
sl@0
 11624
 */
sl@0
 11625
CTestStep_MMF_SRSSNK_U_0301::CTestStep_MMF_SRSSNK_U_0301()
sl@0
 11626
	{
sl@0
 11627
	iTestStepName = _L("MM-MMF-SRSSNK-U-0301");
sl@0
 11628
	}
sl@0
 11629
sl@0
 11630
/**
sl@0
 11631
 *
sl@0
 11632
 * CTestStep_MMF_SRSSNK_U_0301 destructor
sl@0
 11633
 *
sl@0
 11634
 * @xxxx
sl@0
 11635
 *
sl@0
 11636
 */
sl@0
 11637
CTestStep_MMF_SRSSNK_U_0301::~CTestStep_MMF_SRSSNK_U_0301()
sl@0
 11638
	{
sl@0
 11639
	}
sl@0
 11640
sl@0
 11641
/**
sl@0
 11642
 *
sl@0
 11643
 * CTestStep_MMF_SRSSNK_U_0301
sl@0
 11644
 *
sl@0
 11645
 * Functional test of audio output sink.
sl@0
 11646
 * Misc. fns. test.
sl@0
 11647
 *
sl@0
 11648
 * @xxxx
sl@0
 11649
 */
sl@0
 11650
TVerdict CTestStep_MMF_SRSSNK_U_0301::DoTestStepL()
sl@0
 11651
	{
sl@0
 11652
	__MM_HEAP_MARK;
sl@0
 11653
sl@0
 11654
	TPrimeStopTestStep testStep;
sl@0
 11655
	DoFileTest(testStep, _L("PrimeStop"), KErrNone);
sl@0
 11656
sl@0
 11657
	__MM_HEAP_MARKEND;
sl@0
 11658
	return iTestResult;
sl@0
 11659
	}
sl@0
 11660
sl@0
 11661
/**
sl@0
 11662
 *
sl@0
 11663
 * CTestStep_MMF_SRSSNK_U_0302
sl@0
 11664
 *
sl@0
 11665
 * Functional test of audio output sink.
sl@0
 11666
 * Misc. fns. test.
sl@0
 11667
 *
sl@0
 11668
 * @xxxx
sl@0
 11669
 */
sl@0
 11670
sl@0
 11671
CTestStep_MMF_SRSSNK_U_0302::CTestStep_MMF_SRSSNK_U_0302()
sl@0
 11672
	{
sl@0
 11673
	iTestStepName = _L("MM-MMF-SRSSNK-U-0302");
sl@0
 11674
	}
sl@0
 11675
sl@0
 11676
CTestStep_MMF_SRSSNK_U_0302::~CTestStep_MMF_SRSSNK_U_0302()
sl@0
 11677
	{
sl@0
 11678
	}
sl@0
 11679
sl@0
 11680
TVerdict CTestStep_MMF_SRSSNK_U_0302::DoTestStepL()
sl@0
 11681
	{
sl@0
 11682
	__MM_HEAP_MARK;
sl@0
 11683
sl@0
 11684
	// Initialise thread active scheduler.
sl@0
 11685
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 11686
	CleanupStack::PushL(scheduler);
sl@0
 11687
	CActiveScheduler::Install(scheduler);
sl@0
 11688
sl@0
 11689
	TPrimeStopSinkTestStep testStep;
sl@0
 11690
	DoFileTest(testStep, _L("PrimeStopSinkTest"), KErrNone);
sl@0
 11691
sl@0
 11692
	CleanupStack::PopAndDestroy(scheduler);
sl@0
 11693
sl@0
 11694
	__MM_HEAP_MARKEND;
sl@0
 11695
	return iTestResult;
sl@0
 11696
	}
sl@0
 11697
sl@0
 11698
sl@0
 11699
/**
sl@0
 11700
 *
sl@0
 11701
 * CTestStep_MMF_SRSSNK_U_0400
sl@0
 11702
 * Functional Test of URL Source
sl@0
 11703
 *
sl@0
 11704
 *
sl@0
 11705
 *
sl@0
 11706
 * @xxxx
sl@0
 11707
 */
sl@0
 11708
sl@0
 11709
_LIT(KTestURLMpg, "http://www.symbian.com/clip/mpg");
sl@0
 11710
sl@0
 11711
CTestStep_MMF_SRSSNK_U_0400::CTestStep_MMF_SRSSNK_U_0400()
sl@0
 11712
	{
sl@0
 11713
	iTestStepName = _L("MM-MMF-SRSSNK-U-0400");
sl@0
 11714
	}
sl@0
 11715
sl@0
 11716
CTestStep_MMF_SRSSNK_U_0400::~CTestStep_MMF_SRSSNK_U_0400()
sl@0
 11717
	{
sl@0
 11718
	}
sl@0
 11719
sl@0
 11720
TVerdict CTestStep_MMF_SRSSNK_U_0400::DoTestStepL()
sl@0
 11721
	{
sl@0
 11722
	__MM_HEAP_MARK;
sl@0
 11723
sl@0
 11724
	iTestResult = EFail;
sl@0
 11725
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 11726
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 11727
sl@0
 11728
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 11729
sl@0
 11730
	CleanupDeletePushL(source);
sl@0
 11731
sl@0
 11732
	TPtrC urlPtr = source->Url();
sl@0
 11733
	if (urlPtr == _L("http://www.symbian.com/clip/mpg"))
sl@0
 11734
		{
sl@0
 11735
		iTestResult = EPass;
sl@0
 11736
		}
sl@0
 11737
sl@0
 11738
	CleanupStack::PopAndDestroy(3);
sl@0
 11739
sl@0
 11740
	__MM_HEAP_MARKEND;
sl@0
 11741
	return iTestResult;
sl@0
 11742
	}
sl@0
 11743
sl@0
 11744
sl@0
 11745
sl@0
 11746
/**
sl@0
 11747
 *
sl@0
 11748
 * CTestStep_MMF_SRSSNK_U_0405
sl@0
 11749
 * Functional Test of URL Source
sl@0
 11750
 *
sl@0
 11751
 *
sl@0
 11752
 *
sl@0
 11753
 * @xxxx
sl@0
 11754
 */
sl@0
 11755
sl@0
 11756
CTestStep_MMF_SRSSNK_U_0405::CTestStep_MMF_SRSSNK_U_0405()
sl@0
 11757
	{
sl@0
 11758
	iTestStepName = _L("MM-MMF-SRSSNK-U-0405");
sl@0
 11759
	}
sl@0
 11760
sl@0
 11761
CTestStep_MMF_SRSSNK_U_0405::~CTestStep_MMF_SRSSNK_U_0405()
sl@0
 11762
	{
sl@0
 11763
	}
sl@0
 11764
sl@0
 11765
TVerdict CTestStep_MMF_SRSSNK_U_0405::DoTestStepL()
sl@0
 11766
	{
sl@0
 11767
	__MM_HEAP_MARK;
sl@0
 11768
sl@0
 11769
	iTestResult = EFail;
sl@0
 11770
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 11771
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 11772
sl@0
 11773
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 11774
	CleanupDeletePushL(source);
sl@0
 11775
	TFourCC fourCCCode;
sl@0
 11776
	TMediaId nullId;
sl@0
 11777
sl@0
 11778
	fourCCCode = source->SourceDataTypeCode(nullId);
sl@0
 11779
	if (fourCCCode == KMMFFourCCCodeNULL)
sl@0
 11780
		{
sl@0
 11781
		iTestResult = EPass;
sl@0
 11782
		}
sl@0
 11783
sl@0
 11784
	CleanupStack::PopAndDestroy(3);
sl@0
 11785
sl@0
 11786
	__MM_HEAP_MARKEND;
sl@0
 11787
	return iTestResult;
sl@0
 11788
	}
sl@0
 11789
sl@0
 11790
/**
sl@0
 11791
 *
sl@0
 11792
 * CTestStep_MMF_SRSSNK_U_0406
sl@0
 11793
 * Functional Test of URL Source
sl@0
 11794
 *
sl@0
 11795
 *
sl@0
 11796
 *
sl@0
 11797
 * @xxxx
sl@0
 11798
 */
sl@0
 11799
sl@0
 11800
CTestStep_MMF_SRSSNK_U_0406::CTestStep_MMF_SRSSNK_U_0406()
sl@0
 11801
	{
sl@0
 11802
	iTestStepName = _L("MM-MMF-SRSSNK-U-0406");
sl@0
 11803
	}
sl@0
 11804
sl@0
 11805
CTestStep_MMF_SRSSNK_U_0406::~CTestStep_MMF_SRSSNK_U_0406()
sl@0
 11806
	{
sl@0
 11807
	}
sl@0
 11808
sl@0
 11809
TVerdict CTestStep_MMF_SRSSNK_U_0406::DoTestStepL()
sl@0
 11810
	{
sl@0
 11811
	__MM_HEAP_MARK;
sl@0
 11812
sl@0
 11813
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 11814
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 11815
sl@0
 11816
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 11817
	CleanupDeletePushL(source);
sl@0
 11818
	TFourCC fourCCCode;
sl@0
 11819
	TMediaId nullMediaId;
sl@0
 11820
	TInt returnValue = 0;
sl@0
 11821
sl@0
 11822
	returnValue = source->SetSourceDataTypeCode(fourCCCode, nullMediaId);
sl@0
 11823
	if (returnValue == KErrNotSupported)
sl@0
 11824
		{
sl@0
 11825
		iTestResult = EPass;
sl@0
 11826
		}
sl@0
 11827
sl@0
 11828
	CleanupStack::PopAndDestroy(3);
sl@0
 11829
sl@0
 11830
	__MM_HEAP_MARKEND;
sl@0
 11831
	return iTestResult;
sl@0
 11832
	}
sl@0
 11833
sl@0
 11834
sl@0
 11835
/**
sl@0
 11836
 *
sl@0
 11837
 * CTestStep_MMF_SRSSNK_U_0407
sl@0
 11838
 * Functional Test of URL Source
sl@0
 11839
 *
sl@0
 11840
 *
sl@0
 11841
 *
sl@0
 11842
 * @xxxx
sl@0
 11843
 */
sl@0
 11844
sl@0
 11845
CTestStep_MMF_SRSSNK_U_0407::CTestStep_MMF_SRSSNK_U_0407()
sl@0
 11846
	{
sl@0
 11847
	iTestStepName = _L("MM-MMF-SRSSNK-U-0407");
sl@0
 11848
	}
sl@0
 11849
sl@0
 11850
CTestStep_MMF_SRSSNK_U_0407::~CTestStep_MMF_SRSSNK_U_0407()
sl@0
 11851
	{
sl@0
 11852
	}
sl@0
 11853
sl@0
 11854
TVerdict CTestStep_MMF_SRSSNK_U_0407::DoTestStepL()
sl@0
 11855
	{
sl@0
 11856
	__MM_HEAP_MARK;
sl@0
 11857
sl@0
 11858
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 11859
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 11860
sl@0
 11861
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 11862
	CleanupDeletePushL(source);
sl@0
 11863
	TMediaId nullId;
sl@0
 11864
sl@0
 11865
	TRAPD(err, source->FillBufferL(NULL, NULL, nullId));
sl@0
 11866
	if (err == KErrNotSupported)
sl@0
 11867
		{
sl@0
 11868
		iTestResult = EPass;
sl@0
 11869
		}
sl@0
 11870
sl@0
 11871
	CleanupStack::PopAndDestroy(3);
sl@0
 11872
sl@0
 11873
	__MM_HEAP_MARKEND;
sl@0
 11874
	return iTestResult;
sl@0
 11875
	}
sl@0
 11876
sl@0
 11877
/**
sl@0
 11878
 *
sl@0
 11879
 * CTestStep_MMF_SRSSNK_U_0408
sl@0
 11880
 * Functional Test of URL Source
sl@0
 11881
 *
sl@0
 11882
 *
sl@0
 11883
 *
sl@0
 11884
 * @xxxx
sl@0
 11885
 */
sl@0
 11886
sl@0
 11887
CTestStep_MMF_SRSSNK_U_0408::CTestStep_MMF_SRSSNK_U_0408()
sl@0
 11888
	{
sl@0
 11889
	iTestStepName = _L("MM-MMF-SRSSNK-U-0408");
sl@0
 11890
	}
sl@0
 11891
sl@0
 11892
CTestStep_MMF_SRSSNK_U_0408::~CTestStep_MMF_SRSSNK_U_0408()
sl@0
 11893
	{
sl@0
 11894
	}
sl@0
 11895
sl@0
 11896
TVerdict CTestStep_MMF_SRSSNK_U_0408::DoTestStepL()
sl@0
 11897
	{
sl@0
 11898
	__MM_HEAP_MARK;
sl@0
 11899
sl@0
 11900
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 11901
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 11902
sl@0
 11903
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 11904
	CleanupDeletePushL(source);
sl@0
 11905
sl@0
 11906
	TRAPD(err, source->BufferEmptiedL(NULL));
sl@0
 11907
	if (err == KErrNotSupported)
sl@0
 11908
		{
sl@0
 11909
		iTestResult = EPass;
sl@0
 11910
		}
sl@0
 11911
sl@0
 11912
	CleanupStack::PopAndDestroy(3);
sl@0
 11913
sl@0
 11914
	__MM_HEAP_MARKEND;
sl@0
 11915
	return iTestResult;
sl@0
 11916
	}
sl@0
 11917
sl@0
 11918
sl@0
 11919
/**
sl@0
 11920
 *
sl@0
 11921
 * CTestStep_MMF_SRSSNK_U_0409
sl@0
 11922
 * Functional Test of URL Source
sl@0
 11923
 *
sl@0
 11924
 *
sl@0
 11925
 *
sl@0
 11926
 * @xxxx
sl@0
 11927
 */
sl@0
 11928
sl@0
 11929
CTestStep_MMF_SRSSNK_U_0409::CTestStep_MMF_SRSSNK_U_0409()
sl@0
 11930
	{
sl@0
 11931
	iTestStepName = _L("MM-MMF-SRSSNK-U-0409");
sl@0
 11932
	}
sl@0
 11933
sl@0
 11934
CTestStep_MMF_SRSSNK_U_0409::~CTestStep_MMF_SRSSNK_U_0409()
sl@0
 11935
	{
sl@0
 11936
	}
sl@0
 11937
sl@0
 11938
TVerdict CTestStep_MMF_SRSSNK_U_0409::DoTestStepL()
sl@0
 11939
	{
sl@0
 11940
	__MM_HEAP_MARK;
sl@0
 11941
sl@0
 11942
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 11943
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 11944
sl@0
 11945
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 11946
	CleanupDeletePushL(source);
sl@0
 11947
sl@0
 11948
	TBool srcBuf = source->CanCreateSourceBuffer();
sl@0
 11949
	if (!srcBuf)
sl@0
 11950
		{
sl@0
 11951
		iTestResult = EPass;
sl@0
 11952
		}
sl@0
 11953
sl@0
 11954
	CleanupStack::PopAndDestroy(3);
sl@0
 11955
sl@0
 11956
	__MM_HEAP_MARKEND;
sl@0
 11957
	return iTestResult;
sl@0
 11958
	}
sl@0
 11959
sl@0
 11960
sl@0
 11961
/**
sl@0
 11962
 *
sl@0
 11963
 * CTestStep_MMF_SRSSNK_U_0410
sl@0
 11964
 * Functional Test of URL Source
sl@0
 11965
 *
sl@0
 11966
 *
sl@0
 11967
 *
sl@0
 11968
 * @xxxx
sl@0
 11969
 */
sl@0
 11970
sl@0
 11971
CTestStep_MMF_SRSSNK_U_0410::CTestStep_MMF_SRSSNK_U_0410()
sl@0
 11972
	{
sl@0
 11973
	iTestStepName = _L("MM-MMF-SRSSNK-U-0410");
sl@0
 11974
	}
sl@0
 11975
sl@0
 11976
CTestStep_MMF_SRSSNK_U_0410::~CTestStep_MMF_SRSSNK_U_0410()
sl@0
 11977
	{
sl@0
 11978
	}
sl@0
 11979
sl@0
 11980
TVerdict CTestStep_MMF_SRSSNK_U_0410::DoTestStepL()
sl@0
 11981
	{
sl@0
 11982
	__MM_HEAP_MARK;
sl@0
 11983
sl@0
 11984
	iTestResult = EFail;
sl@0
 11985
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 11986
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 11987
sl@0
 11988
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 11989
	CleanupDeletePushL(source);
sl@0
 11990
	TMediaId nullId;
sl@0
 11991
	TBool ref = ETrue;
sl@0
 11992
sl@0
 11993
	TRAPD(err, source->CreateSourceBufferL(nullId, ref));	// EABI warning removal
sl@0
 11994
	if (err == KErrNotSupported)
sl@0
 11995
		{
sl@0
 11996
		iTestResult = EPass;
sl@0
 11997
		}
sl@0
 11998
sl@0
 11999
	CleanupStack::PopAndDestroy(3);
sl@0
 12000
sl@0
 12001
	__MM_HEAP_MARKEND;
sl@0
 12002
	return iTestResult;
sl@0
 12003
	}
sl@0
 12004
sl@0
 12005
sl@0
 12006
/**
sl@0
 12007
 *
sl@0
 12008
 * CTestStep_MMF_SRSSNK_U_0411
sl@0
 12009
 * Functional Test of URL Source
sl@0
 12010
 *
sl@0
 12011
 *
sl@0
 12012
 *
sl@0
 12013
 * @xxxx
sl@0
 12014
 */
sl@0
 12015
sl@0
 12016
CTestStep_MMF_SRSSNK_U_0411::CTestStep_MMF_SRSSNK_U_0411()
sl@0
 12017
	{
sl@0
 12018
	iTestStepName = _L("MM-MMF-SRSSNK-U-0411");
sl@0
 12019
	}
sl@0
 12020
sl@0
 12021
CTestStep_MMF_SRSSNK_U_0411::~CTestStep_MMF_SRSSNK_U_0411()
sl@0
 12022
	{
sl@0
 12023
	}
sl@0
 12024
sl@0
 12025
TVerdict CTestStep_MMF_SRSSNK_U_0411::DoTestStepL()
sl@0
 12026
	{
sl@0
 12027
	__MM_HEAP_MARK;
sl@0
 12028
sl@0
 12029
	iTestResult = EFail;
sl@0
 12030
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12031
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12032
sl@0
 12033
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 12034
	CleanupDeletePushL(source);
sl@0
 12035
	TMediaId nullId;
sl@0
 12036
	CMMFDataBuffer* buf2 = CMMFDataBuffer::NewL();
sl@0
 12037
	CleanupStack::PushL(buf2);
sl@0
 12038
	TBool ref = ETrue;
sl@0
 12039
sl@0
 12040
	TRAPD(err, source->CreateSourceBufferL(nullId, *buf2, ref));	// EABI warning removal
sl@0
 12041
	if (err == KErrNotSupported)
sl@0
 12042
		{
sl@0
 12043
		iTestResult = EPass;
sl@0
 12044
		}
sl@0
 12045
sl@0
 12046
	CleanupStack::PopAndDestroy(4);
sl@0
 12047
sl@0
 12048
	__MM_HEAP_MARKEND;
sl@0
 12049
	return iTestResult;
sl@0
 12050
	}
sl@0
 12051
sl@0
 12052
sl@0
 12053
/**
sl@0
 12054
 *
sl@0
 12055
 * CTestStep_MMF_SRSSNK_U_0412
sl@0
 12056
 * Functional Test of URL Source
sl@0
 12057
 *
sl@0
 12058
 *
sl@0
 12059
 *
sl@0
 12060
 * @xxxx
sl@0
 12061
 */
sl@0
 12062
sl@0
 12063
CTestStep_MMF_SRSSNK_U_0412::CTestStep_MMF_SRSSNK_U_0412()
sl@0
 12064
	{
sl@0
 12065
	iTestStepName = _L("MM-MMF-SRSSNK-U-0412");
sl@0
 12066
	}
sl@0
 12067
sl@0
 12068
CTestStep_MMF_SRSSNK_U_0412::~CTestStep_MMF_SRSSNK_U_0412()
sl@0
 12069
	{
sl@0
 12070
	}
sl@0
 12071
sl@0
 12072
TVerdict CTestStep_MMF_SRSSNK_U_0412::DoTestStepL()
sl@0
 12073
	{
sl@0
 12074
	__MM_HEAP_MARK;
sl@0
 12075
sl@0
 12076
	iTestResult = EFail;
sl@0
 12077
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12078
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12079
sl@0
 12080
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 12081
	CleanupDeletePushL(source);
sl@0
 12082
sl@0
 12083
	MAsyncEventHandler* s = NULL;
sl@0
 12084
	TInt returnValue = source->SourceThreadLogon(*s);
sl@0
 12085
	if (returnValue == KErrNotSupported)
sl@0
 12086
		{
sl@0
 12087
		iTestResult = EPass;
sl@0
 12088
		}
sl@0
 12089
sl@0
 12090
	CleanupStack::PopAndDestroy(3);
sl@0
 12091
sl@0
 12092
	__MM_HEAP_MARKEND;
sl@0
 12093
	return iTestResult;
sl@0
 12094
	}
sl@0
 12095
sl@0
 12096
sl@0
 12097
/**
sl@0
 12098
 *
sl@0
 12099
 * CTestStep_MMF_SRSSNK_U_0413
sl@0
 12100
 * Functional Test of URL Source
sl@0
 12101
 *
sl@0
 12102
 *
sl@0
 12103
 *
sl@0
 12104
 * @xxxx
sl@0
 12105
 */
sl@0
 12106
sl@0
 12107
CTestStep_MMF_SRSSNK_U_0413::CTestStep_MMF_SRSSNK_U_0413()
sl@0
 12108
	{
sl@0
 12109
	iTestStepName = _L("MM-MMF-SRSSNK-U-0413");
sl@0
 12110
	}
sl@0
 12111
sl@0
 12112
CTestStep_MMF_SRSSNK_U_0413::~CTestStep_MMF_SRSSNK_U_0413()
sl@0
 12113
	{
sl@0
 12114
	}
sl@0
 12115
sl@0
 12116
TVerdict CTestStep_MMF_SRSSNK_U_0413::DoTestStepL()
sl@0
 12117
	{
sl@0
 12118
	__MM_HEAP_MARK;
sl@0
 12119
sl@0
 12120
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12121
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12122
sl@0
 12123
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 12124
	CleanupDeletePushL(source);
sl@0
 12125
sl@0
 12126
	source->SourceThreadLogoff();
sl@0
 12127
sl@0
 12128
	CleanupStack::PopAndDestroy(3);
sl@0
 12129
sl@0
 12130
	__MM_HEAP_MARKEND;
sl@0
 12131
	return iTestResult;
sl@0
 12132
	}
sl@0
 12133
sl@0
 12134
sl@0
 12135
/**
sl@0
 12136
 *
sl@0
 12137
 * CTestStep_MMF_SRSSNK_U_0414
sl@0
 12138
 * Functional Test of URL Source
sl@0
 12139
 *
sl@0
 12140
 *
sl@0
 12141
 *
sl@0
 12142
 * @xxxx
sl@0
 12143
 */
sl@0
 12144
sl@0
 12145
CTestStep_MMF_SRSSNK_U_0414::CTestStep_MMF_SRSSNK_U_0414()
sl@0
 12146
	{
sl@0
 12147
	iTestStepName = _L("MM-MMF-SRSSNK-U-0414");
sl@0
 12148
	}
sl@0
 12149
sl@0
 12150
CTestStep_MMF_SRSSNK_U_0414::~CTestStep_MMF_SRSSNK_U_0414()
sl@0
 12151
	{
sl@0
 12152
	}
sl@0
 12153
sl@0
 12154
TVerdict CTestStep_MMF_SRSSNK_U_0414::DoTestStepL()
sl@0
 12155
	{
sl@0
 12156
	__MM_HEAP_MARK;
sl@0
 12157
sl@0
 12158
	iTestResult = EFail;
sl@0
 12159
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12160
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12161
sl@0
 12162
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 12163
	CleanupDeletePushL(source);
sl@0
 12164
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 12165
	CleanupDeletePushL(sink);
sl@0
 12166
sl@0
 12167
	TRAPD(err, source->NegotiateSourceL(*sink));
sl@0
 12168
	if (err == KErrNotSupported)
sl@0
 12169
		{
sl@0
 12170
		iTestResult = EPass;
sl@0
 12171
		}
sl@0
 12172
sl@0
 12173
	CleanupStack::PopAndDestroy(4);
sl@0
 12174
sl@0
 12175
	__MM_HEAP_MARKEND;
sl@0
 12176
	return iTestResult;
sl@0
 12177
	}
sl@0
 12178
sl@0
 12179
sl@0
 12180
/**
sl@0
 12181
 *
sl@0
 12182
 * CTestStep_MMF_SRSSNK_U_0415
sl@0
 12183
 * Functional Test of URL Source
sl@0
 12184
 *
sl@0
 12185
 *
sl@0
 12186
 *
sl@0
 12187
 * @xxxx
sl@0
 12188
 */
sl@0
 12189
sl@0
 12190
CTestStep_MMF_SRSSNK_U_0415::CTestStep_MMF_SRSSNK_U_0415()
sl@0
 12191
	{
sl@0
 12192
	iTestStepName = _L("MM-MMF-SRSSNK-U-0415");
sl@0
 12193
	}
sl@0
 12194
sl@0
 12195
CTestStep_MMF_SRSSNK_U_0415::~CTestStep_MMF_SRSSNK_U_0415()
sl@0
 12196
	{
sl@0
 12197
	}
sl@0
 12198
sl@0
 12199
TVerdict CTestStep_MMF_SRSSNK_U_0415::DoTestStepL()
sl@0
 12200
	{
sl@0
 12201
	__MM_HEAP_MARK;
sl@0
 12202
sl@0
 12203
	iTestResult = EFail;
sl@0
 12204
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12205
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12206
sl@0
 12207
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 12208
	CleanupDeletePushL(source);
sl@0
 12209
	TBool returnValue = ETrue;
sl@0
 12210
sl@0
 12211
	returnValue = source->SourceSampleConvert();
sl@0
 12212
	if (returnValue == EFalse)
sl@0
 12213
		{
sl@0
 12214
		iTestResult = EPass;
sl@0
 12215
		}
sl@0
 12216
sl@0
 12217
	CleanupStack::PopAndDestroy(3);
sl@0
 12218
sl@0
 12219
	__MM_HEAP_MARKEND;
sl@0
 12220
	return iTestResult;
sl@0
 12221
	}
sl@0
 12222
sl@0
 12223
sl@0
 12224
/**
sl@0
 12225
 *
sl@0
 12226
 * CTestStep_MMF_SRSSNK_U_0416
sl@0
 12227
 *
sl@0
 12228
 * Functional Test of URL Source
sl@0
 12229
 *
sl@0
 12230
 *
sl@0
 12231
 *
sl@0
 12232
 * @xxxx
sl@0
 12233
 */
sl@0
 12234
sl@0
 12235
CTestStep_MMF_SRSSNK_U_0416::CTestStep_MMF_SRSSNK_U_0416()
sl@0
 12236
	{
sl@0
 12237
	iTestStepName = _L("MM-MMF-SRSSNK-U-0416");
sl@0
 12238
	}
sl@0
 12239
sl@0
 12240
CTestStep_MMF_SRSSNK_U_0416::~CTestStep_MMF_SRSSNK_U_0416()
sl@0
 12241
	{
sl@0
 12242
	}
sl@0
 12243
sl@0
 12244
TVerdict CTestStep_MMF_SRSSNK_U_0416::DoTestStepL()
sl@0
 12245
	{
sl@0
 12246
	__MM_HEAP_MARK;
sl@0
 12247
sl@0
 12248
	iTestResult = EFail;
sl@0
 12249
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12250
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12251
sl@0
 12252
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 12253
	CleanupDeletePushL(source);
sl@0
 12254
sl@0
 12255
	TRAPD(err, source->SourcePrimeL());
sl@0
 12256
	if (err == KErrNotSupported)
sl@0
 12257
		{
sl@0
 12258
		iTestResult = EPass;
sl@0
 12259
		}
sl@0
 12260
sl@0
 12261
	CleanupStack::PopAndDestroy(3);
sl@0
 12262
sl@0
 12263
	__MM_HEAP_MARKEND;
sl@0
 12264
	return iTestResult;
sl@0
 12265
	}
sl@0
 12266
sl@0
 12267
sl@0
 12268
/**
sl@0
 12269
 *
sl@0
 12270
 * CTestStep_MMF_SRSSNK_U_0417
sl@0
 12271
 *
sl@0
 12272
 * Functional Test of URL Source
sl@0
 12273
 *
sl@0
 12274
 *
sl@0
 12275
 *
sl@0
 12276
 * @xxxx
sl@0
 12277
 */
sl@0
 12278
sl@0
 12279
CTestStep_MMF_SRSSNK_U_0417::CTestStep_MMF_SRSSNK_U_0417()
sl@0
 12280
	{
sl@0
 12281
	iTestStepName = _L("MM-MMF-SRSSNK-U-0417");
sl@0
 12282
	}
sl@0
 12283
sl@0
 12284
CTestStep_MMF_SRSSNK_U_0417::~CTestStep_MMF_SRSSNK_U_0417()
sl@0
 12285
	{
sl@0
 12286
	}
sl@0
 12287
sl@0
 12288
TVerdict CTestStep_MMF_SRSSNK_U_0417::DoTestStepL()
sl@0
 12289
	{
sl@0
 12290
	__MM_HEAP_MARK;
sl@0
 12291
sl@0
 12292
	iTestResult = EFail;
sl@0
 12293
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12294
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12295
sl@0
 12296
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 12297
	CleanupDeletePushL(source);
sl@0
 12298
sl@0
 12299
	TRAPD(err, source->SourcePlayL());
sl@0
 12300
	if (err == KErrNotSupported)
sl@0
 12301
		{
sl@0
 12302
		iTestResult = EPass;
sl@0
 12303
		}
sl@0
 12304
sl@0
 12305
	CleanupStack::PopAndDestroy(3);
sl@0
 12306
sl@0
 12307
	__MM_HEAP_MARKEND;
sl@0
 12308
	return iTestResult;
sl@0
 12309
	}
sl@0
 12310
sl@0
 12311
sl@0
 12312
/**
sl@0
 12313
 *
sl@0
 12314
 * CTestStep_MMF_SRSSNK_U_0418
sl@0
 12315
 * Functional Test of URL Source
sl@0
 12316
 *
sl@0
 12317
 *
sl@0
 12318
 *
sl@0
 12319
 * @xxxx
sl@0
 12320
 */
sl@0
 12321
sl@0
 12322
CTestStep_MMF_SRSSNK_U_0418::CTestStep_MMF_SRSSNK_U_0418()
sl@0
 12323
	{
sl@0
 12324
	iTestStepName = _L("MM-MMF-SRSSNK-U-0418");
sl@0
 12325
	}
sl@0
 12326
sl@0
 12327
CTestStep_MMF_SRSSNK_U_0418::~CTestStep_MMF_SRSSNK_U_0418()
sl@0
 12328
	{
sl@0
 12329
	}
sl@0
 12330
sl@0
 12331
TVerdict CTestStep_MMF_SRSSNK_U_0418::DoTestStepL()
sl@0
 12332
	{
sl@0
 12333
	__MM_HEAP_MARK;
sl@0
 12334
sl@0
 12335
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12336
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12337
sl@0
 12338
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 12339
	CleanupDeletePushL(source);
sl@0
 12340
sl@0
 12341
	TRAPD(err, source->SourcePauseL());
sl@0
 12342
	if (err == KErrNotSupported)
sl@0
 12343
		{
sl@0
 12344
		iTestResult = EPass;
sl@0
 12345
		}
sl@0
 12346
sl@0
 12347
	CleanupStack::PopAndDestroy(3);
sl@0
 12348
sl@0
 12349
	__MM_HEAP_MARKEND;
sl@0
 12350
	return iTestResult;
sl@0
 12351
	}
sl@0
 12352
sl@0
 12353
sl@0
 12354
/**
sl@0
 12355
 *
sl@0
 12356
 * CTestStep_MMF_SRSSNK_U_0419
sl@0
 12357
 * Functional Test of URL Source
sl@0
 12358
 *
sl@0
 12359
 *
sl@0
 12360
 *
sl@0
 12361
 *
sl@0
 12362
 * @xxxx
sl@0
 12363
 */
sl@0
 12364
sl@0
 12365
CTestStep_MMF_SRSSNK_U_0419::CTestStep_MMF_SRSSNK_U_0419()
sl@0
 12366
	{
sl@0
 12367
	iTestStepName = _L("MM-MMF-SRSSNK-U-0419");
sl@0
 12368
	}
sl@0
 12369
sl@0
 12370
CTestStep_MMF_SRSSNK_U_0419::~CTestStep_MMF_SRSSNK_U_0419()
sl@0
 12371
	{
sl@0
 12372
	}
sl@0
 12373
sl@0
 12374
TVerdict CTestStep_MMF_SRSSNK_U_0419::DoTestStepL()
sl@0
 12375
	{
sl@0
 12376
	__MM_HEAP_MARK;
sl@0
 12377
sl@0
 12378
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12379
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12380
sl@0
 12381
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 12382
	CleanupDeletePushL(source);
sl@0
 12383
sl@0
 12384
	TRAPD(err, source->SourceStopL());
sl@0
 12385
	if (err == KErrNotSupported)
sl@0
 12386
		{
sl@0
 12387
		iTestResult = EPass;
sl@0
 12388
		}
sl@0
 12389
sl@0
 12390
	CleanupStack::PopAndDestroy(3);
sl@0
 12391
sl@0
 12392
	__MM_HEAP_MARKEND;
sl@0
 12393
	return iTestResult;
sl@0
 12394
	}
sl@0
 12395
sl@0
 12396
sl@0
 12397
sl@0
 12398
/**
sl@0
 12399
 *
sl@0
 12400
 * CTestStep_MMF_SRSSNK_U_0420
sl@0
 12401
 * Functional Test of URL Source
sl@0
 12402
 *
sl@0
 12403
 *
sl@0
 12404
 *
sl@0
 12405
 * @xxxx
sl@0
 12406
 */
sl@0
 12407
sl@0
 12408
CTestStep_MMF_SRSSNK_U_0420::CTestStep_MMF_SRSSNK_U_0420()
sl@0
 12409
	{
sl@0
 12410
	iTestStepName = _L("MM-MMF-SRSSNK-U-0420");
sl@0
 12411
	}
sl@0
 12412
sl@0
 12413
CTestStep_MMF_SRSSNK_U_0420::~CTestStep_MMF_SRSSNK_U_0420()
sl@0
 12414
	{
sl@0
 12415
	}
sl@0
 12416
sl@0
 12417
TVerdict CTestStep_MMF_SRSSNK_U_0420::DoTestStepL()
sl@0
 12418
	{
sl@0
 12419
	__MM_HEAP_MARK;
sl@0
 12420
sl@0
 12421
	iTestResult = EFail;
sl@0
 12422
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12423
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12424
sl@0
 12425
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 12426
	CleanupDeletePushL(source);
sl@0
 12427
	TMMFPrioritySettings settings;
sl@0
 12428
sl@0
 12429
	TRAPD(err, source->SetSourcePrioritySettings(settings));
sl@0
 12430
	if (err == KErrNone)
sl@0
 12431
		{
sl@0
 12432
		iTestResult = EPass;
sl@0
 12433
		}
sl@0
 12434
sl@0
 12435
	CleanupStack::PopAndDestroy(3);
sl@0
 12436
sl@0
 12437
	__MM_HEAP_MARKEND;
sl@0
 12438
	return iTestResult;
sl@0
 12439
	}
sl@0
 12440
sl@0
 12441
sl@0
 12442
/**
sl@0
 12443
 *
sl@0
 12444
 * CTestStep_MMF_SRSSNK_U_0421
sl@0
 12445
 * Functional Test of URL Source
sl@0
 12446
 *
sl@0
 12447
 *
sl@0
 12448
 *
sl@0
 12449
 * @xxxx
sl@0
 12450
 */
sl@0
 12451
sl@0
 12452
CTestStep_MMF_SRSSNK_U_0421::CTestStep_MMF_SRSSNK_U_0421()
sl@0
 12453
	{
sl@0
 12454
	iTestStepName = _L("MM-MMF-SRSSNK-U-0421");
sl@0
 12455
	}
sl@0
 12456
sl@0
 12457
CTestStep_MMF_SRSSNK_U_0421::~CTestStep_MMF_SRSSNK_U_0421()
sl@0
 12458
	{
sl@0
 12459
	}
sl@0
 12460
sl@0
 12461
TVerdict CTestStep_MMF_SRSSNK_U_0421::DoTestStepL()
sl@0
 12462
	{
sl@0
 12463
	__MM_HEAP_MARK;
sl@0
 12464
sl@0
 12465
	iTestResult = EFail;
sl@0
 12466
	// Initialise config data.
sl@0
 12467
	TMMFFileConfig configDes;
sl@0
 12468
	configDes().iPath = KTest101FileName;
sl@0
 12469
sl@0
 12470
	TUid testControllerUid = { KMmfTestControllerUid };
sl@0
 12471
	RMMFController dummyController;
sl@0
 12472
	TMMFPrioritySettings prioritySettings;
sl@0
 12473
	TMMFMessageDestinationPckg destination;
sl@0
 12474
	User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings));
sl@0
 12475
	CleanupClosePushL(dummyController);
sl@0
 12476
sl@0
 12477
	TBuf8<1> dummyArgs;
sl@0
 12478
	User::LeaveIfError(dummyController.AddDataSource(KUidMmfUrlSource, configDes));
sl@0
 12479
	TInt err = dummyController.CustomCommandSync(destination, KDescriptorSource, dummyArgs, dummyArgs);
sl@0
 12480
sl@0
 12481
	if (err == KErrNotSupported)
sl@0
 12482
		{
sl@0
 12483
		INFO_PRINTF2(_L("File source SourceCustomCommand: Expected KErrNotSupported, Error: %d"), err);
sl@0
 12484
		iTestResult = EPass;
sl@0
 12485
		}
sl@0
 12486
sl@0
 12487
	CleanupStack::PopAndDestroy(); // dummyController
sl@0
 12488
sl@0
 12489
	__MM_HEAP_MARKEND;
sl@0
 12490
	return iTestResult;
sl@0
 12491
	}
sl@0
 12492
sl@0
 12493
sl@0
 12494
/*
sl@0
 12495
 *    Sinks
sl@0
 12496
 *
sl@0
 12497
 *
sl@0
 12498
 */
sl@0
 12499
sl@0
 12500
/**
sl@0
 12501
 *
sl@0
 12502
 * CTestStep_MMF_SRSSNK_U_0500
sl@0
 12503
 * Functional Test of URL Sink
sl@0
 12504
 *
sl@0
 12505
 *
sl@0
 12506
 * @xxxx
sl@0
 12507
 */
sl@0
 12508
CTestStep_MMF_SRSSNK_U_0500::CTestStep_MMF_SRSSNK_U_0500()
sl@0
 12509
	{
sl@0
 12510
	iTestStepName = _L("MM-MMF-SRSSNK-U-0500");
sl@0
 12511
	}
sl@0
 12512
sl@0
 12513
CTestStep_MMF_SRSSNK_U_0500::~CTestStep_MMF_SRSSNK_U_0500()
sl@0
 12514
	{
sl@0
 12515
	}
sl@0
 12516
sl@0
 12517
TVerdict CTestStep_MMF_SRSSNK_U_0500::DoTestStepL()
sl@0
 12518
	{
sl@0
 12519
	__MM_HEAP_MARK;
sl@0
 12520
sl@0
 12521
	iTestResult = EFail;
sl@0
 12522
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12523
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12524
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 12525
sl@0
 12526
	CleanupDeletePushL(sink);
sl@0
 12527
sl@0
 12528
	TPtrC urlPtr = sink->Url();
sl@0
 12529
	if (urlPtr == _L("http://www.symbian.com/clip/mpg"))
sl@0
 12530
		{
sl@0
 12531
		iTestResult = EPass;
sl@0
 12532
		}
sl@0
 12533
sl@0
 12534
	CleanupStack::PopAndDestroy(3);
sl@0
 12535
sl@0
 12536
	__MM_HEAP_MARKEND;
sl@0
 12537
	return iTestResult;
sl@0
 12538
	}
sl@0
 12539
sl@0
 12540
sl@0
 12541
/**
sl@0
 12542
 *
sl@0
 12543
 * CTestStep_MMF_SRSSNK_U_0505
sl@0
 12544
 * Functional Test of URL Sink
sl@0
 12545
 *
sl@0
 12546
 *
sl@0
 12547
 * @xxxx
sl@0
 12548
 */
sl@0
 12549
CTestStep_MMF_SRSSNK_U_0505::CTestStep_MMF_SRSSNK_U_0505()
sl@0
 12550
	{
sl@0
 12551
	iTestStepName = _L("MM-MMF-SRSSNK-U-0505");
sl@0
 12552
	}
sl@0
 12553
sl@0
 12554
CTestStep_MMF_SRSSNK_U_0505::~CTestStep_MMF_SRSSNK_U_0505()
sl@0
 12555
	{
sl@0
 12556
	}
sl@0
 12557
sl@0
 12558
TVerdict CTestStep_MMF_SRSSNK_U_0505::DoTestStepL()
sl@0
 12559
	{
sl@0
 12560
	__MM_HEAP_MARK;
sl@0
 12561
sl@0
 12562
	iTestResult = EFail;
sl@0
 12563
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12564
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12565
sl@0
 12566
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 12567
	CleanupDeletePushL(sink);
sl@0
 12568
	TMediaId nullId;
sl@0
 12569
sl@0
 12570
	TFourCC fourCCCode = sink->SinkDataTypeCode(nullId);
sl@0
 12571
	if (fourCCCode == KMMFFourCCCodeNULL)
sl@0
 12572
		{
sl@0
 12573
		iTestResult = EPass;
sl@0
 12574
		}
sl@0
 12575
sl@0
 12576
	CleanupStack::PopAndDestroy(3);
sl@0
 12577
sl@0
 12578
	__MM_HEAP_MARKEND;
sl@0
 12579
	return iTestResult;
sl@0
 12580
	}
sl@0
 12581
sl@0
 12582
sl@0
 12583
sl@0
 12584
/**
sl@0
 12585
 *
sl@0
 12586
 * CTestStep_MMF_SRSSNK_U_0506
sl@0
 12587
 * Functional Test of URL Sink
sl@0
 12588
 *
sl@0
 12589
 *
sl@0
 12590
 * @xxxx
sl@0
 12591
 */
sl@0
 12592
CTestStep_MMF_SRSSNK_U_0506::CTestStep_MMF_SRSSNK_U_0506()
sl@0
 12593
	{
sl@0
 12594
	iTestStepName = _L("MM-MMF-SRSSNK-U-0506");
sl@0
 12595
	}
sl@0
 12596
sl@0
 12597
CTestStep_MMF_SRSSNK_U_0506::~CTestStep_MMF_SRSSNK_U_0506()
sl@0
 12598
	{
sl@0
 12599
	}
sl@0
 12600
sl@0
 12601
TVerdict CTestStep_MMF_SRSSNK_U_0506::DoTestStepL()
sl@0
 12602
	{
sl@0
 12603
	__MM_HEAP_MARK;
sl@0
 12604
sl@0
 12605
	iTestResult = EFail;
sl@0
 12606
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12607
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12608
sl@0
 12609
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 12610
	CleanupDeletePushL(sink);
sl@0
 12611
	TMediaId nullId;
sl@0
 12612
	TFourCC fourCCCode;
sl@0
 12613
sl@0
 12614
sl@0
 12615
	TInt returnValue = sink->SetSinkDataTypeCode(fourCCCode, nullId);
sl@0
 12616
	if (returnValue == KErrNotSupported)
sl@0
 12617
		{
sl@0
 12618
		iTestResult = EPass;
sl@0
 12619
		}
sl@0
 12620
sl@0
 12621
	CleanupStack::PopAndDestroy(3);
sl@0
 12622
sl@0
 12623
	__MM_HEAP_MARKEND;
sl@0
 12624
	return iTestResult;
sl@0
 12625
	}
sl@0
 12626
sl@0
 12627
sl@0
 12628
sl@0
 12629
/**
sl@0
 12630
 *
sl@0
 12631
 * CTestStep_MMF_SRSSNK_U_0507
sl@0
 12632
 * Functional Test of URL Sink
sl@0
 12633
 *
sl@0
 12634
 *
sl@0
 12635
 * @xxxx
sl@0
 12636
 */
sl@0
 12637
CTestStep_MMF_SRSSNK_U_0507::CTestStep_MMF_SRSSNK_U_0507()
sl@0
 12638
	{
sl@0
 12639
	iTestStepName = _L("MM-MMF-SRSSNK-U-0507");
sl@0
 12640
	}
sl@0
 12641
sl@0
 12642
CTestStep_MMF_SRSSNK_U_0507::~CTestStep_MMF_SRSSNK_U_0507()
sl@0
 12643
	{
sl@0
 12644
	}
sl@0
 12645
sl@0
 12646
TVerdict CTestStep_MMF_SRSSNK_U_0507::DoTestStepL()
sl@0
 12647
	{
sl@0
 12648
	__MM_HEAP_MARK;
sl@0
 12649
sl@0
 12650
	iTestResult = EFail;
sl@0
 12651
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12652
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12653
sl@0
 12654
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 12655
	CleanupDeletePushL(sink);
sl@0
 12656
	TMediaId nullId;
sl@0
 12657
sl@0
 12658
	TRAPD(err, sink->EmptyBufferL(NULL, NULL, nullId));
sl@0
 12659
	if (err == KErrNotSupported)
sl@0
 12660
		{
sl@0
 12661
		iTestResult = EPass;
sl@0
 12662
		}
sl@0
 12663
sl@0
 12664
	CleanupStack::PopAndDestroy(3);
sl@0
 12665
sl@0
 12666
	__MM_HEAP_MARKEND;
sl@0
 12667
	return iTestResult;
sl@0
 12668
	}
sl@0
 12669
sl@0
 12670
sl@0
 12671
sl@0
 12672
/**
sl@0
 12673
 *
sl@0
 12674
 * CTestStep_MMF_SRSSNK_U_0508
sl@0
 12675
 * Functional Test of URL Sink
sl@0
 12676
 *
sl@0
 12677
 *
sl@0
 12678
 * @xxxx
sl@0
 12679
 */
sl@0
 12680
CTestStep_MMF_SRSSNK_U_0508::CTestStep_MMF_SRSSNK_U_0508()
sl@0
 12681
	{
sl@0
 12682
	iTestStepName = _L("MM-MMF-SRSSNK-U-0508");
sl@0
 12683
	}
sl@0
 12684
sl@0
 12685
CTestStep_MMF_SRSSNK_U_0508::~CTestStep_MMF_SRSSNK_U_0508()
sl@0
 12686
	{
sl@0
 12687
	}
sl@0
 12688
sl@0
 12689
TVerdict CTestStep_MMF_SRSSNK_U_0508::DoTestStepL()
sl@0
 12690
	{
sl@0
 12691
	__MM_HEAP_MARK;
sl@0
 12692
sl@0
 12693
	iTestResult = EFail;
sl@0
 12694
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12695
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12696
sl@0
 12697
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 12698
	CleanupDeletePushL(sink);
sl@0
 12699
sl@0
 12700
	TRAPD(err, sink->BufferFilledL(NULL));
sl@0
 12701
	if (err == KErrNotSupported)
sl@0
 12702
		{
sl@0
 12703
		iTestResult = EPass;
sl@0
 12704
		}
sl@0
 12705
sl@0
 12706
	CleanupStack::PopAndDestroy(3);
sl@0
 12707
sl@0
 12708
	__MM_HEAP_MARKEND;
sl@0
 12709
	return iTestResult;
sl@0
 12710
	}
sl@0
 12711
sl@0
 12712
sl@0
 12713
sl@0
 12714
/**
sl@0
 12715
 *
sl@0
 12716
 * CTestStep_MMF_SRSSNK_U_0509
sl@0
 12717
 * Functional Test of URL Sink
sl@0
 12718
 *
sl@0
 12719
 *
sl@0
 12720
 * @xxxx
sl@0
 12721
 */
sl@0
 12722
CTestStep_MMF_SRSSNK_U_0509::CTestStep_MMF_SRSSNK_U_0509()
sl@0
 12723
	{
sl@0
 12724
	iTestStepName = _L("MM-MMF-SRSSNK-U-0509");
sl@0
 12725
	}
sl@0
 12726
sl@0
 12727
CTestStep_MMF_SRSSNK_U_0509::~CTestStep_MMF_SRSSNK_U_0509()
sl@0
 12728
	{
sl@0
 12729
	}
sl@0
 12730
sl@0
 12731
TVerdict CTestStep_MMF_SRSSNK_U_0509::DoTestStepL()
sl@0
 12732
	{
sl@0
 12733
	__MM_HEAP_MARK;
sl@0
 12734
sl@0
 12735
	iTestResult = EFail;
sl@0
 12736
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12737
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12738
sl@0
 12739
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 12740
	CleanupDeletePushL(sink);
sl@0
 12741
sl@0
 12742
	TBool canCreate = sink->CanCreateSinkBuffer();
sl@0
 12743
	if (canCreate == EFalse)
sl@0
 12744
		{
sl@0
 12745
		iTestResult = EPass;
sl@0
 12746
		}
sl@0
 12747
sl@0
 12748
	CleanupStack::PopAndDestroy(3);
sl@0
 12749
sl@0
 12750
	__MM_HEAP_MARKEND;
sl@0
 12751
	return iTestResult;
sl@0
 12752
	}
sl@0
 12753
sl@0
 12754
sl@0
 12755
sl@0
 12756
/**
sl@0
 12757
 *
sl@0
 12758
 * CTestStep_MMF_SRSSNK_U_0510
sl@0
 12759
 * Functional Test of URL Sink
sl@0
 12760
 *
sl@0
 12761
 *
sl@0
 12762
 * @xxxx
sl@0
 12763
 */
sl@0
 12764
CTestStep_MMF_SRSSNK_U_0510::CTestStep_MMF_SRSSNK_U_0510()
sl@0
 12765
	{
sl@0
 12766
	iTestStepName = _L("MM-MMF-SRSSNK-U-0510");
sl@0
 12767
	}
sl@0
 12768
sl@0
 12769
CTestStep_MMF_SRSSNK_U_0510::~CTestStep_MMF_SRSSNK_U_0510()
sl@0
 12770
	{
sl@0
 12771
	}
sl@0
 12772
sl@0
 12773
TVerdict CTestStep_MMF_SRSSNK_U_0510::DoTestStepL()
sl@0
 12774
	{
sl@0
 12775
	__MM_HEAP_MARK;
sl@0
 12776
sl@0
 12777
	iTestResult = EFail;
sl@0
 12778
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12779
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12780
sl@0
 12781
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 12782
	CleanupDeletePushL(sink);
sl@0
 12783
	TMediaId nullId;
sl@0
 12784
	TBool reference;
sl@0
 12785
sl@0
 12786
	TRAPD(err, sink->CreateSinkBufferL(nullId, reference));	// EABI warning removal
sl@0
 12787
	if (err == KErrNotSupported)
sl@0
 12788
		{
sl@0
 12789
		iTestResult = EPass;
sl@0
 12790
		}
sl@0
 12791
sl@0
 12792
	CleanupStack::PopAndDestroy(3);
sl@0
 12793
sl@0
 12794
	__MM_HEAP_MARKEND;
sl@0
 12795
	return iTestResult;
sl@0
 12796
	}
sl@0
 12797
sl@0
 12798
sl@0
 12799
sl@0
 12800
/**
sl@0
 12801
 *
sl@0
 12802
 * CTestStep_MMF_SRSSNK_U_0511
sl@0
 12803
 * Functional Test of URL Sink
sl@0
 12804
 *
sl@0
 12805
 *
sl@0
 12806
 * @xxxx
sl@0
 12807
 */
sl@0
 12808
CTestStep_MMF_SRSSNK_U_0511::CTestStep_MMF_SRSSNK_U_0511()
sl@0
 12809
	{
sl@0
 12810
	iTestStepName = _L("MM-MMF-SRSSNK-U-0511");
sl@0
 12811
	}
sl@0
 12812
sl@0
 12813
CTestStep_MMF_SRSSNK_U_0511::~CTestStep_MMF_SRSSNK_U_0511()
sl@0
 12814
	{
sl@0
 12815
	}
sl@0
 12816
sl@0
 12817
TVerdict CTestStep_MMF_SRSSNK_U_0511::DoTestStepL()
sl@0
 12818
	{
sl@0
 12819
	__MM_HEAP_MARK;
sl@0
 12820
sl@0
 12821
	iTestResult = EFail;
sl@0
 12822
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12823
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12824
sl@0
 12825
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 12826
	CleanupDeletePushL(sink);
sl@0
 12827
sl@0
 12828
	MAsyncEventHandler* s = NULL;
sl@0
 12829
	TInt returnValue = sink->SinkThreadLogon(*s);
sl@0
 12830
	if (returnValue == KErrNotSupported)
sl@0
 12831
		{
sl@0
 12832
		iTestResult = EPass;
sl@0
 12833
		}
sl@0
 12834
sl@0
 12835
	CleanupStack::PopAndDestroy(3);
sl@0
 12836
sl@0
 12837
	__MM_HEAP_MARKEND;
sl@0
 12838
	return iTestResult;
sl@0
 12839
	}
sl@0
 12840
sl@0
 12841
sl@0
 12842
sl@0
 12843
/**
sl@0
 12844
 *
sl@0
 12845
 * CTestStep_MMF_SRSSNK_U_0512
sl@0
 12846
 * Functional Test of URL Sink
sl@0
 12847
 *
sl@0
 12848
 *
sl@0
 12849
 * @xxxx
sl@0
 12850
 */
sl@0
 12851
CTestStep_MMF_SRSSNK_U_0512::CTestStep_MMF_SRSSNK_U_0512()
sl@0
 12852
	{
sl@0
 12853
	iTestStepName = _L("MM-MMF-SRSSNK-U-0512");
sl@0
 12854
	}
sl@0
 12855
sl@0
 12856
CTestStep_MMF_SRSSNK_U_0512::~CTestStep_MMF_SRSSNK_U_0512()
sl@0
 12857
	{
sl@0
 12858
	}
sl@0
 12859
sl@0
 12860
TVerdict CTestStep_MMF_SRSSNK_U_0512::DoTestStepL()
sl@0
 12861
	{
sl@0
 12862
	__MM_HEAP_MARK;
sl@0
 12863
sl@0
 12864
	iTestResult = EFail;
sl@0
 12865
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12866
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12867
sl@0
 12868
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 12869
	CleanupDeletePushL(sink);
sl@0
 12870
sl@0
 12871
	TRAPD(err, sink->SinkThreadLogoff());
sl@0
 12872
	if (err == KErrNone)
sl@0
 12873
		{
sl@0
 12874
		iTestResult = EPass;
sl@0
 12875
		}
sl@0
 12876
sl@0
 12877
	CleanupStack::PopAndDestroy(3);
sl@0
 12878
sl@0
 12879
sl@0
 12880
	__MM_HEAP_MARKEND;
sl@0
 12881
	return iTestResult;
sl@0
 12882
	}
sl@0
 12883
sl@0
 12884
sl@0
 12885
sl@0
 12886
/**
sl@0
 12887
 *
sl@0
 12888
 * CTestStep_MMF_SRSSNK_U_0513
sl@0
 12889
 * Functional Test of URL Sink
sl@0
 12890
 *
sl@0
 12891
 *
sl@0
 12892
 * @xxxx
sl@0
 12893
 */
sl@0
 12894
CTestStep_MMF_SRSSNK_U_0513::CTestStep_MMF_SRSSNK_U_0513()
sl@0
 12895
	{
sl@0
 12896
	iTestStepName = _L("MM-MMF-SRSSNK-U-0513");
sl@0
 12897
	}
sl@0
 12898
sl@0
 12899
CTestStep_MMF_SRSSNK_U_0513::~CTestStep_MMF_SRSSNK_U_0513()
sl@0
 12900
	{
sl@0
 12901
	}
sl@0
 12902
sl@0
 12903
TVerdict CTestStep_MMF_SRSSNK_U_0513::DoTestStepL()
sl@0
 12904
	{
sl@0
 12905
	__MM_HEAP_MARK;
sl@0
 12906
sl@0
 12907
	iTestResult = EFail;
sl@0
 12908
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12909
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12910
sl@0
 12911
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 12912
	CleanupDeletePushL(sink);
sl@0
 12913
sl@0
 12914
	CMMFUrlSource* source = STATIC_CAST(CMMFUrlSource*, MDataSource::NewSourceL(KUidMmfUrlSource, urlCfgBuffer->Ptr(0)));
sl@0
 12915
	CleanupDeletePushL(source);
sl@0
 12916
sl@0
 12917
	TRAPD(err, sink->NegotiateL(*source));
sl@0
 12918
	if (err == KErrNotSupported)
sl@0
 12919
		{
sl@0
 12920
		iTestResult = EPass;
sl@0
 12921
		}
sl@0
 12922
sl@0
 12923
	CleanupStack::PopAndDestroy(4);
sl@0
 12924
sl@0
 12925
sl@0
 12926
	__MM_HEAP_MARKEND;
sl@0
 12927
	return iTestResult;
sl@0
 12928
	}
sl@0
 12929
sl@0
 12930
sl@0
 12931
sl@0
 12932
/**
sl@0
 12933
 *
sl@0
 12934
 * CTestStep_MMF_SRSSNK_U_0514
sl@0
 12935
 * Functional Test of URL Sink
sl@0
 12936
 *
sl@0
 12937
 *
sl@0
 12938
 * @xxxx
sl@0
 12939
 */
sl@0
 12940
CTestStep_MMF_SRSSNK_U_0514::CTestStep_MMF_SRSSNK_U_0514()
sl@0
 12941
	{
sl@0
 12942
	iTestStepName = _L("MM-MMF-SRSSNK-U-0514");
sl@0
 12943
	}
sl@0
 12944
sl@0
 12945
CTestStep_MMF_SRSSNK_U_0514::~CTestStep_MMF_SRSSNK_U_0514()
sl@0
 12946
	{
sl@0
 12947
	}
sl@0
 12948
sl@0
 12949
TVerdict CTestStep_MMF_SRSSNK_U_0514::DoTestStepL()
sl@0
 12950
	{
sl@0
 12951
	__MM_HEAP_MARK;
sl@0
 12952
sl@0
 12953
	iTestResult = EFail;
sl@0
 12954
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12955
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12956
sl@0
 12957
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 12958
	CleanupDeletePushL(sink);
sl@0
 12959
sl@0
 12960
	TRAPD(err, sink->SinkPrimeL());
sl@0
 12961
	if (err == KErrNotSupported)
sl@0
 12962
		{
sl@0
 12963
		iTestResult = EPass;
sl@0
 12964
		}
sl@0
 12965
sl@0
 12966
	CleanupStack::PopAndDestroy(3);
sl@0
 12967
sl@0
 12968
	__MM_HEAP_MARKEND;
sl@0
 12969
	return iTestResult;
sl@0
 12970
	}
sl@0
 12971
sl@0
 12972
sl@0
 12973
sl@0
 12974
/**
sl@0
 12975
 *
sl@0
 12976
 * CTestStep_MMF_SRSSNK_U_0515
sl@0
 12977
 * Functional Test of URL Sink
sl@0
 12978
 *
sl@0
 12979
 *
sl@0
 12980
 * @xxxx
sl@0
 12981
 */
sl@0
 12982
CTestStep_MMF_SRSSNK_U_0515::CTestStep_MMF_SRSSNK_U_0515()
sl@0
 12983
	{
sl@0
 12984
	iTestStepName = _L("MM-MMF-SRSSNK-U-0515");
sl@0
 12985
	}
sl@0
 12986
sl@0
 12987
CTestStep_MMF_SRSSNK_U_0515::~CTestStep_MMF_SRSSNK_U_0515()
sl@0
 12988
	{
sl@0
 12989
	}
sl@0
 12990
sl@0
 12991
TVerdict CTestStep_MMF_SRSSNK_U_0515::DoTestStepL()
sl@0
 12992
	{
sl@0
 12993
	__MM_HEAP_MARK;
sl@0
 12994
sl@0
 12995
	iTestResult = EFail;
sl@0
 12996
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 12997
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 12998
sl@0
 12999
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 13000
	CleanupDeletePushL(sink);
sl@0
 13001
sl@0
 13002
	TRAPD(err, sink->SinkPlayL());
sl@0
 13003
	if (err == KErrNotSupported)
sl@0
 13004
		{
sl@0
 13005
		iTestResult = EPass;
sl@0
 13006
		}
sl@0
 13007
sl@0
 13008
	CleanupStack::PopAndDestroy(3);
sl@0
 13009
sl@0
 13010
	__MM_HEAP_MARKEND;
sl@0
 13011
	return iTestResult;
sl@0
 13012
	}
sl@0
 13013
sl@0
 13014
sl@0
 13015
sl@0
 13016
/**
sl@0
 13017
 *
sl@0
 13018
 * CTestStep_MMF_SRSSNK_U_0516
sl@0
 13019
 * Functional Test of URL Sink
sl@0
 13020
 *
sl@0
 13021
 *
sl@0
 13022
 * @xxxx
sl@0
 13023
 */
sl@0
 13024
CTestStep_MMF_SRSSNK_U_0516::CTestStep_MMF_SRSSNK_U_0516()
sl@0
 13025
	{
sl@0
 13026
	iTestStepName = _L("MM-MMF-SRSSNK-U-0516");
sl@0
 13027
	}
sl@0
 13028
sl@0
 13029
CTestStep_MMF_SRSSNK_U_0516::~CTestStep_MMF_SRSSNK_U_0516()
sl@0
 13030
	{
sl@0
 13031
	}
sl@0
 13032
sl@0
 13033
TVerdict CTestStep_MMF_SRSSNK_U_0516::DoTestStepL()
sl@0
 13034
	{
sl@0
 13035
	__MM_HEAP_MARK;
sl@0
 13036
sl@0
 13037
	iTestResult = EFail;
sl@0
 13038
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 13039
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 13040
sl@0
 13041
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 13042
	CleanupDeletePushL(sink);
sl@0
 13043
sl@0
 13044
	TRAPD(err, sink->SinkPauseL());
sl@0
 13045
	if (err == KErrNotSupported)
sl@0
 13046
		{
sl@0
 13047
		iTestResult = EPass;
sl@0
 13048
		}
sl@0
 13049
sl@0
 13050
	CleanupStack::PopAndDestroy(3);
sl@0
 13051
sl@0
 13052
	__MM_HEAP_MARKEND;
sl@0
 13053
	return iTestResult;
sl@0
 13054
	}
sl@0
 13055
sl@0
 13056
sl@0
 13057
sl@0
 13058
/**
sl@0
 13059
 *
sl@0
 13060
 * CTestStep_MMF_SRSSNK_U_0517
sl@0
 13061
 * Functional Test of URL Sink
sl@0
 13062
 *
sl@0
 13063
 *
sl@0
 13064
 * @xxxx
sl@0
 13065
 */
sl@0
 13066
CTestStep_MMF_SRSSNK_U_0517::CTestStep_MMF_SRSSNK_U_0517()
sl@0
 13067
	{
sl@0
 13068
	iTestStepName = _L("MM-MMF-SRSSNK-U-0517");
sl@0
 13069
	}
sl@0
 13070
sl@0
 13071
CTestStep_MMF_SRSSNK_U_0517::~CTestStep_MMF_SRSSNK_U_0517()
sl@0
 13072
	{
sl@0
 13073
	}
sl@0
 13074
sl@0
 13075
TVerdict CTestStep_MMF_SRSSNK_U_0517::DoTestStepL()
sl@0
 13076
	{
sl@0
 13077
	__MM_HEAP_MARK;
sl@0
 13078
sl@0
 13079
	iTestResult = EFail;
sl@0
 13080
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 13081
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 13082
sl@0
 13083
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 13084
	CleanupDeletePushL(sink);
sl@0
 13085
sl@0
 13086
	TRAPD(err, sink->SinkStopL());
sl@0
 13087
	if (err == KErrNotSupported)
sl@0
 13088
		{
sl@0
 13089
		iTestResult = EPass;
sl@0
 13090
		}
sl@0
 13091
sl@0
 13092
	CleanupStack::PopAndDestroy(3);
sl@0
 13093
sl@0
 13094
	__MM_HEAP_MARKEND;
sl@0
 13095
	return iTestResult;
sl@0
 13096
	}
sl@0
 13097
sl@0
 13098
sl@0
 13099
sl@0
 13100
/**
sl@0
 13101
 *
sl@0
 13102
 * CTestStep_MMF_SRSSNK_U_0518
sl@0
 13103
 * Functional Test of URL Sink
sl@0
 13104
 *
sl@0
 13105
 *
sl@0
 13106
 * @xxxx
sl@0
 13107
 */
sl@0
 13108
CTestStep_MMF_SRSSNK_U_0518::CTestStep_MMF_SRSSNK_U_0518()
sl@0
 13109
	{
sl@0
 13110
	iTestStepName = _L("MM-MMF-SRSSNK-U-0518");
sl@0
 13111
	}
sl@0
 13112
sl@0
 13113
CTestStep_MMF_SRSSNK_U_0518::~CTestStep_MMF_SRSSNK_U_0518()
sl@0
 13114
	{
sl@0
 13115
	}
sl@0
 13116
sl@0
 13117
TVerdict CTestStep_MMF_SRSSNK_U_0518::DoTestStepL()
sl@0
 13118
	{
sl@0
 13119
	__MM_HEAP_MARK;
sl@0
 13120
sl@0
 13121
	iTestResult = EFail;
sl@0
 13122
	CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(KTestURLMpg, 1);
sl@0
 13123
	CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
sl@0
 13124
sl@0
 13125
	CMMFUrlSink* sink = STATIC_CAST(CMMFUrlSink*, MDataSink::NewSinkL(KUidMmfUrlSink, urlCfgBuffer->Ptr(0)));
sl@0
 13126
	CleanupDeletePushL(sink);
sl@0
 13127
	TMMFPrioritySettings settings;
sl@0
 13128
sl@0
 13129
	TRAPD(err, sink->SetSinkPrioritySettings(settings));
sl@0
 13130
	if (err == KErrNone)
sl@0
 13131
		{
sl@0
 13132
		iTestResult = EPass;
sl@0
 13133
		}
sl@0
 13134
sl@0
 13135
	CleanupStack::PopAndDestroy(3);
sl@0
 13136
sl@0
 13137
	__MM_HEAP_MARKEND;
sl@0
 13138
	return iTestResult;
sl@0
 13139
	}
sl@0
 13140
sl@0
 13141
sl@0
 13142
sl@0
 13143
/**
sl@0
 13144
 *
sl@0
 13145
 * CTestStep_MMF_SRSSNK_U_0519
sl@0
 13146
 * Functional Test of URL Sink
sl@0
 13147
 *
sl@0
 13148
 *
sl@0
 13149
 * @xxxx
sl@0
 13150
 */
sl@0
 13151
CTestStep_MMF_SRSSNK_U_0519::CTestStep_MMF_SRSSNK_U_0519()
sl@0
 13152
	{
sl@0
 13153
	iTestStepName = _L("MM-MMF-SRSSNK-U-0519");
sl@0
 13154
	}
sl@0
 13155
sl@0
 13156
CTestStep_MMF_SRSSNK_U_0519::~CTestStep_MMF_SRSSNK_U_0519()
sl@0
 13157
	{
sl@0
 13158
	}
sl@0
 13159
sl@0
 13160
TVerdict CTestStep_MMF_SRSSNK_U_0519::DoTestStepL()
sl@0
 13161
	{
sl@0
 13162
	__MM_HEAP_MARK;
sl@0
 13163
sl@0
 13164
	iTestResult = EFail;
sl@0
 13165
	// Initialise config data.
sl@0
 13166
	TMMFFileConfig configDes;
sl@0
 13167
	configDes().iPath = KTest101FileName;
sl@0
 13168
sl@0
 13169
	TUid testControllerUid = { KMmfTestControllerUid };
sl@0
 13170
	RMMFController dummyController;
sl@0
 13171
	TMMFPrioritySettings prioritySettings;
sl@0
 13172
	TMMFMessageDestinationPckg destination;
sl@0
 13173
	User::LeaveIfError(dummyController.Open(testControllerUid, prioritySettings));
sl@0
 13174
	CleanupClosePushL(dummyController);
sl@0
 13175
sl@0
 13176
	TBuf8<1> dummyArgs;
sl@0
 13177
	User::LeaveIfError(dummyController.AddDataSink(KUidMmfUrlSink, configDes));
sl@0
 13178
	TInt err = dummyController.CustomCommandSync(destination, KDescriptorSink, dummyArgs, dummyArgs);
sl@0
 13179
sl@0
 13180
	if (err != KErrNotSupported)
sl@0
 13181
		{
sl@0
 13182
		INFO_PRINTF2(_L("File source SourceCustomCommand: Expecting KErrNotSupported, Error: %d"), err);
sl@0
 13183
		}
sl@0
 13184
	else
sl@0
 13185
		{
sl@0
 13186
		iTestResult = EPass;
sl@0
 13187
		}
sl@0
 13188
sl@0
 13189
	CleanupStack::PopAndDestroy(); // dummyController
sl@0
 13190
sl@0
 13191
	__MM_HEAP_MARKEND;
sl@0
 13192
	return iTestResult;
sl@0
 13193
	}
sl@0
 13194
sl@0
 13195
/**
sl@0
 13196
 *
sl@0
 13197
 * CTestStep_MMF_SRSSNK_MultipleStop constructor
sl@0
 13198
 *
sl@0
 13199
 * @xxxx
sl@0
 13200
 *
sl@0
 13201
 */
sl@0
 13202
CTestStep_MMF_SRSSNK_MultipleStop::CTestStep_MMF_SRSSNK_MultipleStop()
sl@0
 13203
	{
sl@0
 13204
	// store the name of this test case
sl@0
 13205
	// this is the name that is used by the script file
sl@0
 13206
	// Each test step initialises it's own name
sl@0
 13207
	iSourceType = ESourceTypeFile;
sl@0
 13208
	iTestStepName = _L("MM-MMF-SRSSNK-U-0520");
sl@0
 13209
	}
sl@0
 13210
sl@0
 13211
/**
sl@0
 13212
 *
sl@0
 13213
 * CTestStep_MMF_SRSSNK_MultipleStop destructor
sl@0
 13214
 *
sl@0
 13215
 * @xxxx
sl@0
 13216
 *
sl@0
 13217
 */
sl@0
 13218
CTestStep_MMF_SRSSNK_MultipleStop::~CTestStep_MMF_SRSSNK_MultipleStop()
sl@0
 13219
	{
sl@0
 13220
	}
sl@0
 13221
sl@0
 13222
/**
sl@0
 13223
 *
sl@0
 13224
 * CTestStep_MMF_SRSSNK_MultipleStop
sl@0
 13225
 *
sl@0
 13226
 * Functional test of file source.
sl@0
 13227
 * Misc. functions test.
sl@0
 13228
 *
sl@0
 13229
 * @xxxx
sl@0
 13230
 */
sl@0
 13231
TVerdict CTestStep_MMF_SRSSNK_MultipleStop::DoTestStepL()
sl@0
 13232
	{
sl@0
 13233
	__MM_HEAP_MARK;
sl@0
 13234
sl@0
 13235
	// Initialise config data.
sl@0
 13236
	TMMFFileConfig configFile;
sl@0
 13237
	configFile().iPath = KTest101FileName;
sl@0
 13238
sl@0
 13239
	TInt fileSize;
sl@0
 13240
	OpenFileL(KTest101FileName, EFileRead);
sl@0
 13241
	User::LeaveIfError(iFile.Size(fileSize));
sl@0
 13242
	CloseFile();
sl@0
 13243
	User::LeaveIfError(iFs.Connect());
sl@0
 13244
	CleanupClosePushL(iFs);
sl@0
 13245
sl@0
 13246
	// Create source.
sl@0
 13247
	MDataSource* source = CreateFileSourceL(iSourceType, iFs, KTest101FileName);
sl@0
 13248
	CleanupDeletePushL(source);
sl@0
 13249
sl@0
 13250
	source->SourcePrimeL();
sl@0
 13251
	source->SourcePlayL();
sl@0
 13252
	source->SourcePauseL();
sl@0
 13253
sl@0
 13254
	// call stop twice make sure no leaves occur
sl@0
 13255
	source->SourceStopL();
sl@0
 13256
	source->SourceStopL();
sl@0
 13257
sl@0
 13258
	CleanupStack::PopAndDestroy(2, &iFs); // iFs, source
sl@0
 13259
sl@0
 13260
	__MM_HEAP_MARKEND;
sl@0
 13261
	return iTestResult;
sl@0
 13262
	}
sl@0
 13263
sl@0
 13264
sl@0
 13265
/**
sl@0
 13266
 *
sl@0
 13267
 * CTestStep_MMF_SRSSNK_U_0600 constructor
sl@0
 13268
 *
sl@0
 13269
 * @xxxx
sl@0
 13270
 *
sl@0
 13271
 */
sl@0
 13272
CTestStep_MMF_SRSSNK_U_0600::CTestStep_MMF_SRSSNK_U_0600()
sl@0
 13273
	{
sl@0
 13274
	iTestStepName = _L("MM-MMF-SRSSNK-U-0600");
sl@0
 13275
	}
sl@0
 13276
sl@0
 13277
/**
sl@0
 13278
 *
sl@0
 13279
 * CTestStep_MMF_SRSSNK_U_0600 destructor
sl@0
 13280
 *
sl@0
 13281
 * @xxxx
sl@0
 13282
 *
sl@0
 13283
 */
sl@0
 13284
CTestStep_MMF_SRSSNK_U_0600::~CTestStep_MMF_SRSSNK_U_0600()
sl@0
 13285
	{
sl@0
 13286
	}
sl@0
 13287
sl@0
 13288
/**
sl@0
 13289
 *
sl@0
 13290
 * CTestStep_MMF_SRSSNK_U_0600
sl@0
 13291
 *
sl@0
 13292
 * CMMFFile::iFilePath and iFileDrive should be initialised for KMMFileHandleSourceUid
sl@0
 13293
 * and KFileHandleUid
sl@0
 13294
 *
sl@0
 13295
 * @xxxx
sl@0
 13296
 */
sl@0
 13297
TVerdict CTestStep_MMF_SRSSNK_U_0600::DoTestStepL()
sl@0
 13298
	{
sl@0
 13299
	__MM_HEAP_MARK;
sl@0
 13300
sl@0
 13301
	_LIT(KTestFileDrive, "C:");
sl@0
 13302
	_LIT(KTestFilePath, "\\mm\\mmf\\testfiles\\srssnk\\");
sl@0
 13303
sl@0
 13304
	TFileName testFileName(KTest101FileName);
sl@0
 13305
	RFs testFsSession;
sl@0
 13306
	User::LeaveIfError(testFsSession.Connect());
sl@0
 13307
	CleanupClosePushL(testFsSession);
sl@0
 13308
sl@0
 13309
	// Create a file source (KFileHandleUid)
sl@0
 13310
	CMMFFile* source = static_cast<CMMFFile*>(CreateFileSourceL(ESourceTypeFileHandle, testFsSession, testFileName));
sl@0
 13311
	CleanupStack::PushL(source);
sl@0
 13312
sl@0
 13313
	//Check that its FilePath & FileDrive have been populated
sl@0
 13314
	if ((source->FilePath() != KTestFilePath) || (source->FileDrive() != KTestFileDrive))
sl@0
 13315
		{
sl@0
 13316
		iTestResult = EFail;
sl@0
 13317
		INFO_PRINTF3(_L("Test failed for KFileHandleUid. Path=%S, Drive=%S"), &source->FilePath(), &source->FileDrive());
sl@0
 13318
		}
sl@0
 13319
sl@0
 13320
	CleanupStack::PopAndDestroy(source);
sl@0
 13321
sl@0
 13322
	// Create a file handle source (KMMFileHandleSourceUid)
sl@0
 13323
	source = static_cast<CMMFFile*>(CreateFileHandleSourceL(testFsSession, testFileName));
sl@0
 13324
	CleanupStack::PushL(source);
sl@0
 13325
sl@0
 13326
	//Check that its FilePath & FileDrive have been populated
sl@0
 13327
	if ((source->FilePath() != KTestFilePath) || (source->FileDrive() != KTestFileDrive))
sl@0
 13328
		{
sl@0
 13329
		iTestResult = EFail;
sl@0
 13330
		INFO_PRINTF3(_L("Test failed for KMMFileHandleSourceUid. Path=%S, Drive=%S"), &source->FilePath(), &source->FileDrive());
sl@0
 13331
		}
sl@0
 13332
sl@0
 13333
	CleanupStack::PopAndDestroy(2, &testFsSession); // testFsSession, source
sl@0
 13334
sl@0
 13335
	__MM_HEAP_MARKEND;
sl@0
 13336
	return iTestResult;
sl@0
 13337
	}
sl@0
 13338
sl@0
 13339
sl@0
 13340
sl@0
 13341
/**
sl@0
 13342
 *
sl@0
 13343
 * CTestStep_MMF_SRSSNK_U_0521 constructor
sl@0
 13344
 *
sl@0
 13345
 * @xxxx
sl@0
 13346
 *
sl@0
 13347
 */
sl@0
 13348
CTestStep_MMF_SRSSNK_U_0521::CTestStep_MMF_SRSSNK_U_0521()
sl@0
 13349
	{
sl@0
 13350
	iTestStepName = _L("MM-MMF-SRSSNK-U-0521");
sl@0
 13351
	}
sl@0
 13352
sl@0
 13353
/**
sl@0
 13354
 *
sl@0
 13355
 * CTestStep_MMF_SRSSNK_U_0521 destructor
sl@0
 13356
 *
sl@0
 13357
 * @xxxx
sl@0
 13358
 *
sl@0
 13359
 */
sl@0
 13360
CTestStep_MMF_SRSSNK_U_0521::~CTestStep_MMF_SRSSNK_U_0521()
sl@0
 13361
	{
sl@0
 13362
	}
sl@0
 13363
sl@0
 13364
/**
sl@0
 13365
 *
sl@0
 13366
 * CTestStep_MMF_SRSSNK_U_0521
sl@0
 13367
 *
sl@0
 13368
 * CR0854 - Provide access to the file data via the CData object
sl@0
 13369
 * @xxxx
sl@0
 13370
 */
sl@0
 13371
TVerdict CTestStep_MMF_SRSSNK_U_0521::DoTestStepL()
sl@0
 13372
	{
sl@0
 13373
	__MM_HEAP_MARK;
sl@0
 13374
sl@0
 13375
	TFileName testFileName(KTest101FileName);
sl@0
 13376
	RFs testFsSession;
sl@0
 13377
	User::LeaveIfError(testFsSession.Connect());
sl@0
 13378
	CleanupClosePushL(testFsSession);
sl@0
 13379
sl@0
 13380
	// Create a file source (KFileHandleUid)
sl@0
 13381
	CMMFFile* source = static_cast<CMMFFile*>(CreateFileSourceL(ESourceTypeFileHandle, testFsSession, testFileName));
sl@0
 13382
	CleanupStack::PushL(source);
sl@0
 13383
	source->SourcePrimeL();
sl@0
 13384
	CData *data = NULL;
sl@0
 13385
sl@0
 13386
	TInt err = source->Data(data);
sl@0
 13387
sl@0
 13388
	if (err != KErrNone)
sl@0
 13389
		{
sl@0
 13390
		iTestResult = EFail;
sl@0
 13391
		INFO_PRINTF2(_L("Test failed err =%d"), err);
sl@0
 13392
		}
sl@0
 13393
	else
sl@0
 13394
		{
sl@0
 13395
		iTestResult = EPass;
sl@0
 13396
		TInt value = 0;
sl@0
 13397
		err = data->GetAttribute(EIsProtected, value);
sl@0
 13398
		if (err != KErrNone || value)
sl@0
 13399
			{
sl@0
 13400
			INFO_PRINTF3(_L("Test failed err =%d value = %d"), err, value);
sl@0
 13401
			iTestResult = EFail;
sl@0
 13402
			}
sl@0
 13403
		}
sl@0
 13404
sl@0
 13405
	CleanupStack::PopAndDestroy(2,&testFsSession); // source, testFsSession
sl@0
 13406
sl@0
 13407
	__MM_HEAP_MARKEND;
sl@0
 13408
	return iTestResult;
sl@0
 13409
	}
sl@0
 13410
sl@0
 13411
/**
sl@0
 13412
 *
sl@0
 13413
 * CTestStep_MMF_SRSSNK_U_0522 constructor
sl@0
 13414
 *
sl@0
 13415
 * @xxxx
sl@0
 13416
 *
sl@0
 13417
 */
sl@0
 13418
CTestStep_MMF_SRSSNK_U_0522::CTestStep_MMF_SRSSNK_U_0522()
sl@0
 13419
	{
sl@0
 13420
	// store the name of this test case
sl@0
 13421
	// this is the name that is used by the script file
sl@0
 13422
	// Each test step initialises it's own name
sl@0
 13423
	iTestStepName = _L("MM-MMF-SRSSNK-U-0522");
sl@0
 13424
	}
sl@0
 13425
sl@0
 13426
/**
sl@0
 13427
 *
sl@0
 13428
 * CTestStep_MMF_SRSSNK_U_0522 destructor
sl@0
 13429
 *
sl@0
 13430
 * @xxxx
sl@0
 13431
 *
sl@0
 13432
 */
sl@0
 13433
CTestStep_MMF_SRSSNK_U_0522::~CTestStep_MMF_SRSSNK_U_0522()
sl@0
 13434
	{
sl@0
 13435
	}
sl@0
 13436
sl@0
 13437
/**
sl@0
 13438
 *
sl@0
 13439
 * CTestStep_MMF_SRSSNK_U_0522
sl@0
 13440
 *
sl@0
 13441
 * CR0854 - Provide access to the file data via the CData object
sl@0
 13442
 *
sl@0
 13443
 * @xxxx
sl@0
 13444
 */
sl@0
 13445
sl@0
 13446
TVerdict CTestStep_MMF_SRSSNK_U_0522::DoTestStepL()
sl@0
 13447
	{
sl@0
 13448
	__MM_HEAP_MARK;
sl@0
 13449
sl@0
 13450
	RFs testFsSession;
sl@0
 13451
	User::LeaveIfError(testFsSession.Connect()) ;
sl@0
 13452
	CleanupClosePushL(testFsSession);
sl@0
 13453
sl@0
 13454
	TFileName testFileName(KTest103FileName);
sl@0
 13455
	CMMFFile* sink = static_cast<CMMFFile*>(CreateFileSinkL(ESinkTypeFile, testFsSession, testFileName));
sl@0
 13456
	CleanupStack::PushL(sink);
sl@0
 13457
sl@0
 13458
	// Test that the file has been opened correctly.
sl@0
 13459
	sink->SinkPrimeL();
sl@0
 13460
	CData *data = NULL;
sl@0
 13461
	TInt err = sink->Data(data);
sl@0
 13462
sl@0
 13463
	if(err != KErrNotSupported )
sl@0
 13464
		{
sl@0
 13465
		iTestResult = EFail;
sl@0
 13466
		INFO_PRINTF2(_L("Test failed err =%d"), err);
sl@0
 13467
		}
sl@0
 13468
	else
sl@0
 13469
		{
sl@0
 13470
		iTestResult = EPass;
sl@0
 13471
		}
sl@0
 13472
	CleanupStack::PopAndDestroy(2,&testFsSession);
sl@0
 13473
sl@0
 13474
	__MM_HEAP_MARKEND;
sl@0
 13475
	return iTestResult;
sl@0
 13476
	}
sl@0
 13477
sl@0
 13478
/**
sl@0
 13479
 *
sl@0
 13480
 * CTestStep_MMF_SRSSNK_U_0523 constructor
sl@0
 13481
 *
sl@0
 13482
 */
sl@0
 13483
CTestStep_MMF_SRSSNK_U_0523::CTestStep_MMF_SRSSNK_U_0523()
sl@0
 13484
	{
sl@0
 13485
	iTestStepName = _L("MM-MMF-SRSSNK-U-0523");
sl@0
 13486
	}
sl@0
 13487
sl@0
 13488
/**
sl@0
 13489
 *
sl@0
 13490
 * CTestStep_MMF_SRSSNK_U_0523 destructor
sl@0
 13491
 *
sl@0
 13492
 */
sl@0
 13493
CTestStep_MMF_SRSSNK_U_0523::~CTestStep_MMF_SRSSNK_U_0523()
sl@0
 13494
	{
sl@0
 13495
	}
sl@0
 13496
sl@0
 13497
/**
sl@0
 13498
 *
sl@0
 13499
 * CTestStep_MMF_SRSSNK_U_0523
sl@0
 13500
 *
sl@0
 13501
 * PDEF102849 - Invalid Remaining Space value obtained for E:\ (memory card)
sl@0
 13502
 *
sl@0
 13503
 */
sl@0
 13504
TVerdict CTestStep_MMF_SRSSNK_U_0523::DoTestStepL()
sl@0
 13505
	{
sl@0
 13506
	_LIT(KTestFileName, "E:\\unittest\\mmf\\srssnk\\MMFTestFile1.dat");
sl@0
 13507
sl@0
 13508
	__MM_HEAP_MARK;
sl@0
 13509
sl@0
 13510
	TInt64 freeSpace = 0;
sl@0
 13511
sl@0
 13512
	RFs fs;
sl@0
 13513
	User::LeaveIfError(fs.Connect()) ;
sl@0
 13514
	CleanupClosePushL(fs);
sl@0
 13515
sl@0
 13516
	// Create new e: drive to test fix if working on emulator
sl@0
 13517
#ifdef __WINS__
sl@0
 13518
sl@0
 13519
	_LIT(KSubstPath, "C:\\");
sl@0
 13520
sl@0
 13521
	if (fs.SetSubst(KSubstPath, EDriveE) != KErrNone)
sl@0
 13522
		{
sl@0
 13523
		CleanupStack::PopAndDestroy(); // fs;
sl@0
 13524
		__MM_HEAP_MARKEND;
sl@0
 13525
		return EFail;
sl@0
 13526
		}
sl@0
 13527
sl@0
 13528
#endif
sl@0
 13529
sl@0
 13530
	// Get the free space on the drive.
sl@0
 13531
	TFileName testFileName(KTestFileName);
sl@0
 13532
	TParsePtr parser(testFileName);
sl@0
 13533
	TDriveUnit drive(parser.Drive());
sl@0
 13534
	TVolumeInfo volInfo;
sl@0
 13535
sl@0
 13536
	if (fs.Volume(volInfo, drive) == KErrNone)
sl@0
 13537
		{
sl@0
 13538
		freeSpace = volInfo.iFree;
sl@0
 13539
		}
sl@0
 13540
sl@0
 13541
	// Initialise config data.
sl@0
 13542
	TMMFFileConfig configFile;
sl@0
 13543
	configFile().iPath = KTestFileName;
sl@0
 13544
sl@0
 13545
	CMMFFile* source = static_cast<CMMFFile*>(CreateFileSourceL(ESourceTypeFile, fs, KTestFileName));
sl@0
 13546
	CleanupStack::PushL(source);
sl@0
 13547
sl@0
 13548
	// do bytes free test
sl@0
 13549
	TClipBytesFreeTestStep testStep(source, freeSpace);
sl@0
 13550
	DoFileTest(testStep, _L("E: drive BytesFree"), KErrNone);
sl@0
 13551
sl@0
 13552
	CleanupStack::PopAndDestroy(2, &fs);
sl@0
 13553
sl@0
 13554
	__MM_HEAP_MARKEND;
sl@0
 13555
sl@0
 13556
	return iTestResult;
sl@0
 13557
	}
sl@0
 13558
sl@0
 13559
/**
sl@0
 13560
 *
sl@0
 13561
 * CTestStep_MMF_SRSSNK_U_0524 constructor
sl@0
 13562
 *
sl@0
 13563
 * @xxxx
sl@0
 13564
 *
sl@0
 13565
 */
sl@0
 13566
CTestStep_MMF_SRSSNK_U_0524::CTestStep_MMF_SRSSNK_U_0524()
sl@0
 13567
	{
sl@0
 13568
	// store the name of this test case
sl@0
 13569
	// this is the name that is used by the script file
sl@0
 13570
	// Each test step initialises it's own name
sl@0
 13571
	iTestStepName = _L("MM-MMF-SRSSNK-U-0524");
sl@0
 13572
	iIsAllocTest = EFalse;
sl@0
 13573
	}
sl@0
 13574
sl@0
 13575
/**
sl@0
 13576
 *
sl@0
 13577
 * CTestStep_MMF_SRSSNK_U_0524 destructor
sl@0
 13578
 *
sl@0
 13579
 * @xxxx
sl@0
 13580
 *
sl@0
 13581
 */
sl@0
 13582
CTestStep_MMF_SRSSNK_U_0524::~CTestStep_MMF_SRSSNK_U_0524()
sl@0
 13583
	{
sl@0
 13584
	}
sl@0
 13585
sl@0
 13586
/**
sl@0
 13587
 *
sl@0
 13588
 * CTestStep_MMF_SRSSNK_U_0524
sl@0
 13589
 *
sl@0
 13590
 * Test audio source misc. fns.
sl@0
 13591
 *
sl@0
 13592
 * @xxxx
sl@0
 13593
 */
sl@0
 13594
TVerdict CTestStep_MMF_SRSSNK_U_0524::DoTestStepL()
sl@0
 13595
	{
sl@0
 13596
	
sl@0
 13597
	const TInt KDevSoundMaxFrameSize = 0x4000;  //16K from SoundDeviceBody.h
sl@0
 13598
sl@0
 13599
	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
sl@0
 13600
	CleanupStack::PushL(scheduler);
sl@0
 13601
	CActiveScheduler::Install(scheduler);
sl@0
 13602
sl@0
 13603
	// Create a dummy sink.
sl@0
 13604
	CMMFDummySink* dummySink = new(ELeave) CMMFDummySink;
sl@0
 13605
	CleanupStack::PushL(dummySink);
sl@0
 13606
sl@0
 13607
	// Create an audio source.
sl@0
 13608
	TBuf8<1> configDes;
sl@0
 13609
	MDataSource* source = MDataSource::NewSourceL(KUidMmfAudioInput, configDes);
sl@0
 13610
	CleanupDeletePushL(source);
sl@0
 13611
sl@0
 13612
	TCreateSourceBuffer3TestStep testStep(ESourceTypeAudio, dummySink, KUidMmfDescriptorBuffer, ETrue, KDevSoundMaxFrameSize);
sl@0
 13613
	DoTestStep(testStep, _L("Audio source CreateSourceBuffer1"), KErrNone);
sl@0
 13614
	CleanupStack::PopAndDestroy(source);
sl@0
 13615
sl@0
 13616
	CleanupStack::PopAndDestroy(dummySink);
sl@0
 13617
	CleanupStack::PopAndDestroy(scheduler);
sl@0
 13618
sl@0
 13619
	return iTestResult;
sl@0
 13620
	}
sl@0
 13621
sl@0
 13622
TVerdict TCreateSourceBuffer3TestStep::DoTestStepL()
sl@0
 13623
	{
sl@0
 13624
	MDataSource* source = NULL;
sl@0
 13625
	
sl@0
 13626
	source = CreateSourceL(iSourceType, NULL);
sl@0
 13627
	
sl@0
 13628
	User::LeaveIfError(source->SourceThreadLogon(*this));
sl@0
 13629
sl@0
 13630
	source->SourcePrimeL();
sl@0
 13631
	TRAPD(err,source->NegotiateSourceL(*iSink));
sl@0
 13632
	
sl@0
 13633
	return (err == KErrNone ? EPass : EFail);
sl@0
 13634
	}
sl@0
 13635
	
sl@0
 13636
TInt TCreateSourceBuffer3TestStep::SendEventToClient(const TMMFEvent& aEvent)
sl@0
 13637
	{
sl@0
 13638
	if (aEvent.iErrorCode == KErrNoMemory)
sl@0
 13639
		{
sl@0
 13640
		CActiveScheduler::Stop();
sl@0
 13641
		}		
sl@0
 13642
	return KErrNone;
sl@0
 13643
	}