diff -r ccd8e69b5392 -r 496ad160a278 mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmceutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmceutils.cpp Fri Jun 11 13:36:18 2010 +0300 @@ -0,0 +1,1028 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INTERNAL INCLUDES +#include "ut_musengmceutils.h" +#include "musengmceutils.h" +#include "mussipprofilehandler.h" +#include "musengstubs.h" +#include "musengtestdefs.h" + + +// SYSTEM INCLUDES +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TUint KSipProfileId( 1 ); + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_MusEngMceUtils* UT_MusEngMceUtils::NewL() + { + UT_MusEngMceUtils* self = UT_MusEngMceUtils::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_MusEngMceUtils* UT_MusEngMceUtils::NewLC() + { + UT_MusEngMceUtils* self = new( ELeave ) UT_MusEngMceUtils(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_MusEngMceUtils::~UT_MusEngMceUtils() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Default constructor +// ----------------------------------------------------------------------------- +// +UT_MusEngMceUtils::UT_MusEngMceUtils() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Second phase construct +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::ConstructL() + { + // The ConstructL from the base class CEUnitTestSuiteClass must be called. + // It generates the test case table. + CEUnitTestSuiteClass::ConstructL(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::SetupL() + { + iManager = CMceManager::NewL( TUid::Null(), NULL ); + iObserver = new( ELeave ) CMusEngObserverStub; + iObserver->iRoamingBetweenAPsAllowed = ETrue; + iProfileHandler = CMusSipProfileHandler::NewL( *iObserver ); + + iProfileHandler->CreateProfileL( KSipProfileId ); + iEmptySession = CMceOutSession::NewL( *iManager, + *iProfileHandler->Profile(), + KTestRecipientSipUri8() ); + + // Contruct an outgoing video sesssion + iVideoOutSession = CMceOutSession::NewL( *iManager, + *iProfileHandler->Profile(), + KTestRecipientSipUri8() ); + + + CMceVideoStream* videoOut = CMceVideoStream::NewLC(); + + videoOut->AddSinkL( CMceRtpSink::NewLC() ); + CleanupStack::Pop(); + + videoOut->AddSinkL( CMceDisplaySink::NewLC( *iManager ) ); + CleanupStack::Pop(); + + videoOut->SetSourceL( CMceCameraSource::NewLC( *iManager ) ); + CleanupStack::Pop(); + + iVideoOutSession->AddStreamL( videoOut ); + CleanupStack::Pop( videoOut ); + + // Consruct a video session with incoming video and audio stream + // Audio part + iVideoInSession = CMceOutSession::NewL( *iManager, + *iProfileHandler->Profile(), + KTestRecipientSipUri8() ); + + CMceAudioStream* audioIn = CMceAudioStream::NewLC(); + + audioIn->AddSinkL( CMceSpeakerSink::NewLC() ); + CleanupStack::Pop(); + + audioIn->SetSourceL( CMceRtpSource::NewLC() ); + CleanupStack::Pop(); + + iVideoInSession->AddStreamL( audioIn ); + CleanupStack::Pop( audioIn ); + + // Video part + CMceVideoStream* videoIn = CMceVideoStream::NewLC(); + + CMceDisplaySink* receivingDisplay = CMceDisplaySink::NewLC( *iManager ); + videoIn->AddSinkL( receivingDisplay ); + CleanupStack::Pop(); + iReceivingDisplay = receivingDisplay; + + videoIn->SetSourceL( CMceRtpSource::NewLC() ); + CleanupStack::Pop(); + + iVideoInSession->AddStreamL( videoIn ); + CleanupStack::Pop( videoIn ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::Setup2L() + { + iManager = CMceManager::NewL( TUid::Null(), NULL ); + iObserver = new( ELeave ) CMusEngObserverStub; + iObserver->iRoamingBetweenAPsAllowed = ETrue; + iProfileHandler = CMusSipProfileHandler::NewL( *iObserver ); + + iProfileHandler->CreateProfileL( KSipProfileId ); + iEmptySession = CMceOutSession::NewL( *iManager, + *iProfileHandler->Profile(), + KTestRecipientSipUri8() ); + + // Contruct an outgoing video sesssion + iVideoOutSession = CMceOutSession::NewL( *iManager, + *iProfileHandler->Profile(), + KTestRecipientSipUri8() ); + + + CMceVideoStream* videoOut = CMceVideoStream::NewLC(); + + videoOut->AddSinkL( CMceRtpSink::NewLC() ); + CleanupStack::Pop(); + + videoOut->AddSinkL( CMceDisplaySink::NewLC( *iManager ) ); + CleanupStack::Pop(); + + videoOut->SetSourceL( CMceCameraSource::NewLC( *iManager ) ); + CleanupStack::Pop(); + + // Video part + CMceVideoStream* videoIn = CMceVideoStream::NewLC(); + + CMceDisplaySink* receivingDisplay = CMceDisplaySink::NewLC( *iManager ); + videoIn->AddSinkL( receivingDisplay ); + CleanupStack::Pop(); + iReceivingDisplay = receivingDisplay; + + videoIn->SetSourceL( CMceRtpSource::NewLC() ); + CleanupStack::Pop(); + + videoOut->BindL( videoIn ); + CleanupStack::Pop( videoIn ); + + iVideoOutSession->AddStreamL( videoOut ); + CleanupStack::Pop( videoOut ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::Teardown() + { + delete iEmptySession; + delete iVideoOutSession; + delete iVideoInSession; + iVideoInSession = NULL; + delete iProfileHandler; + delete iObserver; + delete iManager; + iReceivingDisplay = NULL; // Not owned + } + + + +// TEST CASES + + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_IsVideoInStreamL() + { + // Stream 0 is audio stream + EUNIT_ASSERT( !MusEngMceUtils::IsVideoInStream( + *iVideoInSession->Streams()[0] ) ) + + // No source + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + EUNIT_ASSERT( !MusEngMceUtils::IsVideoInStream( *videoStream ) ) + CleanupStack::PopAndDestroy( videoStream ); + + // Camera source + EUNIT_ASSERT( !MusEngMceUtils::IsVideoInStream( + *iVideoOutSession->Streams()[0] ) ) + + // Video in stream + EUNIT_ASSERT( MusEngMceUtils::IsVideoInStream( + *iVideoInSession->Streams()[1] ) ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_IsVideoOutStreamL() + { + // Stream 0 is audio stream + EUNIT_ASSERT( !MusEngMceUtils::IsVideoOutStream( + *iVideoInSession->Streams()[0] ) ) + + // No sink + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + EUNIT_ASSERT( !MusEngMceUtils::IsVideoOutStream( *videoStream ) ) + CleanupStack::PopAndDestroy( videoStream ); + + // display sink + EUNIT_ASSERT( !MusEngMceUtils::IsVideoOutStream( + *iVideoInSession->Streams()[1] ) ) + + // Video outstream + EUNIT_ASSERT( MusEngMceUtils::IsVideoOutStream( + *iVideoOutSession->Streams()[0] ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_IsAudioInStreamL() + { + // Stream 0 is video stream + EUNIT_ASSERT( !MusEngMceUtils::IsAudioInStream( + *iVideoOutSession->Streams()[0] ) ) + + // No source + CMceAudioStream* audioStream = CMceAudioStream::NewLC(); + EUNIT_ASSERT( !MusEngMceUtils::IsAudioInStream( *audioStream ) ) + + // File source + audioStream->SetSourceL( CMceFileSource::NewLC( *iManager, KNullDesC() ) ); + CleanupStack::Pop(); + + EUNIT_ASSERT( !MusEngMceUtils::IsAudioInStream( *audioStream ) ) + CleanupStack::PopAndDestroy( audioStream ); + + // Audio in stream + EUNIT_ASSERT( MusEngMceUtils::IsAudioInStream( + *iVideoInSession->Streams()[0] ) ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetVideoOutStreamLL() + { + // No streams, must fail + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetVideoOutStreamL( *iEmptySession ), + KErrNotFound ) + + // Add an audio out stream to empty sessionand and try again, still fails + CMceAudioStream* audioStream = CMceAudioStream::NewLC(); + + audioStream->AddSinkL( CMceRtpSink::NewLC() ); + CleanupStack::Pop(); + + iEmptySession->AddStreamL( audioStream ); + CleanupStack::Pop(audioStream); + + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetVideoOutStreamL( *iEmptySession ), + KErrNotFound ) + + // Incoming video stream, fails + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetVideoOutStreamL( *iVideoInSession ), + KErrNotFound ) + + // One incoming video stream with bound outstream, must find bound stream + CMceVideoStream* boundVideoOut = CMceVideoStream::NewLC(); + boundVideoOut->AddSinkL( CMceRtpSink::NewLC() ); + CleanupStack::Pop(); + boundVideoOut->SetSourceL( CMceCameraSource::NewLC( *iManager ) ); + CleanupStack::Pop(); + reinterpret_cast( + iVideoInSession->Streams()[ 1 ] )->BindL( boundVideoOut ); + CleanupStack::Pop( boundVideoOut ); + CMceVideoStream* videoStream = MusEngMceUtils::GetVideoOutStreamL( + *iVideoInSession ); + EUNIT_ASSERT( videoStream ) + EUNIT_ASSERT( videoStream->Type() == KMceVideo ) + EUNIT_ASSERT( videoStream->Sinks().Count() == 1 ) // Rtp + EUNIT_ASSERT( videoStream->Sinks()[0]->Type() == KMceRTPSink ) + + // One outgoing video stream, succeeds + videoStream = MusEngMceUtils::GetVideoOutStreamL( *iVideoOutSession ); + EUNIT_ASSERT( videoStream ) + EUNIT_ASSERT( videoStream->Type() == KMceVideo ) + EUNIT_ASSERT( videoStream->Sinks().Count() == 2 ) // Rtp, Display + EUNIT_ASSERT( videoStream->Sinks()[0]->Type() == KMceRTPSink ) + EUNIT_ASSERT( videoStream->Sinks()[1]->Type() == KMceDisplaySink ) + + // Add another stream + CMceVideoStream* videoOut = CMceVideoStream::NewLC(); + + videoOut->AddSinkL( CMceRtpSink::NewLC() ); + CleanupStack::Pop(); + + videoOut->SetSourceL( CMceFileSource::NewLC( *iManager, + KTestVideoFileName() ) ); + CleanupStack::Pop(); + + iVideoOutSession->AddStreamL( videoOut ); + CleanupStack::Pop( videoOut ); + + // Now there are two outgoing video streams, must fail + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetVideoOutStreamL( *iVideoOutSession ), + KErrOverflow ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetVideoInStreamLL() + { + // No streams, must fail + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetVideoInStreamL( *iEmptySession ), + KErrNotFound ) + + // Outgoing video stream, fails + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetVideoInStreamL( *iVideoOutSession ), + KErrNotFound ) + + // Add stream without source and try again, still fails + CMceVideoStream* newVideoStream = CMceVideoStream::NewLC(); + iVideoOutSession->AddStreamL( newVideoStream ); + CleanupStack::Pop( newVideoStream ); + + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetVideoInStreamL( *iVideoOutSession ), + KErrNotFound ) + + // One incoming video stream, succeeds + CMceVideoStream* videoStream = MusEngMceUtils::GetVideoInStreamL( + *iVideoInSession ); + + EUNIT_ASSERT( videoStream ) + EUNIT_ASSERT( videoStream->Type() == KMceVideo ) + EUNIT_ASSERT( videoStream->Sinks().Count() == 1 ) // Display + EUNIT_ASSERT( videoStream->Sinks()[0]->Type() == KMceDisplaySink ) + EUNIT_ASSERT( videoStream->Source() ) + EUNIT_ASSERT( videoStream->Source()->Type() == KMceRTPSource ) + + // Add another video in stream + + CMceVideoStream* videoIn = CMceVideoStream::NewLC(); + + videoIn->AddSinkL( CMceDisplaySink::NewLC( *iManager ) ); + CleanupStack::Pop(); + + videoIn->SetSourceL( CMceRtpSource::NewLC() ); + CleanupStack::Pop(); + + iVideoInSession->AddStreamL( videoIn ); + CleanupStack::Pop( videoIn ); + + // Now there are two incoming video streams, must fail + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetVideoInStreamL( *iVideoInSession ), + KErrOverflow ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetRecordingStreamL() + { + CMceVideoStream* recordingStream = + MusEngMceUtils::GetRecordingStream( *iVideoInSession ); + EUNIT_ASSERT( !recordingStream ) + + recordingStream = MusEngMceUtils::GetRecordingStream( *iVideoOutSession ); + EUNIT_ASSERT( !recordingStream ) + + // Create recording stream + CMceVideoStream* streamForRecording = CMceVideoStream::NewLC(); + + CMceFileSink* fileSink = CMceFileSink::NewLC( KTestVideoFileName() ); + streamForRecording->AddSinkL( fileSink ); + CleanupStack::Pop( fileSink ); + + iVideoOutSession->AddStreamL( streamForRecording ); + CleanupStack::Pop( streamForRecording ); + + // Test that it is found + recordingStream = MusEngMceUtils::GetRecordingStream( *iVideoOutSession ); + EUNIT_ASSERT( recordingStream ) + EUNIT_ASSERT( recordingStream == streamForRecording ) + } + + +// ----------------------------------------------------------------------------- +// From stream +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetMediaSinkFromStreamL() + { + CMceMediaSink* sink = MusEngMceUtils::GetMediaSink( + *(iVideoInSession->Streams()[0]), + KMceRTPSink ); + EUNIT_ASSERT( !sink ) + + sink = MusEngMceUtils::GetMediaSink( *(iVideoOutSession->Streams()[0]), + KMceRTPSink ); + + EUNIT_ASSERT( sink ) + EUNIT_ASSERT( sink->Type() == KMceRTPSink ) + + } + + +// ----------------------------------------------------------------------------- +// From stream +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetMediaSinkLFromStreamL() + { + CMceMediaSink* sink = NULL; + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetMediaSinkL( *(iVideoInSession->Streams()[0]), + KMceRTPSink ), + KErrNotFound ) + + sink = MusEngMceUtils::GetMediaSinkL( *(iVideoOutSession->Streams()[0]), + KMceRTPSink ); + EUNIT_ASSERT( sink->Type() == KMceRTPSink ) + } + + +// ----------------------------------------------------------------------------- +// From session +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetMediaSinkFromSessionL() + { + CMceMediaSink* sink = MusEngMceUtils::GetMediaSink( *iEmptySession, + KMceRTPSink ); + EUNIT_ASSERT( !sink ) + + sink = MusEngMceUtils::GetMediaSink( *iVideoOutSession, KMceRTPSink ); + + EUNIT_ASSERT( sink ) + EUNIT_ASSERT( sink->Type() == KMceRTPSink ) + } + + +// ----------------------------------------------------------------------------- +// From session +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetMediaSinkLFromSessionL() + { + CMceMediaSink* sink = NULL; + EUNIT_ASSERT_SPECIFIC_LEAVE( MusEngMceUtils::GetMediaSinkL( *iEmptySession, + KMceRTPSink ), + KErrNotFound ) + + sink = MusEngMceUtils::GetMediaSinkL( *iVideoOutSession, KMceRTPSink ); + EUNIT_ASSERT( sink->Type() == KMceRTPSink ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetCameraLL() + { + // empty session fails + EUNIT_ASSERT_SPECIFIC_LEAVE( MusEngMceUtils::GetCameraL( *iEmptySession ), + KErrNotFound ) + + // succeed + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iVideoOutSession ); + + EUNIT_ASSERT( camera ) + EUNIT_ASSERT( camera->Type() == KMceCameraSource ) + + // delete source from video out stream and try without it, fails + iVideoOutSession->Streams()[0]->SetSourceL( NULL ); + + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetCameraL( *iVideoOutSession ), + KErrNotFound ) + + // Add file source and try again, still fails + iVideoOutSession->Streams()[0]->SetSourceL( + CMceFileSource::NewLC( *iManager, KTestVideoFileName() ) ); + CleanupStack::Pop(); + + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetCameraL( *iVideoOutSession ), + KErrNotFound ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetFileSourceLL() + { + // empty session fails + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetFileSourceL( *iEmptySession ), + KErrNotFound ) + + // delete source from video out stream and try without it, fails + iVideoOutSession->Streams()[0]->SetSourceL( NULL ); + + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetFileSourceL( *iVideoOutSession ), + KErrNotFound ) + + // Add camera source and try again, still fails + iVideoOutSession->Streams()[0]->SetSourceL( + CMceCameraSource::NewLC( *iManager ) ); + CleanupStack::Pop(); + + EUNIT_ASSERT_SPECIFIC_LEAVE( + MusEngMceUtils::GetFileSourceL( *iVideoOutSession ), + KErrNotFound ) + + // Replace camera with file source, now succeeds + iVideoOutSession->Streams()[0]->SetSourceL( + CMceFileSource::NewLC( *iManager, KTestVideoFileName() ) ); + CleanupStack::Pop(); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iVideoOutSession ); + + EUNIT_ASSERT( file ) + EUNIT_ASSERT( file->Type() == KMceFileSource ) + + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetDisplayL() + { + CMceDisplaySink* display = MusEngMceUtils::GetDisplay( *iEmptySession ); + + EUNIT_ASSERT( !display ) + + display = MusEngMceUtils::GetDisplay( *iVideoOutSession ); + + EUNIT_ASSERT( display ) + EUNIT_ASSERT( display->Type() == KMceDisplaySink ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetDisplayLL() + { + CMceDisplaySink* display = NULL; + + EUNIT_ASSERT_SPECIFIC_LEAVE( MusEngMceUtils::GetDisplayL( *iEmptySession ), + KErrNotFound ) + + display = MusEngMceUtils::GetDisplayL( *iVideoOutSession ); + + EUNIT_ASSERT( display ) + EUNIT_ASSERT( display->Type() == KMceDisplaySink ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_AddDisplayLL() + { + + TRect rect( 110, 111, 112, 113 ); + + // Check that display cannot be added to audio stream + + CMceAudioStream* audioStream = CMceAudioStream::NewLC(); + EUNIT_ASSERT_SPECIFIC_LEAVE ( + MusEngMceUtils::AddDisplayL( *audioStream, *iManager, rect ), + KErrArgument ) + CleanupStack::PopAndDestroy( audioStream ); + + // Check that display can be added to video stream + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + + MusEngMceUtils::AddDisplayL( *videoStream, *iManager, rect ); + + EUNIT_ASSERT_EQUALS( videoStream->Sinks().Count(), 1 ) + EUNIT_ASSERT_EQUALS( videoStream->Sinks()[0]->Type(), KMceDisplaySink ) + EUNIT_ASSERT( videoStream->Sinks()[0]->IsEnabled() ) + + // Check the rect + CMceDisplaySink* display = + static_cast(videoStream->Sinks()[0]); + + EUNIT_ASSERT_EQUALS( display->DisplayRectL(), rect ); + + // Enable display and check that another display is not added on request. + // Still existing display must be enabled and new rect set + display->EnableL(); + TRect newRect( 115, 116, 117, 118 ); + MusEngMceUtils::AddDisplayL( *videoStream, *iManager, newRect ); + + EUNIT_ASSERT_EQUALS( videoStream->Sinks().Count(), 1 ) + EUNIT_ASSERT_EQUALS( videoStream->Sinks()[0]->Type(), KMceDisplaySink ) + EUNIT_ASSERT( videoStream->Sinks()[0]->IsEnabled() ) + + EUNIT_ASSERT( videoStream->Sinks()[0] == display ) + + // Check that rect is still changed + EUNIT_ASSERT_EQUALS( display->DisplayRectL(), newRect ); + + CleanupStack::PopAndDestroy( videoStream ); + + // Add disabled display + CMceVideoStream* videoStream2 = CMceVideoStream::NewLC(); + MusEngMceUtils::AddDisplayL( *videoStream2, *iManager, rect, ETrue ); + EUNIT_ASSERT_EQUALS( videoStream2->Sinks().Count(), 1 ) + EUNIT_ASSERT_EQUALS( videoStream2->Sinks()[0]->Type(), KMceDisplaySink ) + EUNIT_ASSERT( !videoStream2->Sinks()[0]->IsEnabled() ); + CleanupStack::PopAndDestroy( videoStream2 ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_AddSpeakerLL() + { + // Check that speaker cannot be added to video stream + + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + EUNIT_ASSERT_SPECIFIC_LEAVE ( + MusEngMceUtils::AddSpeakerL( *videoStream ), + KErrArgument ) + CleanupStack::PopAndDestroy( videoStream ); + + // Check that speaker can be added to audio stream + CMceAudioStream* audioStream = CMceAudioStream::NewLC(); + + MusEngMceUtils::AddSpeakerL( *videoStream ); + + EUNIT_ASSERT_EQUALS( audioStream->Sinks().Count(), 1 ) + EUNIT_ASSERT_EQUALS( audioStream->Sinks()[0]->Type(), KMceSpeakerSink ) + EUNIT_ASSERT( audioStream->Sinks()[0]->IsEnabled() ) + + // Enable speaker and check that another speaker is not added on request + // Still existing speaker must be enabled + CMceSpeakerSink* speaker = + static_cast(videoStream->Sinks()[0]); + + speaker->EnableL(); + + MusEngMceUtils::AddSpeakerL( *audioStream ); + + EUNIT_ASSERT_EQUALS( audioStream->Sinks().Count(), 1 ) + EUNIT_ASSERT_EQUALS( audioStream->Sinks()[0]->Type(), KMceSpeakerSink ) + EUNIT_ASSERT( audioStream->Sinks()[0]->IsEnabled() ) + + EUNIT_ASSERT( audioStream->Sinks()[0] == speaker ) + + CleanupStack::PopAndDestroy( audioStream ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_DisableStreamLL() + { + CMceAudioStream* audioStream = CMceAudioStream::NewLC(); + + // Disable only stream + EUNIT_ASSERT( audioStream->IsEnabled() ) + MusEngMceUtils::DisableStreamL( *audioStream ); + EUNIT_ASSERT( !audioStream->IsEnabled() ) + + audioStream->EnableL(); + + // Disable stream and source + CMceRtpSource* rtpSource = CMceRtpSource::NewLC(); + audioStream->SetSourceL( rtpSource ); + CleanupStack::Pop( rtpSource ); + + EUNIT_ASSERT( audioStream->IsEnabled() ) + EUNIT_ASSERT( rtpSource->IsEnabled() ) + MusEngMceUtils::DisableStreamL( *audioStream ); + EUNIT_ASSERT( !audioStream->IsEnabled() ) + EUNIT_ASSERT( !rtpSource->IsEnabled() ) + + audioStream->EnableL(); + rtpSource->EnableL(); + + // Disable stream, source and sinks + CMceSpeakerSink* speaker = CMceSpeakerSink::NewLC(); + audioStream->AddSinkL( speaker ); + CleanupStack::Pop( speaker ); + + EUNIT_ASSERT( audioStream->IsEnabled() ) + EUNIT_ASSERT( rtpSource->IsEnabled() ) + EUNIT_ASSERT( speaker->IsEnabled() ) + MusEngMceUtils::DisableStreamL( *audioStream ); + EUNIT_ASSERT( !audioStream->IsEnabled() ) + EUNIT_ASSERT( !rtpSource->IsEnabled() ) + EUNIT_ASSERT( !speaker->IsEnabled() ) + + CleanupStack::PopAndDestroy( audioStream ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetReceivingDisplayL() + { + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iEmptySession ); + + EUNIT_ASSERT( !display ) + + display = MusEngMceUtils::GetReceivingDisplay( *iVideoOutSession ); + + EUNIT_ASSERT( display ) + EUNIT_ASSERT( display->Type() == KMceDisplaySink ) + EUNIT_ASSERT( display == iReceivingDisplay ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetReceivingDisplayLL() + { + CMceDisplaySink* display = NULL; + + EUNIT_ASSERT_SPECIFIC_LEAVE( MusEngMceUtils::GetReceivingDisplayL( *iEmptySession ), + KErrNotFound ) + + display = MusEngMceUtils::GetReceivingDisplayL( *iVideoOutSession ); + + EUNIT_ASSERT( display ) + EUNIT_ASSERT( display->Type() == KMceDisplaySink ) + EUNIT_ASSERT( display == iReceivingDisplay ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetVfDisplayL() + { + CMceDisplaySink* display = MusEngMceUtils::GetVfDisplay( *iEmptySession ); + + EUNIT_ASSERT( !display ) + + display = MusEngMceUtils::GetVfDisplay( *iVideoOutSession ); + + EUNIT_ASSERT( display ) + EUNIT_ASSERT( display->Type() == KMceDisplaySink ) + EUNIT_ASSERT( display != iReceivingDisplay ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_EnableInactivityTimerL() + { + // Instream not found, nothing is done + EUNIT_ASSERT_EQUALS( MusEngMceUtils::EnableInactivityTimer( *iEmptySession, 1000 ), KErrNotFound ); + + // In stream found + EUNIT_ASSERT_EQUALS( MusEngMceUtils::EnableInactivityTimer( *iVideoOutSession, 1000 ), KErrNone ); + } + +// TEST TABLE + +EUNIT_BEGIN_TEST_TABLE( + UT_MusEngMceUtils, + "UT_MusEngMceUtils", + "UNIT" ) + +EUNIT_TEST( + "IsVideoInStream - test ", + "MusEngMceUtils", + "IsVideoInStream", + "FUNCTIONALITY", + SetupL, UT_IsVideoInStreamL, Teardown) + +EUNIT_TEST( + "IsVideoOutStream - test ", + "MusEngMceUtils", + "IsVideoOutStream", + "FUNCTIONALITY", + SetupL, UT_IsVideoOutStreamL, Teardown) + +EUNIT_TEST( + "IsAudioInStream - test ", + "MusEngMceUtils", + "IsAudioInStream", + "FUNCTIONALITY", + SetupL, UT_IsAudioInStreamL, Teardown) + +EUNIT_TEST( + "GetVideoOutStreamL - test ", + "MusEngMceUtils", + "GetVideoOutStreamL", + "FUNCTIONALITY", + SetupL, UT_GetVideoOutStreamLL, Teardown) + +EUNIT_TEST( + "GetVideoInStreamL - test ", + "MusEngMceUtils", + "GetVideoInStreamL", + "FUNCTIONALITY", + SetupL, UT_GetVideoInStreamLL, Teardown) + +EUNIT_TEST( + "GetRecordingStream - test ", + "MusEngMceUtils", + "GetRecordingStream", + "FUNCTIONALITY", + SetupL, UT_GetRecordingStreamL, Teardown) + +EUNIT_TEST( + "GetMediaSink - test ", + "MusEngMceUtils", + "GetMediaSink", + "FUNCTIONALITY", + SetupL, UT_GetMediaSinkFromStreamL, Teardown) + +EUNIT_TEST( + "GetMediaSinkL - test ", + "MusEngMceUtils", + "GetMediaSinkL", + "FUNCTIONALITY", + SetupL, UT_GetMediaSinkLFromStreamL, Teardown) + +EUNIT_TEST( + "GetMediaSink2 - test ", + "MusEngMceUtils", + "GetMediaSink2", + "FUNCTIONALITY", + SetupL, UT_GetMediaSinkFromSessionL, Teardown) + +EUNIT_TEST( + "GetMediaSinkL2 - test ", + "MusEngMceUtils", + "GetMediaSinkL2", + "FUNCTIONALITY", + SetupL, UT_GetMediaSinkLFromSessionL, Teardown) + +EUNIT_TEST( + "GetCameraL - test ", + "MusEngMceUtils", + "GetCameraL", + "FUNCTIONALITY", + SetupL, UT_GetCameraLL, Teardown) + +EUNIT_TEST( + "GetFileSourceL - test ", + "MusEngMceUtils", + "GetFileSourceL", + "FUNCTIONALITY", + SetupL, UT_GetFileSourceLL, Teardown) + +EUNIT_TEST( + "GetDisplay - test ", + "MusEngMceUtils", + "GetDisplay", + "FUNCTIONALITY", + SetupL, UT_GetDisplayL, Teardown) + +EUNIT_TEST( + "GetDisplayL - test ", + "MusEngMceUtils", + "GetDisplayL", + "FUNCTIONALITY", + SetupL, UT_GetDisplayLL, Teardown) + +EUNIT_TEST( + "AddDisplayL - test ", + "MusEngMceUtils", + "AddDisplayL", + "FUNCTIONALITY", + SetupL, UT_AddDisplayLL, Teardown) + +EUNIT_TEST( + "AddSpeakerL - test ", + "MusEngMceUtils", + "AddSpeakerL", + "FUNCTIONALITY", + SetupL, UT_AddSpeakerLL, Teardown) + +EUNIT_TEST( + "DisableStreamL - test ", + "MusEngMceUtils", + "DisableStreamL", + "FUNCTIONALITY", + SetupL, UT_DisableStreamLL, Teardown) + +EUNIT_TEST( + "GetReceivingDisplay - test ", + "MusEngMceUtils", + "GetReceivingDisplay", + "FUNCTIONALITY", + Setup2L, UT_GetReceivingDisplayL, Teardown) + +EUNIT_TEST( + "GetReceivingDisplayL - test ", + "MusEngMceUtils", + "GetReceivingDisplayL", + "FUNCTIONALITY", + Setup2L, UT_GetReceivingDisplayLL, Teardown) + +EUNIT_TEST( + "GetVfDisplay - test ", + "MusEngMceUtils", + "GetVfDisplay", + "FUNCTIONALITY", + Setup2L, UT_GetVfDisplayL, Teardown) + +EUNIT_TEST( + "EnableInactivityTimer - test ", + "MusEngMceUtils", + "EnableInactivityTimer", + "FUNCTIONALITY", + Setup2L, UT_EnableInactivityTimerL, Teardown) + +EUNIT_END_TEST_TABLE + +// END OF FILE + +