multimediacommscontroller/mmccinterface/tsrc/ut_interface/src/UT_CMccCodecDTMF.cpp
changeset 0 1bce908db942
child 14 5bf83dc720b3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccinterface/tsrc/ut_interface/src/UT_CMccCodecDTMF.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,857 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+
+
+//  CLASS HEADER
+#include "UT_CMccCodecDTMF.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/eunitmacros.h>
+
+
+//  INTERNAL INCLUDES
+#include "mmcccodecdtmf.h"
+#include "mccunittestmacros.h"
+
+// CONSTRUCTION
+UT_CMccCodecDTMF* UT_CMccCodecDTMF::NewL()
+    {
+    UT_CMccCodecDTMF* self = UT_CMccCodecDTMF::NewLC();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+UT_CMccCodecDTMF* UT_CMccCodecDTMF::NewLC()
+    {
+    UT_CMccCodecDTMF* self = new( ELeave ) UT_CMccCodecDTMF();
+    CleanupStack::PushL( self );
+
+    self->ConstructL();
+
+    return self;
+    }
+
+// Destructor (virtual by CBase)
+UT_CMccCodecDTMF::~UT_CMccCodecDTMF()
+    {
+    }
+
+// Default constructor
+UT_CMccCodecDTMF::UT_CMccCodecDTMF()
+    {
+    }
+
+// Second phase construct
+void UT_CMccCodecDTMF::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+
+
+
+void UT_CMccCodecDTMF::SetupL(  )
+    {
+    iCodec = CMccCodecDTMF::NewL();
+    }
+
+void UT_CMccCodecDTMF::Teardown(  )
+    {
+    delete iCodec;
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_RequireSignallingL(  )
+    {
+    CMccCodecDTMF* codecinfo = CMccCodecDTMF::NewL();
+    CleanupStack::PushL(codecinfo);
+    codecinfo->SetPTime(2);
+    codecinfo->SetMaxPTime(1);
+    codecinfo->SetPayloadType(1);
+    codecinfo->iBitrateMask = 1;
+    codecinfo->SetCodecMode(1);
+    codecinfo->SetSamplingFreq(1000);
+    codecinfo->SetMaxBitrate(64000);
+    codecinfo->SetFramerate(1.1);
+    codecinfo->iVideoWidth = 1;
+    codecinfo->iVideoHeight  = 1;
+    EUNIT_ASSERT(!iCodec->RequireSignalling(*codecinfo));
+    CleanupStack::PopAndDestroy(codecinfo);    
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_CloneDefaultsLL(  )
+    {
+    CMccCodecInformation* codecinfo = iCodec->CloneDefaultsL();
+    delete codecinfo;   
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_CloneDetailedLL(  )
+    {
+    CMccCodecInformation* codecinfo = iCodec->CloneDetailedL();
+    delete codecinfo; 
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_EnableVADL(  )
+    {
+    EUNIT_ASSERT( iCodec->EnableVAD(ETrue) == KErrNotSupported  );
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_SetBitrateL(  )
+    {
+    EUNIT_ASSERT( iCodec->SetBitrate(0) == KErrNone );
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_SetSamplingFreqL(  )
+    {
+    EUNIT_ASSERT( iCodec->SetSamplingFreq(64000) ==  KErrNotSupported );
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_SetPTimeL(  )
+    {
+    EUNIT_ASSERT( iCodec->SetPTime(100) ==  KErrNone );
+    EUNIT_ASSERT( iCodec->SetPTime(300) ==  KErrNotSupported );
+
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_SetMaxPTimeL(  )
+    {
+    EUNIT_ASSERT( iCodec->SetMaxPTime(100) ==  KErrNone );
+    EUNIT_ASSERT( iCodec->SetMaxPTime(300) ==  KErrNotSupported );
+    
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_SetSdpNameL(  )
+    {
+    EUNIT_ASSERT( iCodec->SetSdpName( KTelephoneEvent ) == KErrNone);
+    EUNIT_ASSERT( iCodec->SetSdpName( KAACSdpName ) == KErrNotSupported);
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_SetPayloadTypeL(  )
+    {
+    EUNIT_ASSERT( iCodec->SetPayloadType(100) == KErrNone );
+    EUNIT_ASSERT( iCodec->SetPayloadType(20) == KErrNotSupported );
+
+    }
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_SetCodecModeL(  )
+    {
+    EUNIT_ASSERT( iCodec->SetCodecMode(EDTMFModeEvent) == KErrNone );
+    EUNIT_ASSERT( iCodec->SetCodecMode(EDTMFModeTone) == KErrNotSupported );
+
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_AddAllowedBit()
+    {
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber0 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber2 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber3 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber4 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber5 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber6 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber7 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber8 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber9 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber10 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber11 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber12 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber13 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber14 ) );
+    EUNIT_ASSERT( iCodec->AddAllowedBit( KDtmfNumber15 ) );
+    EUNIT_ASSERT( !iCodec->AddAllowedBit( 16 ) );
+
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_GetAllowedToneNumbersArray()
+    {
+    RArray<TUint> toneNumbers;
+    CleanupClosePushL( toneNumbers );
+    iCodec->iBitrateMask = 0;
+    toneNumbers.Reset();
+    iCodec->GetAllowedToneNumbersArrayL( toneNumbers );
+    EUNIT_ASSERT( toneNumbers.Count() == 0 );
+
+    iCodec->iBitrateMask = 0x003E;
+    iCodec->GetAllowedToneNumbersArrayL( toneNumbers );
+
+    EUNIT_ASSERT( toneNumbers.Count() == 5 );
+    toneNumbers.Reset();
+    
+    iCodec->iBitrateMask = 0xFFFF;
+    iCodec->GetAllowedToneNumbersArrayL( toneNumbers );
+
+    EUNIT_ASSERT( toneNumbers.Count() == 16 );
+    toneNumbers.Reset();
+    
+    
+    iCodec->iBitrateMask = 0x9CE7;
+    iCodec->GetAllowedToneNumbersArrayL( toneNumbers );
+
+    EUNIT_ASSERT( toneNumbers.Count() == 10 );
+    toneNumbers.Reset();
+    
+    CleanupStack::PopAndDestroy();
+  
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_FindContinuusIntegers()
+    {
+    RArray<TUint> toneNumbers;
+    CleanupClosePushL( toneNumbers );
+    TUint pos = 0;
+    
+    iCodec->FindContinuusIntegers( toneNumbers, pos );
+    EUNIT_ASSERT( pos == 0 );
+    EUNIT_ASSERT( toneNumbers.Count() == 0 );
+    
+    toneNumbers.InsertInOrderL( 0 );
+    
+    // 0
+    iCodec->FindContinuusIntegers( toneNumbers, pos );
+    EUNIT_ASSERT( pos == 0 );
+    EUNIT_ASSERT( toneNumbers.Count() == 1 );
+
+    // 15  
+    toneNumbers.Reset();
+    toneNumbers.InsertInOrderL( 15 );
+    iCodec->FindContinuusIntegers( toneNumbers, pos );
+    EUNIT_ASSERT( pos == 0 );
+    EUNIT_ASSERT( toneNumbers.Count() == 1 );
+
+    // 0-2,4,7-9,11,13-15
+    toneNumbers.Reset();
+    toneNumbers.InsertInOrderL( 0 );
+    toneNumbers.InsertInOrderL( 1 );
+    toneNumbers.InsertInOrderL( 2 );
+    toneNumbers.InsertInOrderL( 4 );
+    toneNumbers.InsertInOrderL( 7 );
+    toneNumbers.InsertInOrderL( 8 );
+    toneNumbers.InsertInOrderL( 9 );
+    toneNumbers.InsertInOrderL( 11 );
+    toneNumbers.InsertInOrderL( 13 );
+    toneNumbers.InsertInOrderL( 14 );
+    toneNumbers.InsertInOrderL( 15 );
+    EUNIT_ASSERT( toneNumbers.Count() == 11 );
+
+    iCodec->FindContinuusIntegers( toneNumbers, pos );
+    EUNIT_ASSERT( pos == 2 );
+    
+    iCodec->FindContinuusIntegers( toneNumbers, ++pos );
+    EUNIT_ASSERT( pos == 3 );
+    
+    iCodec->FindContinuusIntegers( toneNumbers, ++pos );
+    EUNIT_ASSERT( pos == 6 );
+    
+    iCodec->FindContinuusIntegers( toneNumbers, ++pos );
+    EUNIT_ASSERT( pos == 7 );
+    
+    iCodec->FindContinuusIntegers( toneNumbers, ++pos );
+    EUNIT_ASSERT( pos == 10 );
+
+    CleanupStack::PopAndDestroy();
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_CreateFmtpAttrListL()
+    {
+    RArray<TUint> toneNumbers;
+    CleanupClosePushL( toneNumbers );
+    
+    toneNumbers.InsertInOrder( 2);
+    toneNumbers.InsertInOrder( 3);
+    toneNumbers.InsertInOrder( 4);
+    toneNumbers.InsertInOrder( 5);
+    
+    toneNumbers.InsertInOrder( 7);
+    toneNumbers.InsertInOrder( 9);
+    toneNumbers.InsertInOrder( 10);
+    
+    toneNumbers.InsertInOrder( 12);
+    toneNumbers.InsertInOrder( 13);
+    toneNumbers.InsertInOrder( 14);
+    toneNumbers.InsertInOrder( 15);
+ 
+    iCodec->CreateFmtpAttrListL( toneNumbers );
+    
+    CleanupStack::PopAndDestroy();    
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_AddToneNumbersL()
+    {
+    
+    // left side value is greater then right side value
+    TBool ret = EFalse;
+    iCodec->iBitrateMask = 0;
+    EUNIT_ASSERT_SPECIFIC_LEAVE( ret = iCodec->AddToneNumbersL( 15, 0 ), KErrArgument );
+    EUNIT_ASSERT( !ret );
+    EUNIT_ASSERT(iCodec->iBitrateMask == 0 ); 
+    
+
+    EUNIT_ASSERT( iCodec->AddToneNumbersL( 0, 15 ) ); 
+    EUNIT_ASSERT( iCodec->iBitrateMask & KMccAllowedDtmfNumberALL );
+ 
+    iCodec->iBitrateMask = 0;
+    EUNIT_ASSERT( iCodec->AddToneNumbersL( 0, 20 ) ); 
+    EUNIT_ASSERT( iCodec->iBitrateMask & KMccAllowedDtmfNumberALL );
+    
+    iCodec->iBitrateMask = 0;
+    EUNIT_ASSERT( iCodec->AddToneNumbersL( 1, 14 ) ); 
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0x7FFE );
+    
+    iCodec->iBitrateMask = 0;
+    EUNIT_ASSERT( iCodec->AddToneNumbersL( 2, 20 ) ); 
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0xFFFC );
+    
+    }
+    
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_ParserToneNumberL()
+    {
+       
+    // length is zero
+    TBool ret = EFalse;
+    EUNIT_ASSERT_SPECIFIC_LEAVE( ret = iCodec->ParseToneNumberL( _L8("") ), KErrArgument );
+    
+    EUNIT_ASSERT_NO_LEAVE( ret = iCodec->ParseToneNumberL( _L8("10")));
+    EUNIT_ASSERT( ret );
+    EUNIT_ASSERT( iCodec->iBitrateMask &  KMccAllowedDtmfNumber10 );
+    
+    iCodec->iBitrateMask = 0;
+    ret = EFalse;    
+    EUNIT_ASSERT_SPECIFIC_LEAVE( ret = iCodec->ParseToneNumberL( _L8("-3")), KErrGeneral );
+    EUNIT_ASSERT( !ret );
+    EUNIT_ASSERT( !iCodec->iBitrateMask );
+
+    iCodec->iBitrateMask = 0;
+    ret = EFalse;    
+    EUNIT_ASSERT_NO_LEAVE( ret = iCodec->ParseToneNumberL( _L8("11")));
+    EUNIT_ASSERT( ret );
+    EUNIT_ASSERT( iCodec->iBitrateMask &  KMccAllowedDtmfNumber11 );
+
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_ParserToneNumbersL()
+    {
+    // length is zero
+    TBool ret = EFalse;
+    EUNIT_ASSERT_SPECIFIC_LEAVE( ret = iCodec->ParseToneNumbersL( _L8(""), _L8("10") ), KErrArgument );
+    EUNIT_ASSERT( !ret );
+    
+    iCodec->iBitrateMask = 0;
+    ret = EFalse;
+    EUNIT_ASSERT_SPECIFIC_LEAVE( ret = iCodec->ParseToneNumbersL( _L8("10"), _L8("") ), KErrArgument );
+    EUNIT_ASSERT( !ret );
+    
+    iCodec->iBitrateMask = 0;
+    ret = EFalse;
+    EUNIT_ASSERT_NO_LEAVE( ret = iCodec->ParseToneNumbersL( _L8("0"), _L8("20")));
+    EUNIT_ASSERT( ret );
+    EUNIT_ASSERT( iCodec->iBitrateMask &  KMccAllowedDtmfNumberALL );
+
+    iCodec->iBitrateMask = 0;
+    ret = EFalse;
+    EUNIT_ASSERT_NO_LEAVE( ret = iCodec->ParseToneNumbersL( _L8("0"), _L8("10")));
+    EUNIT_ASSERT( ret );
+    EUNIT_ASSERT( iCodec->iBitrateMask & 0x7FE );
+    
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_ParseTokenL()
+    {
+    // length is zero
+    TBool ret = EFalse;
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( ret = iCodec->ParseTokenL( _L8("") ), KErrArgument );
+    EUNIT_ASSERT( !ret );
+    
+    // contains non digit
+    ret = EFalse;
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( ret = iCodec->ParseTokenL( _L8("2.3") ), KErrArgument );
+    EUNIT_ASSERT( !ret );
+    
+    // contains -60, 70-
+    ret = EFalse;
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( ret = iCodec->ParseTokenL( _L8("-60") ), KErrArgument );
+    EUNIT_ASSERT( !ret );
+    
+    // contains -60, 70-
+    ret = EFalse;
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( ret = iCodec->ParseTokenL( _L8("70-") ), KErrArgument );
+    EUNIT_ASSERT( !ret );
+    
+    // contains events=0-15
+    ret = EFalse;
+    EUNIT_ASSERT_NO_LEAVE( ret = iCodec->ParseTokenL( _L8("events=0-15") ) );
+    EUNIT_ASSERT( ret );
+    
+    iCodec->iBitrateMask = 0;
+    ret = EFalse;
+    EUNIT_ASSERT_NO_LEAVE( ret = iCodec->ParseTokenL( _L8("11-15") ));
+    EUNIT_ASSERT( ret );
+    EUNIT_ASSERT( iCodec->iBitrateMask & 0x7C00 );
+    
+    iCodec->iBitrateMask = 0;
+    ret = EFalse;
+    EUNIT_ASSERT_NO_LEAVE( ret = iCodec->ParseTokenL( _L8("9") ));
+    EUNIT_ASSERT( ret );
+    EUNIT_ASSERT( iCodec->iBitrateMask & KMccAllowedDtmfNumber9 );
+
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_AddTokenL()
+    {
+    
+    CPtrC8Array* tokens = new (ELeave) CPtrC8Array(1);  
+    CleanupStack::PushL( tokens ); 
+    
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( iCodec->AddTokenL( *tokens, _L8("0-15,60,70"), -1, 3 ), KErrArgument );
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( iCodec->AddTokenL( *tokens, _L8("0-15,60,70"), 0, -1 ), KErrArgument );
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( iCodec->AddTokenL( *tokens, _L8("0-15,60,70"), 3, 1 ), KErrArgument );
+    EUNIT_ASSERT( tokens->MdcaCount() == 0);
+    
+    iCodec->AddTokenL( *tokens, _L8("0-15,60,3,70"), 0, 3 );
+    EUNIT_ASSERT( tokens->MdcaCount() == 1);
+    EUNIT_ASSERT( tokens->MdcaPoint(0) == _L8("0-15"));
+
+
+    EUNIT_ASSERT_NO_LEAVE( iCodec->AddTokenL( *tokens, _L8("0-15,60,3,70"), 5, 6 ));
+    EUNIT_ASSERT( tokens->MdcaCount() == 2);
+    EUNIT_ASSERT( tokens->MdcaPoint(1) == _L8("60"));
+
+    
+    iCodec->AddTokenL( *tokens, _L8("0-15,60,3,70"), 8, 8 );
+    EUNIT_ASSERT( tokens->MdcaCount() == 3);
+    EUNIT_ASSERT( tokens->MdcaPoint(2) == _L8("3"));
+
+    
+    EUNIT_ASSERT_NO_LEAVE( iCodec->AddTokenL( *tokens, _L8("0-15,60,3,70"), 10, 11 ));
+    EUNIT_ASSERT( tokens->MdcaCount() == 4);
+    EUNIT_ASSERT( tokens->MdcaPoint(3) == _L8("70"));
+
+    CleanupStack::PopAndDestroy( tokens );
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_TokenizeL()
+    {
+    CPtrC8Array* tokens = NULL ;
+    
+    // value lenth is 0
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( tokens = iCodec->TokenizeL( _L8(""), ','), KErrArgument );
+    EUNIT_ASSERT( !tokens );
+   
+    // seperator is not ','
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( tokens = iCodec->TokenizeL( _L8("0-15,60,3,70"), ';'), KErrArgument );
+    EUNIT_ASSERT( !tokens );
+
+    tokens = iCodec->TokenizeL( _L8("0-15,60,3,70"), ',');
+    CleanupStack::PushL( tokens );
+    EUNIT_ASSERT( tokens );
+    EUNIT_ASSERT( tokens->MdcaCount() == 4 );
+    CleanupStack::PopAndDestroy( tokens );
+    tokens = NULL;
+
+    // TokenizeLC does not care about the parsing
+    tokens = iCodec->TokenizeL( _L8("-15,60,-3,4-,70"), ',');
+    CleanupStack::PushL( tokens );
+    EUNIT_ASSERT( tokens );
+    EUNIT_ASSERT( tokens->MdcaCount() == 5 );
+
+    CleanupStack::PopAndDestroy( tokens );
+    
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_EncodeTokensL()
+    {
+    CPtrC8Array* firsttokens = NULL;
+    TBool ret = EFalse;
+    iCodec->iBitrateMask = 0;
+    firsttokens = iCodec->TokenizeL( _L8("0-15,60,3,70"), ',');
+    CleanupStack::PushL( firsttokens );
+    EUNIT_ASSERT( firsttokens );
+    EUNIT_ASSERT( firsttokens->MdcaCount() == 4 );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 );
+    EUNIT_ASSERT_NO_LEAVE( ret = iCodec->EncodeTokensL(*firsttokens) );
+    EUNIT_ASSERT( ret );
+    EUNIT_ASSERT( iCodec->iBitrateMask & KMccAllowedDtmfNumberALL );
+    iCodec->iBitrateMask = 0;
+
+    CleanupStack::PopAndDestroy( firsttokens );
+    firsttokens = NULL;
+
+    // TokenizeLC does not care about the parsing
+    ret = EFalse;
+    CPtrC8Array* sectokens = NULL ;
+    sectokens = iCodec->TokenizeL( _L8("-15,60,-3,4-,70"), ',');
+    CleanupStack::PushL( sectokens );
+
+    EUNIT_ASSERT( sectokens );
+    EUNIT_ASSERT( sectokens->MdcaCount() == 5 );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 );
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( ret = iCodec->EncodeTokensL(*sectokens), KErrArgument );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 );
+    EUNIT_ASSERT( !ret );
+    
+    CleanupStack::PopAndDestroy( sectokens );
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_ParseFmtpAttrL()
+    {
+    TBool retValue = EFalse;
+	TBool err( KErrNone );
+	
+    retValue = iCodec->ParseFmtpAttrL(_L8("0-15,60,70")); 
+    EUNIT_ASSERT( retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask & KMccAllowedDtmfNumberALL );
+    iCodec->iBitrateMask = 0;
+    
+    retValue = EFalse;
+    retValue = iCodec->ParseFmtpAttrL(_L8("1-14,60,70")); 
+    EUNIT_ASSERT( retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask & 0x7FFE ); 
+    iCodec->iBitrateMask = 0;
+
+    retValue = EFalse;
+    retValue = iCodec->ParseFmtpAttrL(_L8("70,60,0-15,80")); 
+    EUNIT_ASSERT( retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask & KMccAllowedDtmfNumberALL );
+    iCodec->iBitrateMask = 0;
+    
+    retValue = EFalse;
+    retValue = iCodec->ParseFmtpAttrL(_L8("70,60,80")); 
+    EUNIT_ASSERT( !retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 ); 
+    iCodec->iBitrateMask = 0;
+
+    retValue = EFalse;
+    retValue = iCodec->ParseFmtpAttrL(_L8("70,60,1,2,3,4,80")); 
+    EUNIT_ASSERT( retValue );
+    EUNIT_ASSERT(iCodec->iBitrateMask == 0x001E ); 
+    iCodec->iBitrateMask = 0;
+
+    // space in the beginning and end is not allowed
+    retValue = EFalse;
+	MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( retValue = iCodec->ParseFmtpAttrL(_L8(" 70,60,80,0-15 ")), KErrArgument); 
+    EUNIT_ASSERT( !retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 ); 
+    iCodec->iBitrateMask = 0;
+    
+ 
+    // -60 could not be parse
+    retValue = EFalse;
+    err = KErrNone;
+    TRAP( err, retValue = iCodec->ParseFmtpAttrL(_L8("70,-60,1,2,3,4,80")) );
+    EUNIT_ASSERT( err );
+    EUNIT_ASSERT( !retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 ); 
+    iCodec->iBitrateMask = 0;
+   
+    // 1- can not be parsed
+    retValue = EFalse;
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( retValue = iCodec->ParseFmtpAttrL(_L8("70,60,1-,2,3,4,80")), KErrArgument); 
+    EUNIT_ASSERT( !retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 ); 
+    iCodec->iBitrateMask = 0;
+    
+    // space between numbers can not be parsed
+    retValue = EFalse;
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( retValue = iCodec->ParseFmtpAttrL(_L8("70,60,1-4 ,80")), KErrArgument); 
+    EUNIT_ASSERT( !retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 ); 
+    iCodec->iBitrateMask = 0;
+    
+    
+    // two comma together can not be parsed ",,"
+    retValue = EFalse;
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( retValue = iCodec->ParseFmtpAttrL(_L8("70,60,,80")), KErrArgument); 
+    EUNIT_ASSERT( !retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 ); 
+    iCodec->iBitrateMask = 0;
+    
+    // comma in the begining can not be parsed
+    retValue = EFalse;
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( retValue = iCodec->ParseFmtpAttrL(_L8(",70")), KErrArgument); 
+    EUNIT_ASSERT( !retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 ); 
+    iCodec->iBitrateMask = 0;
+    
+    
+    // comma in the begining can not be parsed
+    retValue = EFalse;
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( retValue = iCodec->ParseFmtpAttrL(_L8(",0-15")), KErrArgument); 
+    EUNIT_ASSERT( !retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 ); 
+    iCodec->iBitrateMask = 0;
+    
+    // comma in the end can not be parsed
+    retValue = EFalse;
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( retValue = iCodec->ParseFmtpAttrL(_L8("70,")), KErrArgument); 
+    EUNIT_ASSERT( !retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 ); 
+    iCodec->iBitrateMask = 0;
+    
+    // comma in the end can not be parsed
+    retValue = EFalse;
+    MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( retValue = iCodec->ParseFmtpAttrL(_L8("0-15,")), KErrArgument); 
+    EUNIT_ASSERT( !retValue );
+    EUNIT_ASSERT( iCodec->iBitrateMask == 0 ); 
+    iCodec->iBitrateMask = 0;
+   
+    }
+
+void UT_CMccCodecDTMF::UT_CMccCodecDTMF_GetFmtpL()
+    {
+    HBufC8* fmtp = HBufC8::NewLC( 50 );
+    TPtr8 fmtpPtr = fmtp->Des();
+    
+    // default case
+    fmtpPtr = iCodec->GetFmtpL(); 
+    TLex8 fmtpPtrLex( fmtpPtr.PtrZ() );
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '0' );
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '-' );
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '1' );
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '5' );
+    EUNIT_ASSERT( !fmtpPtrLex.Get() );  
+    
+    iCodec->iBitrateMask = 0;
+    iCodec->iBitrateMask |= KMccAllowedDtmfNumber0;
+    iCodec->iBitrateMask |= KMccAllowedDtmfNumber1;
+    iCodec->iBitrateMask |= KMccAllowedDtmfNumber2;
+    iCodec->iBitrateMask |= KMccAllowedDtmfNumber3;
+    iCodec->iBitrateMask |= KMccAllowedDtmfNumber4;
+    iCodec->iBitrateMask |= KMccAllowedDtmfNumber5;
+    fmtpPtr = iCodec->GetFmtpL(); 
+    fmtpPtrLex = fmtpPtr.PtrZ();
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '0' );
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '-' );
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '5' );
+    EUNIT_ASSERT( !fmtpPtrLex.Get() );
+    
+    iCodec->iBitrateMask = 0;
+    iCodec->iBitrateMask |= KMccAllowedDtmfNumber10;
+    fmtpPtr = iCodec->GetFmtpL(); 
+    fmtpPtrLex = fmtpPtr.PtrZ();
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '1' );
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '0' );
+    EUNIT_ASSERT( !fmtpPtrLex.Get() );
+
+    iCodec->iBitrateMask = 0;
+    iCodec->iBitrateMask |= KMccAllowedDtmfNumber11;
+    iCodec->iBitrateMask |= KMccAllowedDtmfNumber12;
+    iCodec->iBitrateMask |= KMccAllowedDtmfNumber13;
+    iCodec->iBitrateMask |= KMccAllowedDtmfNumber14;
+    iCodec->iBitrateMask |= KMccAllowedDtmfNumber15;
+    fmtpPtr = iCodec->GetFmtpL(); 
+    fmtpPtrLex = fmtpPtr.PtrZ();
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '1' );
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '1' );
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '-' );
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '1' );
+    EUNIT_ASSERT( fmtpPtrLex.Get() == '5' );
+    EUNIT_ASSERT( !fmtpPtrLex.Get() );
+    
+    CleanupStack::PopAndDestroy( fmtp );
+    }
+
+//  TEST TABLE
+
+EUNIT_BEGIN_TEST_TABLE(
+    UT_CMccCodecDTMF,
+    "CMccCodecDTMF test",
+    "UNIT" )
+
+EUNIT_TEST(
+    "RequireSignalling - test ",
+    "CMccCodecDTMF",
+    "RequireSignalling",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_RequireSignallingL, Teardown)
+
+EUNIT_TEST(
+    "CloneDefaultsL - test ",
+    "CMccCodecDTMF",
+    "CloneDefaultsL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_CloneDefaultsLL, Teardown)
+
+EUNIT_TEST(
+    "CloneDetailedL - test ",
+    "CMccCodecDTMF",
+    "CloneDetailedL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_CloneDetailedLL, Teardown)
+
+EUNIT_TEST(
+    "EnableVAD - test ",
+    "CMccCodecDTMF",
+    "EnableVAD",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_EnableVADL, Teardown)
+
+
+EUNIT_TEST(
+    "SetBitrate - test ",
+    "CMccCodecDTMF",
+    "SetBitrate",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_SetBitrateL, Teardown)
+
+EUNIT_TEST(
+    "SetSamplingFreq - test ",
+    "CMccCodecDTMF",
+    "SetSamplingFreq",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_SetSamplingFreqL, Teardown)
+
+EUNIT_TEST(
+    "SetPTime - test ",
+    "CMccCodecDTMF",
+    "SetPTime",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_SetPTimeL, Teardown)
+
+EUNIT_TEST(
+    "SetMaxPTime - test ",
+    "CMccCodecDTMF",
+    "SetMaxPTime",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_SetMaxPTimeL, Teardown)
+
+EUNIT_TEST(
+    "SetSdpName - test ",
+    "CMccCodecDTMF",
+    "SetSdpName",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_SetSdpNameL, Teardown)
+
+EUNIT_TEST(
+    "SetPayloadType - test ",
+    "CMccCodecDTMF",
+    "SetPayloadType",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_SetPayloadTypeL, Teardown)
+
+EUNIT_TEST(
+    "SetCodecMode - test ",
+    "CMccCodecDTMF",
+    "SetCodecMode",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_SetCodecModeL, Teardown)
+
+EUNIT_TEST(
+    "AddAllowedBit - test ",
+    "CMccCodecDTMF",
+    "AddAllowedBit",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_AddAllowedBit, Teardown)
+    
+EUNIT_TEST(
+    "GetAllowedToneNumbersArray - test ",
+    "CMccCodecDTMF",
+    "GetAllowedToneNumbersArray",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_GetAllowedToneNumbersArray, Teardown)
+    
+EUNIT_TEST(
+    "FindContinuusIntegers - test ",
+    "CMccCodecDTMF",
+    "FindContinuusIntegers",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_FindContinuusIntegers, Teardown)
+
+EUNIT_TEST(
+    "CreateFmtpAttrListL - test ",
+    "CMccCodecDTMF",
+    "CreateFmtpAttrListL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_CreateFmtpAttrListL, Teardown)
+
+EUNIT_TEST(
+    "AddToneNumbersL - test ",
+    "CMccCodecDTMF",
+    "AddToneNumbersL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_AddToneNumbersL, Teardown)
+
+  
+EUNIT_TEST(
+    "ParserToneNumberL - test ",
+    "CMccCodecDTMF",
+    "ParserToneNumberL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_ParserToneNumberL, Teardown)
+
+         
+EUNIT_TEST(
+    "ParserToneNumbersL - test ",
+    "CMccCodecDTMF",
+    "ParserToneNumbersL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_ParserToneNumbersL, Teardown)
+
+         
+EUNIT_TEST(
+    "ParseTokenL - test ",
+    "CMccCodecDTMF",
+    "ParseTokenL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_ParseTokenL, Teardown)
+
+         
+EUNIT_TEST(
+    "AddTokenL - test ",
+    "CMccCodecDTMF",
+    "AddTokenL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_AddTokenL, Teardown)
+
+         
+EUNIT_TEST(
+    "TokenizeL - test ",
+    "CMccCodecDTMF",
+    "TokenizeL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_TokenizeL, Teardown)
+
+  
+EUNIT_TEST(
+    "EncodeTokensL - test ",
+    "CMccCodecDTMF",
+    "EncodeTokensL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_EncodeTokensL, Teardown)
+
+       
+EUNIT_TEST(
+    "ParseFmtpAttrL - test ",
+    "CMccCodecDTMF",
+    "ParseFmtpAttrL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_ParseFmtpAttrL, Teardown)
+
+EUNIT_TEST(
+    "GetFmtpL - test ",
+    "CMccCodecDTMF",
+    "GetFmtpL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccCodecDTMF_GetFmtpL, Teardown)
+
+
+
+      
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE