--- /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 <digia/eunit/eunitmacros.h>
+
+#include <mcemanager.h>
+#include <mceoutsession.h>
+#include <mcevideostream.h>
+#include <mceaudiostream.h>
+#include <mcertpsink.h>
+#include <mcedisplaysink.h>
+#include <mcecamerasource.h>
+#include <mcefilesource.h>
+#include <mcespeakersink.h>
+#include <mcertpsource.h>
+#include <mcefilesink.h>
+
+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<CMceVideoStream*>(
+ 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<CMceDisplaySink*>(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<CMceSpeakerSink*>(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
+
+