mmlibs/mmfw/tsrc/mmfunittest/aclnt/TSU_MMF_ACLNT_01/TestStepTonePlayDualToneInvalidFreq.cpp
author hgs
Thu, 07 Oct 2010 22:34:12 +0100
changeset 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk40
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
// All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
// Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
// Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
// Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
// CTestStepTonePlayDualToneInvalidFreq.cpp
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
// 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
// EPOC includes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
#include <e32base.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
#include <e32test.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
#include <e32keys.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
#include <c32comm.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
#include <f32file.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
#include <etel.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
#include <etelmm.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
#include <testframework.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
#include <mdaaudiotoneplayer.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
// Test system includes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
#include <testframework.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
// Specific includes for this test suite
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
#include "TestStepUnitMMFAudClient.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
#include "TestSuiteUnitMMFAudClient.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
// Specific includes for these test steps
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
#include "TestStepTone.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
#include "mmfclienttoneplayer.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
CTestStepTonePlayDualToneInvalidFreq* CTestStepTonePlayDualToneInvalidFreq::NewL(const TDesC& aName)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
	CTestStepTonePlayDualToneInvalidFreq* self = new(ELeave) CTestStepTonePlayDualToneInvalidFreq(aName);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
	return self;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
CTestStepTonePlayDualToneInvalidFreq::CTestStepTonePlayDualToneInvalidFreq(const TDesC& aName) : iPrepareError(KErrNone), iPlayError(KErrNone)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
	iTestStepName = aName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
	// need a bigger heap size on EKA2 HW
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
#if !defined __WINS__
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
	iHeapSize = KHeapSizeToneTestEKA2;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
#endif // EKA2
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
void CTestStepTonePlayDualToneInvalidFreq::MatoPrepareComplete(TInt aError)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
	iPrepareError = aError;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
	INFO_PRINTF2(_L("PrepareToPlayDualTone() completed with error %i"), aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
	CActiveScheduler::Stop();	//To resume DoTestStepL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
void CTestStepTonePlayDualToneInvalidFreq::MatoPlayComplete(TInt aError)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
	iPlayError = aError;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
	INFO_PRINTF2(_L("Play() completed with error %i"), aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
	CActiveScheduler::Stop();	//To resume DoTestStepL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
 * Creates the tone utility and active scheduler.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
enum TVerdict CTestStepTonePlayDualToneInvalidFreq::DoTestStepPreambleL(void)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
	//install the scheduler
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
	TVerdict result = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
	if (result != EPass)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
		return result;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
	INFO_PRINTF1(_L("Creating tone utility..."));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
	__MM_HEAP_MARK;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
	// create the Tone utility
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
	TRAPD( err, (iTone = CMMFMdaAudioToneUtility::NewL(*this)) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
	if ( err != KErrNone ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
		 iTone->State() != EMdaAudioToneUtilityNotReady	)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
		result = EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
	return result;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
 * Cleans up the tone utility and the active scheduler.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
enum TVerdict CTestStepTonePlayDualToneInvalidFreq::DoTestStepPostambleL(void)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
	delete iTone;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
	iTone = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
	__MM_HEAP_MARKEND;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
	//destroy the scheduler
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
 * Prior to the fix the tone utility would stall, this is caught here.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
 */	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
void CTestStepTonePlayDualToneInvalidFreq::TimeoutExpired()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
	iTestStepResult = EFail;	//Original behaviour prior to the introduction of this test had DevSound dropping the play request quietly resulting in the thread timing out.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
	INFO_PRINTF1(_L("ERROR: Audio Tone Utility call timed out."));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
	CActiveScheduler::Stop();	//To resume DoTestStepL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
 * Static function used by the TCallBack object.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
 * @param aPtr A pointer to the test object that is running.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
TInt CTestStepTonePlayDualToneInvalidFreq::TimeoutExpiredStaticCallback(TAny* aPtr)	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
	CTestStepTonePlayDualToneInvalidFreq* self = static_cast<CTestStepTonePlayDualToneInvalidFreq*>(aPtr);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
	self->TimeoutExpired();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
	return 0; //This is a one off event, do not want periodic behaviour.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
 * Each test step must supply an implementation for DoTestStepL.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
 * @return	"TVerdict"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
 *			The result of the test step
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
TVerdict CTestStepTonePlayDualToneInvalidFreq::DoTestStepL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
	iTestStepResult = EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
	TInt freq1, freq2, duration;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
	User::LeaveIfError(GetIntFromConfig(iTestStepName, _L("Frequency1"), freq1));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
	User::LeaveIfError(GetIntFromConfig(iTestStepName, _L("Frequency2"), freq2));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
	User::LeaveIfError(GetIntFromConfig(iTestStepName, _L("Duration"), duration));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
	iTestStepResult = EPass;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
	INFO_PRINTF4(_L("Playing dual tone with frequencies of %d Hz & %d Hz for %d microseconds."), 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
			freq1, freq2, duration);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
	INFO_PRINTF1(_L("Calling PrepareToPlayDualTone()..."));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
	iTone->PrepareToPlayDualTone(freq1, freq2, TTimeIntervalMicroSeconds(duration));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
	CActiveScheduler::Start();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
	if (iPrepareError != KErrNone || iTone->State() != EMdaAudioToneUtilityPrepared	)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
		return EFail;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
	INFO_PRINTF1(_L("Calling Play()..."));	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
	iTone->Play();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
	//The test case was originally introduced as part of DEF125377 where the Tone Utility was hanging and we use a timer here to catch this.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
	TCallBack testTimedOutCallback(TimeoutExpiredStaticCallback, this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
	CPeriodic* timeoutTimer = CPeriodic::NewL(CActive::EPriorityHigh);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
	CleanupStack::PushL(timeoutTimer);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
	timeoutTimer->Start(KTestTimeout, KTestTimeout, testTimedOutCallback);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
	CActiveScheduler::Start();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
	timeoutTimer->Cancel();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
	CleanupStack::PopAndDestroy(1, timeoutTimer);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
	if (iPlayError != KErrArgument)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
		iTone->CancelPrepare();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
		INFO_PRINTF1(_L("ERROR: KErrArgument expected."));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
		return EFail;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
	// test steps return a result
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
	return iTestStepResult;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
	}