mds_plat/context_engine_plugin_api/tsrc/src/ContextEnginePluginTestBlocks.cpp
changeset 0 c53acadfccc6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mds_plat/context_engine_plugin_api/tsrc/src/ContextEnginePluginTestBlocks.cpp	Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,981 @@
+/*
+* Copyright (c) 2008-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: 
+*
+*/
+
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <ecom.h>
+#include <StifParser.h>
+#include <StifTestEventInterface.h>
+#include <StifTestInterface.h>
+#include "ContextEnginePluginTest.h"
+
+#include <harvesterdata.h>
+#include "mdsutils.h"
+#include "mdeconstants.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CContextEnginePluginTest::Delete() 
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function. 
+
+        // engine		
+        ENTRY( "BeginTestSession", CContextEnginePluginTest::BeginTestSessionL ),
+        ENTRY( "EndTestSession", CContextEnginePluginTest::EndTestSession ),
+        ENTRY( "CreateObjects", CContextEnginePluginTest::CreateObjectsL ),
+        ENTRY( "DeleteObjects", CContextEnginePluginTest::DeleteObjectsL ),
+        ENTRY( "CreateContextEngineWithObserver", CContextEnginePluginTest::CreateContextEngine1L ),
+        ENTRY( "CreateContextEngineWithoutObserver", CContextEnginePluginTest::CreateContextEngine2L ),
+        ENTRY( "ReleaseContextEngineInstance", CContextEnginePluginTest::ReleaseInstanceL ),
+        ENTRY( "SetMdESessionTest", CContextEnginePluginTest::SetMdeSessionL ),
+        ENTRY( "PluginCount", CContextEnginePluginTest::PluginCount ),
+        ENTRY( "Destroy", CContextEnginePluginTest::Destroy ),
+        ENTRY( "ContextEngineStaticData", CContextEnginePluginTest::ContextEngineStaticData ),
+
+        ENTRY( "ContextSnapshots", CContextEnginePluginTest::ContextSnapshotsL ),
+        ENTRY( "MultipleSnapshots", CContextEnginePluginTest::MultipleSnapshotsL ),
+        
+        // plugin
+        ENTRY( "LoadPlugin", CContextEnginePluginTest::LoadPluginL ),
+
+        };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::HandleSessionOpened
+// -----------------------------------------------------------------------------
+//
+void CContextEnginePluginTest::HandleSessionOpened( CMdESession& /*aClient*/, TInt aError )
+    {
+    _LIT( KMsg, "CallBck HandleSessionOpened - Error code : %d" );
+    TBuf <100> msg;
+    msg.Format(KMsg, aError);
+    iLog->Log( msg );     
+    RDebug::Print( msg );
+    
+    // session event
+    TEventIf event( TEventIf::ESetEvent, _L("Session") );
+    TestModuleIf().Event( event );
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::HandleSessionError
+// -----------------------------------------------------------------------------
+//
+void CContextEnginePluginTest::HandleSessionError( CMdESession& /*aClient*/, TInt aError )
+    {
+    _LIT( KMsg, "CallBck HandleSessionError - Error code : %d" );
+    TBuf <100> msg;
+    msg.Format(KMsg, aError);
+    iLog->Log( msg );
+    RDebug::Print( msg );
+    
+    // session event
+    TEventIf event( TEventIf::ESetEvent, _L("Session") );
+    TestModuleIf().Event( event );
+    }   
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::ContextInitializationStatus
+// -----------------------------------------------------------------------------
+//
+void CContextEnginePluginTest::ContextInitializationStatus( TInt aError )
+    {
+    _LIT( KMsg, "CallBck ContextInitializationStatus - Error code : %d" );
+    TBuf <100> msg;
+    msg.Format(KMsg, aError);
+    iLog->Log( msg );
+    RDebug::Print( msg );
+    
+    iInitCount++;
+    
+    // session event
+    TEventIf event( TEventIf::ESetEvent, _L("Init") );
+    TestModuleIf().Event( event );
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::ContextSnapshotStatus
+// -----------------------------------------------------------------------------
+//
+void CContextEnginePluginTest::ContextSnapshotStatus( CHarvesterData* aHD )
+    {
+    _LIT( KMsg1, "Enter ContextSnapshotStatus" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+    
+    _LIT( KMsg, "CallBck ContextSnapshotStatus - Error code : %d" );
+    TBuf <100> msg;
+    msg.Format(KMsg, aHD->ErrorCode());
+    iLog->Log( msg );
+    RDebug::Print( msg );
+    
+    if( !aHD )
+        {
+        iErrorCode = KErrUnknown;
+        }
+    
+    if( aHD && iErrorCode == KErrNone )
+        {
+        iErrorCode = aHD->ErrorCode();
+        }
+    
+    iSnapshotCount++;
+    
+    // session event
+    TEventIf event( TEventIf::ESetEvent, _L("Snapshot") );
+    TestModuleIf().Event( event );
+    
+    _LIT( KMsg2, "Exit ContextSnapshotStatus" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::PluginInitializationStatus
+// -----------------------------------------------------------------------------
+//
+void CContextEnginePluginTest::PluginInitializationStatus( TInt aError )
+    {
+    _LIT( KMsg, "CallBck PluginInitializationStatus - Error code : %d" );
+    TBuf <100> msg;
+    msg.Format(KMsg, aError);
+    iLog->Log( msg );
+    RDebug::Print( msg );
+    
+    iInitCount++;
+    
+    // session event
+    TEventIf event( TEventIf::ESetEvent, _L("Init") );
+    TestModuleIf().Event( event );
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::PluginSnapshotStatus
+// -----------------------------------------------------------------------------
+//
+void CContextEnginePluginTest::PluginSnapshotStatus( CHarvesterData* aHD )
+    {
+    _LIT( KMsg1, "Enter PluginSnapshotStatus" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+    
+    _LIT( KMsg, "CallBck PluginSnapshotStatus - Error code : %d" );
+    TBuf <100> msg;
+    msg.Format(KMsg, aHD->ErrorCode());
+    iLog->Log( msg );
+    RDebug::Print( msg );
+    
+    if( !aHD )
+        {
+        iErrorCode = KErrUnknown;
+        }
+    
+    if( aHD && iErrorCode == KErrNone )
+        {
+        iErrorCode = aHD->ErrorCode();
+        }
+    
+    iSnapshotCount++;
+    
+    // session event
+    TEventIf event( TEventIf::ESetEvent, _L("Snapshot") );
+    TestModuleIf().Event( event );
+    
+    _LIT( KMsg2, "Exit PluginSnapshotStatus" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::ActiveWait
+// -----------------------------------------------------------------------------
+//
+void CContextEnginePluginTest::ActiveWait( TInt aTimeout )
+    {
+    _LIT( KMsg1, "Enter ActiveWait" );
+    iLog->Log( KMsg1 );
+    RDebug::Print( KMsg1 );
+
+    TTimeIntervalMicroSeconds32 timeout( aTimeout );
+    RTimer timer;
+    TRequestStatus status;
+
+    timer.CreateLocal();
+    timer.After(status,timeout);
+
+    User::WaitForAnyRequest();
+    
+    timer.Close();
+    
+    _LIT( KMsg2, "Exit ActiveWait" );
+    iLog->Log( KMsg2 );
+    RDebug::Print( KMsg2 );
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::BeginTestSessionL
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::BeginTestSessionL( CStifItemParser& /* aItem */ )
+    {
+    iMdEClient = NULL;
+    TRAPD( error, iMdEClient = CMdESession::NewL( *this ) );
+    iErrorCode = KErrNone;
+
+    _LIT( KMsg, "Exit BeginTestSession - Error code : %d" );
+    TBuf <100> msg;
+    msg.Format(KMsg, error);
+    iLog->Log( msg );
+    RDebug::Print( msg );
+    
+    iInitCount = 0;
+    iSnapshotCount = 0;
+    iInitTarget = 0;
+    iSnapshotTarget = 0;
+    
+    iPluginSet = EFalse;
+    
+    User::LeaveIfError( error );
+    
+    return KErrNone;
+    }    
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::EndTestSession
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::EndTestSession( CStifItemParser& /* aItem */ )
+	{
+    _LIT( KMsg1, "Enter EndTestSession" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+	
+	iIds.Close();
+	iObjectArray.Close();
+	    
+    if ( iContextEngine )
+        {
+        iContextEngine->ReleaseInstance();
+        iContextEngine = NULL;
+        }
+    
+    if ( iPlugin )
+        {
+        delete iPlugin;
+        iPlugin = NULL;
+        }
+    
+    if ( iLocationPlugin && !iPluginSet )
+        {
+        delete iLocationPlugin;
+        iLocationPlugin = NULL;
+        }
+    
+    if ( iCalendarPlugin )
+        {
+        delete iCalendarPlugin;
+        iCalendarPlugin = NULL;
+        }
+	
+	if ( iMdEClient )
+		{
+	    delete iMdEClient;
+	    iMdEClient = NULL;
+	    }
+	
+	iHD = NULL;
+    
+    REComSession::FinalClose();
+	
+    if( iInitCount != iInitTarget )
+        {
+        return KErrUnknown;
+        }
+    
+    if( iSnapshotCount != iSnapshotTarget )
+        {
+        return KErrUnknown;
+        }
+    
+    _LIT( KMsg2, "Exit EndTestSession" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+	
+    return iErrorCode;
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::CreateObjects
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::CreateObjectsL( CStifItemParser& aItem )
+    {
+	CMdENamespaceDef& defaultNamespace = iMdEClient->GetDefaultNamespaceDefL();
+	CMdEObjectDef& imageDef = defaultNamespace.GetObjectDefL( MdeConstants::Image::KImageObject );
+	
+	// Mandatory parameters for any object.
+	CMdEPropertyDef& creationDef = imageDef.GetPropertyDefL( MdeConstants::Object::KCreationDateProperty );
+	CMdEPropertyDef& modifiedDef = imageDef.GetPropertyDefL( MdeConstants::Object::KLastModifiedDateProperty );
+	CMdEPropertyDef& sizeDef = imageDef.GetPropertyDefL( MdeConstants::Object::KSizeProperty );
+	CMdEPropertyDef& itemTypeDef = imageDef.GetPropertyDefL( MdeConstants::Object::KItemTypeProperty );
+	
+	CMdEPropertyDef& descriptionPropertyDef = imageDef.GetPropertyDefL( MdeConstants::MediaObject::KDescriptionProperty );
+	CMdEPropertyDef& widthDef = imageDef.GetPropertyDefL( MdeConstants::MediaObject::KWidthProperty ); 
+	CMdEPropertyDef& heightDef = imageDef.GetPropertyDefL( MdeConstants::MediaObject::KHeightProperty ); 
+	CMdEPropertyDef& makeDef = imageDef.GetPropertyDefL( MdeConstants::Image::KMakeProperty );
+	CMdEPropertyDef& modelDef = imageDef.GetPropertyDefL( MdeConstants::Image::KModelProperty );
+    
+	CMdEObject* object = NULL;
+	TItemId objectId(0);
+	TTime currTime;
+	TPtrC inputFile;
+	TInt count(0);
+	TBuf <100> msg;
+	
+	iIds.Reset();
+	
+	User::LeaveIfError( aItem.GetNextInt( count ));
+	
+	for ( TInt i = 0; i < count; ++i )
+		{			
+		User::LeaveIfError( aItem.GetNextString( inputFile ));
+		
+		// create object
+		iMdEClient->RemoveObjectL(inputFile);
+		object = iMdEClient->NewObjectLC(imageDef, inputFile);
+		
+		currTime.HomeTime();
+		object->AddTimePropertyL(creationDef, currTime);
+		object->AddTimePropertyL(modifiedDef, currTime);
+		object->AddUint32PropertyL( sizeDef, 0 );
+		object->AddTextPropertyL( itemTypeDef, MdeConstants::Image::KImageObject );
+		
+		objectId = iMdEClient->AddObjectL(*object);
+		iIds.Append(objectId);
+		
+		CleanupStack::PopAndDestroy(object);
+		object = NULL;
+		
+		// open object for modification
+		TRAPD( openError, object = iMdEClient->OpenObjectL(objectId) );
+			
+		if ( !object || openError != KErrNone )
+			{
+			_LIT( KOpenErr, "        ModifyObjects - Open error : %d" );
+		    msg.Format(KOpenErr, openError);
+		    iLog->Log( msg );
+		    RDebug::Print(msg);
+		    
+		    User::LeaveIfError(openError);
+			}
+
+		CleanupStack::PushL( object );		
+		
+		// add properties
+   		CMdEProperty* property = NULL;
+   		
+   		// Description
+   		_LIT( KDesc, "Description" );
+		object->Property( descriptionPropertyDef, property );
+		
+		if ( property )
+			{					
+			property->SetTextValueL( KDesc );
+			}
+		else
+			{
+			object->AddTextPropertyL( descriptionPropertyDef, KDesc );
+			}
+		
+		property = NULL;
+		
+		// Width
+		object->Property( widthDef, property );
+		
+		if ( property )
+			{
+			property->SetUint16ValueL( 100 );
+			}
+		else
+			{
+			object->AddUint16PropertyL( widthDef, 100 );
+			}
+		
+		property = NULL;
+			
+		// Height
+		object->Property( heightDef, property );
+		
+		if ( property )
+			{
+			property->SetUint16ValueL( 100 );
+			}
+		else
+			{
+			object->AddUint16PropertyL( heightDef, 100 );
+			}
+		
+		property = NULL;
+		
+		// Maker
+		object->Property( makeDef, property );
+		
+        _LIT( KOnkia, "Maker" );
+		if ( property )
+			{
+			property->SetTextValueL( KOnkia );
+			}
+		else
+			{
+			object->AddTextPropertyL( makeDef, KOnkia );
+			}
+			
+		property = NULL;
+			
+		// Model
+		object->Property( modelDef, property );
+        _LIT( KModel, "Model" );
+		if ( property )
+			{					
+			property->SetTextValueL( KModel );
+			}
+		else
+			{
+			object->AddTextPropertyL( modelDef, KModel );
+			}
+		
+		// Commit object
+		TRAPD( commitError, iMdEClient->CommitObjectL(*object) );
+		if ( commitError != KErrNone )
+			{		
+			_LIT( KCommErr, "        CreateObjects - Commit error : %d" );
+		    msg.Format(KCommErr, commitError);
+		    iLog->Log( msg );
+		    RDebug::Print(msg);
+		    
+		    User::LeaveIfError(commitError);
+			}
+		
+		CleanupStack::PopAndDestroy(object);
+		object = NULL;
+		}
+	
+    _LIT( KMsg, "Exit    EndCreateObjects" );
+    iLog->Log( KMsg );  
+    RDebug::Print( KMsg );
+	
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::DeleteObjects
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::DeleteObjectsL( CStifItemParser& /* aItem */ )
+    {
+    ActiveWait( 2000000 );
+    
+    _LIT( KMsg1, "Enter EndDeleteObjects" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+    
+	TInt count(0);
+    count = iIds.Count();
+	
+	for ( TInt i = 0; i < count; ++i )
+		{
+		TInt id = iIds[i];
+	    iMdEClient->RemoveObjectL( id );
+		}
+	
+	iIds.Reset();
+    
+    _LIT( KMsg2, "Exit EndDeleteObjects" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+	
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::CreateContextEngine1L
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::CreateContextEngine1L( CStifItemParser& /* aItem */ )
+    {
+    _LIT( KMsg1, "Enter CreateContextEngine" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+    
+    iInitTarget = 1;
+    
+    iContextEngine = NULL;
+    iContextEngine = CContextEngine::GetInstanceL( this );
+    
+    if( !iContextEngine )
+        {
+        User::Leave( KErrUnknown );
+        }
+    
+    _LIT( KMsg2, "Exit CreateContextEngine" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::CreateContextEngine2L
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::CreateContextEngine2L( CStifItemParser& /* aItem */ )
+    {
+    _LIT( KMsg1, "Enter CreateContextEngine" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+    
+    iContextEngine = NULL;
+    iContextEngine = CContextEngine::GetInstanceL();
+    
+    // 4 seconds
+    TTimeIntervalMicroSeconds32 timeout(4000000);
+    RTimer timer;
+    TRequestStatus status;
+
+    timer.CreateLocal();
+    timer.After( status,timeout );
+
+    User::WaitForAnyRequest();
+    
+    timer.Close();
+    
+    if( !iContextEngine )
+        {
+        User::Leave( KErrUnknown );
+        }
+    
+    _LIT( KMsg2, "Exit CreateContextEngine" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+	
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::CreateContextEngine2L
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::ReleaseInstanceL( CStifItemParser& /* aItem */ )
+    {
+    _LIT( KMsg1, "Enter ReleaseInstanceL" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+    
+    if( !iContextEngine )
+        {
+        User::Leave( KErrUnknown );
+        }
+    
+    iContextEngine->ReleaseInstance();
+    
+    iContextEngine = NULL;
+    
+    _LIT( KMsg2, "Exit ReleaseInstanceL" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::CreateContextEngine2L
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::SetMdeSessionL( CStifItemParser& /* aItem */ )
+    {
+    _LIT( KMsg1, "Enter SetMdeSessionL" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+    
+    iInitTarget = 1;
+    
+    iContextEngine = NULL;
+    iContextEngine = CContextEngine::GetInstanceL( this );
+    
+    if( !iContextEngine )
+        {
+        User::Leave( KErrUnknown );
+        }
+    
+    iContextEngine->SetMdeSession( iMdEClient );
+    
+    if( !iContextEngine || !iMdEClient )
+        {
+        User::Leave( KErrUnknown );
+        }
+    
+    iContextEngine->SetMdeSession( NULL );
+    
+    if( !iContextEngine )
+        {
+        User::Leave( KErrUnknown );
+        }
+    
+    _LIT( KMsg2, "Exit SetMdeSessionL" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::ContextSnapshots
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::ContextSnapshotsL( CStifItemParser& aItem )
+    {
+    _LIT( KMsg1, "Enter ContextSnapshots" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+    
+    iSnapshotTarget = 9;
+    
+    const TInt KLoopCount = 3;
+    TInt count = iIds.Count();
+    
+    CMdEObject* mdeObject;
+    iObjectArray.Reset();
+    
+    // choose if plugin tested, otherwise engine
+    TPtrC testPlugin;
+    TBool plugin = EFalse;
+    User::LeaveIfError( aItem.GetNextString( testPlugin ));
+    _LIT( pluginString, "plugin" );
+    if( testPlugin == pluginString )
+    	{
+    	plugin = ETrue;
+    	}
+    
+    // get object
+    mdeObject = iMdEClient->GetObjectL( iIds[0] );
+
+    HBufC* uriBuf = mdeObject->Uri().AllocLC();
+    iHD = CHarvesterData::NewL( uriBuf );
+    iHD->SetMdeObject( mdeObject );
+    CleanupStack::Pop( uriBuf );
+    
+    // snapshots
+    for ( TInt i = 0; i < KLoopCount; i++ )
+        {
+        if (plugin)
+        	{
+        	iPlugin->ContextSnapshot( *this, *iHD );
+        	}
+        else
+        	{
+        	iContextEngine->ContextSnapshot( *this, *iHD );
+        	}
+        }
+    mdeObject = NULL;
+    
+    mdeObject = iMdEClient->GetObjectL( iIds[1] );
+    uriBuf = mdeObject->Uri().AllocLC();
+    iHD = CHarvesterData::NewL( uriBuf );
+    iHD->SetMdeObject( mdeObject );
+    CleanupStack::Pop( uriBuf );
+    
+    // snapshots
+    for ( TInt i = 0; i < KLoopCount; i++ )
+        {
+        if (plugin)
+        	{
+        	iPlugin->ContextSnapshot( *this, *iHD );
+        	}
+        else
+        	{
+        	iContextEngine->ContextSnapshot( *this, *iHD );
+        	}
+        }    
+    mdeObject = NULL;
+    
+    mdeObject = iMdEClient->GetObjectL( iIds[2] );
+    uriBuf = mdeObject->Uri().AllocLC();
+    iHD = CHarvesterData::NewL( uriBuf );
+    iHD->SetMdeObject( mdeObject );
+    CleanupStack::Pop( uriBuf );
+    
+    // snapshots
+    for ( TInt i = 0; i < KLoopCount; i++ )
+        {
+        if (plugin)
+        	{
+        	iPlugin->ContextSnapshot( *this, *iHD );
+        	}
+        else
+        	{
+        	iContextEngine->ContextSnapshot( *this, *iHD );
+        	}
+        }  
+    
+    _LIT( KMsg2, "Exit ContextSnapshots" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::MultipleSnapshots
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::MultipleSnapshotsL( CStifItemParser& aItem )
+    {
+    _LIT( KMsg1, "Enter MultipleSnapshots" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+    
+    iSnapshotTarget = 3;
+    
+    TInt count = iIds.Count();
+    
+    CMdEObject* mdeObject;
+    iObjectArray.Reset();
+    
+    // choose if plugin tested, otherwise engine
+    TPtrC testPlugin;
+    TBool plugin = EFalse;
+    User::LeaveIfError( aItem.GetNextString( testPlugin ));
+    _LIT( pluginString, "plugin" );
+    if( testPlugin == pluginString )
+    	{
+    	plugin = ETrue;
+    	}
+    
+    // multiple objects
+	for ( TInt i = 0; i < count; ++i )
+		{
+	    iHD = NULL;
+	    mdeObject = NULL;
+		
+	    mdeObject = iMdEClient->GetObjectL( iIds[i] );
+	    HBufC* uriBuf = mdeObject->Uri().AllocLC();
+	    iHD = CHarvesterData::NewL( uriBuf );
+	    iHD->SetMdeObject( mdeObject );
+	    CleanupStack::Pop( uriBuf );
+	    
+	    iObjectArray.Append( iHD );
+		}
+	
+	// snapshots
+    if( plugin )
+		{
+		iPlugin->ContextSnapshot( *this, iObjectArray );
+		}
+	else
+		{
+		iContextEngine->ContextSnapshot( *this, iObjectArray );
+		}
+    
+    _LIT( KMsg2, "Exit MultipleSnapshots" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::PluginCount
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::PluginCount( CStifItemParser& /* aItem */ )
+    {
+    _LIT( KMsg1, "Enter PluginCount" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+    
+    TInt count(0);
+    count = iContextEngine->PluginCount();
+    
+    if( count != 2 )
+        {
+        return KErrNotFound;
+        }
+    
+    _LIT( KMsg, "Exit PluginCount : %d" );
+    TBuf <100> msg;
+    msg.Format(KMsg, count);
+    iLog->Log( msg );
+    RDebug::Print(msg);
+	
+    _LIT( KMsg2, "Enter PluginCount" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::Destroy
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::Destroy( CStifItemParser& /* aItem */ )
+    {
+    _LIT( KMsg1, "Enter Destroy" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+    
+    iContextEngine->Destroy();
+	
+    _LIT( KMsg2, "Exit Destroy" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::ContextEngineStaticData
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::ContextEngineStaticData( CStifItemParser& /* aItem */ )
+    {
+    _LIT( KMsg1, "Enter ContextEngineStaticData" );
+    iLog->Log( KMsg1 );  
+    RDebug::Print( KMsg1 );
+    
+    const TInt KContextEngineTLSKey = 0x200009f6;
+    
+    CContextEngineStaticData* data = static_cast<CContextEngineStaticData*>(
+            UserSvr::DllTls(KContextEngineTLSKey) );
+    
+    if( !data )
+        {
+        return KErrUnknown;
+        }
+    
+    _LIT( KMsg2, "Exit ContextEngineStaticData" );
+    iLog->Log( KMsg2 );  
+    RDebug::Print( KMsg2 );
+	
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CContextEnginePluginTest::LoadPluginL
+// -----------------------------------------------------------------------------
+//
+TInt CContextEnginePluginTest::LoadPluginL( CStifItemParser& /* aItem */ )
+    {
+    _LIT( KMsg1, "Enter LoadPlugins" );
+    iLog->Log( KMsg1 );
+    RDebug::Print( KMsg1 );
+    
+    iInitTarget = 2;
+    
+    TUid calendarContextUID = { 0x102823CB }; // calendar context plugin uid
+    TUid locationContextUID = { 0x200071D0 }; // location context plugin uid
+    
+    RImplInfoPtrArray infoArray;
+    	
+	TCleanupItem cleanupItem( MdsUtils::CleanupEComArray, &infoArray );
+	CleanupStack::PushL( cleanupItem );
+	
+	CContextPlugin::ListImplementationsL( infoArray );
+	TInt count( 0 );
+	count = infoArray.Count();
+	
+	TBool locationPluginFound( EFalse );
+	TBool calendarPluginFound( EFalse );
+	for ( TInt i=0; i < count; i++ )
+		{
+		TUid uid = infoArray[i]->ImplementationUid();
+		
+		// context plugin found
+		if( uid == locationContextUID )
+			{
+			iLocationPlugin = CContextPlugin::NewL( uid );
+			iLocationPlugin->SetMdeSession(*iMdEClient);
+			iLocationPlugin->Init(*this);
+			locationPluginFound = ETrue;
+			iPlugin = iLocationPlugin;
+			iPluginSet = ETrue;
+			}		
+		else if( uid == calendarContextUID )
+	        {
+	        iCalendarPlugin = CContextPlugin::NewL( uid );
+	        iCalendarPlugin->SetMdeSession(*iMdEClient);
+	        iCalendarPlugin->Init(*this);
+	        calendarPluginFound = ETrue;
+	        }   
+		}
+	
+	CleanupStack::PopAndDestroy( &infoArray ); // infoArray, results in a call to CleanupEComArray
+    
+	if( !locationPluginFound )
+	    {
+	    _LIT( KLocation, "Location context plugin not found" );
+	    iLog->Log( KLocation );
+	    RDebug::Print( KLocation );
+	    return KErrNotFound;
+	    }
+	
+    if( !calendarPluginFound )
+        {
+        _LIT( KCalendar, "Calendar context plugin not found" );
+        iLog->Log( KCalendar );
+        RDebug::Print( KCalendar );
+        return KErrNotFound;
+        }
+    
+    _LIT( KMsg2, "Exit LoadPlugins" );
+    iLog->Log( KMsg2 );
+    RDebug::Print( KMsg2 );
+    
+    return KErrNone;
+    }
+
+//  [End of File] - Do not remove