locationmgmt/locmonitor/test/LocInfoConversionUnitTest/src/LocInfoConversionUnitTestBlocks.cpp
changeset 40 18280709ae43
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationmgmt/locmonitor/test/LocInfoConversionUnitTest/src/LocInfoConversionUnitTestBlocks.cpp	Fri Jun 11 15:06:31 2010 +0300
@@ -0,0 +1,2017 @@
+/*
+* 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: This file contains testclass implementation.
+*
+*/
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+
+#include "LocInfoConversionUnitTest.h"
+#include "rlbslocmonitorsession.h"
+#include "rlbslocinfoconverter.h"
+#include "rlbslocmonitorareapositioner.h"
+#include <lbs/lbslocationinfo.h>
+#include <lbs/lbslocationcommon.h>
+#include "lbsposition.h"
+
+
+// Plug in 
+const TInt KDummyPluginId = 537007117;
+const TInt KSuplPluginId = 537028467;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CLocInfoConversionUnitTest::Delete() 
+    {
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        ENTRY( "UnitTest1", CLocInfoConversionUnitTest::RLbsLocInfoConverter_Connect1L ),
+        ENTRY( "UnitTest2", CLocInfoConversionUnitTest::RLbsLocInfoConverter_Connect2L ),
+        ENTRY( "UnitTest3", CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo1L ),
+        ENTRY( "UnitTest4", CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo2L ),
+        ENTRY( "UnitTest5", CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo3L ),
+        ENTRY( "UnitTest6", CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo4L ),
+        ENTRY( "UnitTest7", CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo5L ),
+        ENTRY( "UnitTest8", CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo6L ),
+        ENTRY( "UnitTest9", CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo7L ),
+        ENTRY( "UnitTest10", CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo8L ),
+        ENTRY( "UnitTest11", CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo9L ),
+        ENTRY( "UnitTest12", CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo10L ),
+        ENTRY( "UnitTest13", CLocInfoConversionUnitTest::RLbsLocInfoConverter_Cancel1L ),
+        ENTRY( "UnitTest14", CLocInfoConversionUnitTest::RLbsLocInfoConverter_Cancel2L ),
+        ENTRY( "UnitTest15", CLocInfoConversionUnitTest::RLbsLocInfoConverter_Cancel3L ),
+        ENTRY( "UnitTest16", CLocInfoConversionUnitTest::RLbsLocInfoConverter_Cancel4L ),
+        };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_Connect1
+// simple session and subsession.
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_Connect1L(CStifItemParser& /*aItem*/ )
+   {
+   TInt error;
+   RLbsLocMonitorSession locMonitorSession;
+   error = locMonitorSession.Connect();
+   if( error != KErrNone )
+       {
+       return error;
+       }
+   CleanupClosePushL( locMonitorSession );
+   RLbsLocInfoConverter locInfoConverter;
+   CleanupClosePushL( locInfoConverter );
+   locInfoConverter.OpenL( locMonitorSession );
+   locInfoConverter.Close();
+   CleanupStack::PopAndDestroy( 2 ); // locInfoConverter,locMonitorSession 
+   return KErrNone;
+   }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_Connect2
+// Opening multiple subsession from single session
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_Connect2L(CStifItemParser& /*aItem*/ )
+   {
+   RLbsLocMonitorSession locMonitorSession;
+   TInt error = locMonitorSession.Connect();
+   if( error != KErrNone )
+       {
+       return error;
+       }
+   CleanupClosePushL( locMonitorSession );
+   RLbsLocInfoConverter locInfoConverter;
+   CleanupClosePushL( locInfoConverter );
+   RLbsLocInfoConverter locInfoConverter1;
+   CleanupClosePushL( locInfoConverter1 );
+   
+   locInfoConverter.OpenL( locMonitorSession );
+   locInfoConverter1.OpenL( locMonitorSession );
+   locInfoConverter.Close();
+   locInfoConverter1.Close();
+   
+   CleanupStack::PopAndDestroy( 3 ); //locInfoConverter1,locInfoConverter and
+                                     //locMonitorSession
+   return KErrNone;
+   }
+
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo1L
+// This test case tests the simple and corner case related 
+// to RLbsLocInfoConverter::ConvertLocationInfoL
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo1L(CStifItemParser& /*aItem*/ )
+    {
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+       {
+       return error;
+       }
+    CleanupClosePushL( locMonitorSession );
+    RLbsLocInfoConverter locInfoConverter;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+
+    TUid conversionModuleId = TUid::Uid( KDummyPluginId );
+    
+    /**
+     * Case 1: where NULL pointer is passed instead of location info
+     */
+    error = KErrNone;
+    CLbsLocationInfo* locationInfo = CLbsLocationInfo::NewL();
+    CleanupStack::PushL( locationInfo );
+    TRAP( error,locInfoConverter.ConvertLocationInfoL( 
+                  *locationInfo,ELbsConversionNotDefined,ELbsConversionOutputPosition,
+                  conversionModuleId,iConversionHandler->iStatus ));
+    if( error!= KErrArgument )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    /**
+     * Case 2: where we pass location info.This is
+     * just test where this method completes without leaving.
+     */ 
+    
+    // Here we append gsmcell info object to the existing location info object.
+    AppendAreaInfoObjectToLocationInfoL( locationInfo,ELbsAreaGsmCellInfoClass );
+
+    locInfoConverter.ConvertLocationInfoL( 
+                  *locationInfo,ELbsConversionNotDefined,
+                  ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    locInfoConverter.CancelConvertLocationInfo();
+    iConversionHandler->Cancel();
+    CleanupStack::PopAndDestroy( locationInfo );
+    
+    /**
+     * Case 3. Empty location info array is passed.
+     */  
+    error = KErrNone;
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray;
+    CleanupClosePushL( locationInfoArray );
+    TRAP( error,locInfoConverter.ConvertLocationInfoL( 
+            locationInfoArray,ELbsConversionNotDefined,
+            ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus ));
+
+    if( error != KErrArgument )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    /**
+     * Case 4: where we pass location info array.This is 
+     * just test where this method completes without leaving.
+     */
+    
+    // Here we create locationInfo object with gsm cell info object contained in it.
+    CLbsLocationInfo* locationInfo1 = CreateLocationInfoObjectLC( ELbsAreaGsmCellInfoClass );
+    locationInfoArray.Append( locationInfo1 );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+                locationInfoArray,ELbsConversionNotDefined,
+                ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus  );
+    iConversionHandler->Start();
+    locInfoConverter.CancelConvertLocationInfo();
+    iConversionHandler->Cancel();
+    
+    CleanupStack::Pop( 2 ); //locationInfo1,locationInfoArray
+    locationInfoArray.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 2 ); // locInfoConverter,locMonitorSession
+    return KErrNone;
+    }   
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo2L
+// This test case tests ConvertLocationInfo when expected information is
+// of type ECoordinate
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo2L(CStifItemParser& /*aItem*/ )
+    {
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+        {
+        return error;
+        }
+    CleanupClosePushL( locMonitorSession );
+    RLbsLocInfoConverter locInfoConverter;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray;
+    CleanupClosePushL( locationInfoArray );
+
+    TUid conversionModuleId = TUid::Uid( KDummyPluginId );
+    
+    /**
+     *  case 1: Any information regarding the area is passed and 
+     *  coordinate corresponding to that area info is expected.
+     */
+    
+    // Here GSM cell info is passed as input area.
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaGsmCellInfoClass );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+                  *locationInfo,ELbsConversionNotDefined,ELbsConversionOutputPosition
+                  ,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    CActiveScheduler::Start();
+    
+    error = iConversionHandler->iStatus.Int();
+    // If the conversion status is KErrNone, check for the corresponding 
+    // converted info.
+    if( error == KErrNone )
+        {
+        CheckPositionConvertedInfoL( locationInfo );
+        }
+    // KErrNotSupported and KErrNotFound are allowed error codes.
+    else if( !( error == KErrNotSupported || error == KErrNotFound ) )
+        {
+        User::Leave( KErrArgument );
+        }
+   
+    /**
+     * case 2: Pass any information related to multiple area and we expect coordinate information
+     * corresponding to each area information.
+     */
+   
+    // Create one more location info object which holds wlan info for which corresponding coordinate
+    // is expected.
+    CLbsLocationInfo* locationInfo2 = CreateLocationInfoObjectLC( ELbsAreaWlanInfoClass );
+    
+    // Before pushing location info object, remove the converted info from it.
+    // We had requested for coordinate info, hence we need to clear it before
+    // we use it as input for next conversion.
+    locationInfo->ResetAreaInfo( CLbsLocationInfo::ELbsPosInfo );
+    locationInfoArray.Append( locationInfo );
+    
+    locationInfoArray.Append( locationInfo2 );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+            locationInfoArray,ELbsConversionNotDefined,
+            ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    error = iConversionHandler->iStatus.Int();
+    // Iterate through the array and check for converted info.
+    if( error == KErrNone )
+        {
+        for( TInt i=0;i<locationInfoArray.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckPositionConvertedInfoL( locationInfo );
+            }
+        }
+    // KErrNotSupported and KErrNotFound are allowed error codes.
+    else if( !( error == KErrNotSupported || error == KErrNotFound ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    CleanupStack::Pop( 3 ); // locationInfo,locationInfo1,locationInfoArray
+    locationInfoArray.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 2 );  // locInfoConverter,locMonitorSession
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo3L
+// This test case tests ConvertLocationInfo when expected information is
+// of type EGsm
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo3L(CStifItemParser& /*aItem*/ )
+    {
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+        {
+        return error;
+        }
+    CleanupClosePushL( locMonitorSession );
+    RLbsLocInfoConverter locInfoConverter;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray;
+    CleanupClosePushL( locationInfoArray );
+
+    TUid conversionModuleId = TUid::Uid( KDummyPluginId );;
+
+    /**
+     * case 1: Pass any area info and we expect GSM cell info
+     */
+    
+    // Here WLAN info is passed as input area.
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaWlanInfoClass );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+                  *locationInfo,ELbsConversionCacheOnly,ELbsConversionOutputGsm,
+                  conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    error = iConversionHandler->iStatus.Int();
+    // If the conversion status is success, check for the corresponding 
+    // converted info.
+    if( error == KErrNone )
+        {
+        CheckGsmCellConvertedInfoL( locationInfo );
+        }
+    // KErrNotSupported and KErrNotFound are allowed error codes.
+    else if( !( error == KErrNotSupported || error == KErrNotFound ) )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    /**
+     * case 2: Pass any information related to multiple area and we expect GSM cell info
+     * corresponding to each area information.
+     */
+    
+    // Create one more location info object which holds coordinate info for which corresponding GSM
+    // cell info is expected.
+    CLbsLocationInfo* locationInfo1 = CreateLocationInfoObjectLC( ELbsAreaPositionInfoClass );
+    
+    // Before pushing location info object, remove the converted info from it.
+    // We had requested for GSM cell info, hence we need to clear it before
+    // we use it for next conversion.
+    locationInfo->ResetAreaInfo( CLbsLocationInfo::ELbsGsmInfo );
+    locationInfoArray.Append( locationInfo );
+    locationInfoArray.Append( locationInfo1 );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+            locationInfoArray,ELbsConversionCacheOnly,ELbsConversionOutputGsm,
+            conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    error = iConversionHandler->iStatus.Int();
+    // Iterate through the array and check for converted info.
+    if( error == KErrNone )
+        {
+        for( TInt i=0;i<locationInfoArray.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckGsmCellConvertedInfoL( locationInfo );
+            }
+        }
+    // KErrNotSupported and KErrNotFound are allowed error codes.
+    else if( !( error == KErrNotSupported || error == KErrNotFound ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    CleanupStack::Pop( 3 ); // locationInfo,locationInfo1,locationInfoArray
+    locationInfoArray.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 2 );  // locInfoConverter,locMonitorSession
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo4L
+//This test case tests ConvertLocationInfo when expected information is
+// of type EWcdma
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo4L(CStifItemParser& /*aItem*/ )
+    {
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+        {
+        return error;
+        }
+    CleanupClosePushL( locMonitorSession );
+    RLbsLocInfoConverter locInfoConverter;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray;
+    CleanupClosePushL( locationInfoArray );
+    
+    TUid conversionModuleId = TUid::Uid( KDummyPluginId );
+
+    /**
+     *  case 1: Pass any area info pointer and we expect EWcdma type
+     */
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaPositionInfoClass );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+                  *locationInfo,ELbsConversionSilent,ELbsConversionOutputWcdma,
+                   conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    error = iConversionHandler->iStatus.Int();
+    // If the conversion status is success, check for the corresponding 
+    // converted info.
+    if( error == KErrNone )
+        {
+        CheckWcdmaCellConvertedInfoL( locationInfo );
+        }
+    // KErrNotSupported and KErrNotFound are allowed error codes.
+    else if( !( error == KErrNotSupported || error == KErrNotFound ) )
+        {
+        User::Leave( KErrArgument );
+        }
+  
+    /**
+     *  case 2: Pass any information related to multiple area and we expect wcdma information
+     * corresponding to each area information.
+     */
+    
+    // Create one more location info object which holds wlan info for which corresponding WCDMA 
+    // cell info is expected.
+    CLbsLocationInfo* locationInfo1 = CreateLocationInfoObjectLC( ELbsAreaWlanInfoClass );
+    
+    // Before pushing location info object, remove the converted info from it.
+    // We had requested for WCDMA info, hence we need to clear it before
+    // we use it as input for next conversion.
+    locationInfo->ResetAreaInfo( CLbsLocationInfo::ELbsWcdmaInfo );
+    locationInfoArray.Append( locationInfo );
+    locationInfoArray.Append( locationInfo1 );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+            locationInfoArray,ELbsConversionSilent,ELbsConversionOutputWcdma,
+            conversionModuleId,iConversionHandler->iStatus );
+    
+    iConversionHandler->Start();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    error = iConversionHandler->iStatus.Int();
+    // Iterate through the array and check for converted info.
+    if( error == KErrNone )
+        {
+        for( TInt i=0;i<locationInfoArray.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckWcdmaCellConvertedInfoL( locationInfo );
+            }
+        }
+    // KErrNotSupported and KErrNotFound are allowed error codes.
+    else if( !( error == KErrNotSupported || error == KErrNotFound ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    CleanupStack::Pop( 3 ); // locationInfo,locationInfo1,locationInfoArray
+    locationInfoArray.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 2 );  // locInfoConverter,locMonitorSession
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo5L
+// This test case tests ConvertLocationInfo when expected information is
+// of type EWlan
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo5L(CStifItemParser& /*aItem*/ )
+    {
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+        {
+        return error;
+        }
+    CleanupClosePushL( locMonitorSession );
+    RLbsLocInfoConverter locInfoConverter;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray;
+    CleanupClosePushL( locationInfoArray );
+    
+    TUid conversionModuleId = TUid::Uid( KDummyPluginId );
+
+    /**
+     * case 1: Pass any area info pointer and we expect EWlan type
+     */
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaWcmdaCellInfoClass );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+                  *locationInfo,ELbsConversionCacheOnly,ELbsConversionOutputWlan,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // If the conversion status is success, check for the corresponding 
+    // converted info.
+    if( iConversionHandler->iStatus == KErrNone )
+        {
+        CheckWlanConvertedInfoL( locationInfo );
+        }
+    // KErrNotSupported and KErrNotFound are allowed error codes.
+    else if( !( iConversionHandler->iStatus == KErrNotSupported || iConversionHandler->iStatus == KErrNotFound ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+   /**
+    * Case 2: Pass any information related to multiple area and we expect Wlan info
+    * corresponding to each area information.
+    */
+   
+    // Create one more location info object which holds coordinate info for which corresponding 
+    // Wlan info is expected.
+    CLbsLocationInfo* locationInfo1 = CreateLocationInfoObjectLC( ELbsAreaPositionInfoClass );
+    
+    // Before pushing location info object, remove the converted info from it.
+    // We had requested for wlan info, hence we need to clear it before
+    // we use it for next conversion.
+    locationInfo->ResetAreaInfo( CLbsLocationInfo::ELbsWlanInfo );
+    locationInfoArray.Append( locationInfo );
+    locationInfoArray.Append( locationInfo1 );
+    
+    TRequestStatus status;
+    locInfoConverter.ConvertLocationInfoL( 
+            locationInfoArray,ELbsConversionCacheOnly,ELbsConversionOutputWlan,conversionModuleId,iConversionHandler->iStatus);
+    iConversionHandler->Start();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Iterate through the array and check for converted info.
+    if( iConversionHandler->iStatus == KErrNone )
+        {
+        for( TInt i=0;i<locationInfoArray.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckWlanConvertedInfoL( locationInfo );
+            }
+        }
+    // KErrNotSupported and KErrNotFound are allowed error codes.
+    else if( !( iConversionHandler->iStatus == KErrNotSupported || iConversionHandler->iStatus == KErrNotFound ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    CleanupStack::Pop( 3 ); // locationInfo,locationInfo1,locationInfoArray
+    locationInfoArray.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 2 );  // locInfoConverter,locMonitorSession
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo6L
+// This test case tests the scenario when user tries to request new single 
+// conversion without waiting for completion of previous one.
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo6L(CStifItemParser& /*aItem*/ )
+    {
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+       {
+       return error;
+       }
+    CleanupClosePushL( locMonitorSession );
+    RLbsLocInfoConverter locInfoConverter;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+    TUid conversionModuleId = TUid::Uid( KDummyPluginId );
+    
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaGsmCellInfoClass );
+    
+    // Here in this case input area doesnt matter 
+    locInfoConverter.ConvertLocationInfoL(  
+                  *locationInfo,ELbsConversionNotDefined,
+                  ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    CLbsLocationInfo* locationInfo1 = CreateLocationInfoObjectLC( ELbsAreaWcmdaCellInfoClass );
+    
+    error = KErrNone;
+    TRequestStatus status;
+    TestModuleIf().SetExitReason( CTestModuleIf::EPanic, 0);
+    locInfoConverter.ConvertLocationInfoL( 
+          *locationInfo1,ELbsConversionNotDefined,
+          ELbsConversionOutputPosition,conversionModuleId,status );
+    
+    CleanupStack::PopAndDestroy( 2 ); // locationInfo1,locationInfo
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo7L
+// This test case tests the scenario when user tries to request new batch 
+// conversion without waiting for completion of previous one.
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo7L(CStifItemParser& /*aItem*/ )
+    {
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+       {
+       return error;
+       }
+    CleanupClosePushL( locMonitorSession );
+    RLbsLocInfoConverter locInfoConverter;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+    TUid conversionModuleId = TUid::Uid( KNullUidValue );;
+    
+    // Here in this case input area doesnt matter 
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray;
+    CleanupClosePushL( locationInfoArray );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray1;
+    CleanupClosePushL( locationInfoArray1 );
+      
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaGsmCellInfoClass );
+    
+    CLbsLocationInfo* locationInfo1 = CreateLocationInfoObjectLC( ELbsAreaWlanInfoClass );
+    
+    locationInfoArray.Append( locationInfo );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+                locationInfoArray,ELbsConversionNotDefined,
+                ELbsConversionOutputPosition,conversionModuleId ,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    locationInfoArray1.Append( locationInfo1 );
+    
+    TRequestStatus status;
+    TestModuleIf().SetExitReason( CTestModuleIf::EPanic, 0);
+    locInfoConverter.ConvertLocationInfoL( 
+            locationInfoArray1,ELbsConversionNotDefined,
+            ELbsConversionOutputPosition,conversionModuleId,status );
+    
+    CleanupStack::Pop(4); // locationInfo1,locationInfoArray1,locationInfo,locationInfoArray
+    locationInfoArray.ResetAndDestroy();
+    locationInfoArray1.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 2 ); // locInfoConverter,locMonitorSession
+    return KErrNone;
+    }   
+
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo8L
+// This test case tests the scenario when user tries to request two conversion
+// using two subsessions simultaneously specifying same plugin.
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo8L(CStifItemParser& /*aItem*/ )
+    {
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+       {
+       return error;
+       }
+    CleanupClosePushL( locMonitorSession );
+    
+    // Here we need to open two subsessions.
+    RLbsLocInfoConverter locInfoConverter,locInfoConverter1;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+    CleanupClosePushL( locInfoConverter1 );
+    locInfoConverter1.OpenL( locMonitorSession );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray;
+    CleanupClosePushL( locationInfoArray );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray1;
+    CleanupClosePushL( locationInfoArray1 );
+    
+    TUid conversionModuleId = TUid::Uid( KDummyPluginId );
+    
+    /**
+     * Case 1: Users tries to request 2 simultaneous single conversion
+     *         using 2 subsession specifying same conversion uid.
+     */
+    
+    // Here type of area input doesnt matter.
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaGsmCellInfoClass );
+    
+    CLbsLocationInfo* locationInfo1 = CreateLocationInfoObjectLC( ELbsAreaGsmCellInfoClass );
+    
+    locInfoConverter.ConvertLocationInfoL(  
+                  *locationInfo,ELbsConversionNotDefined,
+                  ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    locInfoConverter1.ConvertLocationInfoL( 
+          *locationInfo1,ELbsConversionNotDefined,
+          ELbsConversionOutputPosition,conversionModuleId,iConversionHandler1->iStatus );
+    iConversionHandler1->Start();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Here we need to wait till both the request completes.Hence we need to block it once again
+    // till the 2nd request completes.
+    if( iConversionHandler->iStatus.Int() == KRequestPending || 
+        iConversionHandler1->iStatus.Int() == KRequestPending )
+        {
+        CActiveScheduler::Start();
+        }
+        
+    // Check the converted values in both the conversions.
+    error = iConversionHandler->iStatus.Int();
+    if( error == KErrNone )
+        {
+        CheckPositionConvertedInfoL( locationInfo );
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    error = iConversionHandler1->iStatus.Int();
+    if( error == KErrNone )
+        {
+        CheckPositionConvertedInfoL( locationInfo1 );
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    /**
+     * Case 2: Users tries to request 2 simultaneous bulk conversion
+     *         using 2 subsession specifying same conversion uid.
+     */
+    
+    // Before we append the location info object to the info array,
+    // we need to clear the converted info in each object.
+    locationInfo->ResetAreaInfo( CLbsLocationInfo::ELbsPosInfo);
+    locationInfo1->ResetAreaInfo( CLbsLocationInfo::ELbsPosInfo );
+    
+    locationInfoArray.Append( locationInfo );
+    locationInfoArray1.Append( locationInfo1 );
+    
+    locInfoConverter.ConvertLocationInfoL(  
+                  locationInfoArray,ELbsConversionNotDefined,
+                  ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    locInfoConverter1.ConvertLocationInfoL( 
+            locationInfoArray1,ELbsConversionNotDefined,
+          ELbsConversionOutputPosition,conversionModuleId,iConversionHandler1->iStatus );
+    iConversionHandler1->Start();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Here we need to wait till both the request completes.Hence we need to block it once again
+    // till the 2nd request completes.
+    if( iConversionHandler->iStatus.Int() == KRequestPending || 
+        iConversionHandler1->iStatus.Int() == KRequestPending )
+        {
+        CActiveScheduler::Start();
+        }
+    
+    // Check the converted values in both the conversions.
+    // Iterate through the array and check for converted info.
+    error = iConversionHandler->iStatus.Int();
+    if( error == KErrNone )
+        {
+        for( TInt i=0;i<locationInfoArray.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckPositionConvertedInfoL( locationInfo );
+            }
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    error = iConversionHandler1->iStatus.Int();
+    if( error == KErrNone )
+        {
+        for( TInt i=0;i<locationInfoArray1.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray1[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckPositionConvertedInfoL( locationInfo );
+            }
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    CleanupStack::Pop(4); // locationInfo1,locationInfoArray1,locationInfo,locationInfoArray
+    locationInfoArray.ResetAndDestroy();
+    locationInfoArray1.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 3 ); // locInfoConverter,locInfoConverter1,locMonitorSession
+    return KErrNone;
+    }   
+
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo9L
+// This test case tests the scenario when user tries to request two conversion
+// using two subsessions simultaneously specifying different plugin.
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo9L(CStifItemParser& /*aItem*/ )
+    {
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+       {
+       return error;
+       }
+    CleanupClosePushL( locMonitorSession );
+    
+    // Here we need two subsessions
+    RLbsLocInfoConverter locInfoConverter,locInfoConverter1;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+    CleanupClosePushL( locInfoConverter1 );
+    locInfoConverter1.OpenL( locMonitorSession );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray;
+    CleanupClosePushL( locationInfoArray );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray1;
+    CleanupClosePushL( locationInfoArray1 );
+    
+    TUid conversionModuleId1 = TUid::Uid( KDummyPluginId );
+    TUid conversionModuleId2 = TUid::Uid( KSuplPluginId );
+    
+    /**
+     * Case 1: Users tries to request 2 simultaneous single conversion
+     *         using 2 subsession specifying different conversion uid.
+     */
+    
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaWcmdaCellInfoClass );
+    
+    CLbsLocationInfo* locationInfo1 = CreateLocationInfoObjectLC( ELbsAreaWlanInfoClass );
+
+    locInfoConverter.ConvertLocationInfoL(  
+                  *locationInfo,ELbsConversionNotDefined,
+                  ELbsConversionOutputPosition,conversionModuleId1,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    locInfoConverter1.ConvertLocationInfoL( 
+          *locationInfo1,ELbsConversionNotDefined,
+          ELbsConversionOutputPosition,conversionModuleId2,iConversionHandler1->iStatus );
+    iConversionHandler1->Start();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Here we need to wait till both the request completes.Hence we need to block it once again
+    // till the 2nd request completes.
+    if( iConversionHandler->iStatus.Int() == KRequestPending || 
+        iConversionHandler1->iStatus.Int() == KRequestPending )
+        {
+        CActiveScheduler::Start();
+        }
+        
+    // Check the converted values in both the conversions.
+    error = iConversionHandler->iStatus.Int();
+    if( error == KErrNone )
+        {
+        CheckPositionConvertedInfoL( locationInfo );
+        }
+    else if( !( error == KErrNotFound || error == KErrNotSupported ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    error = iConversionHandler1->iStatus.Int();
+    if( error == KErrNone )
+        {
+        CheckPositionConvertedInfoL( locationInfo1 );
+        }
+    else if( !( error == KErrNotFound || error == KErrNotSupported ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    /**
+     * Case 2: Users tries to request 2 simultaneous bulk conversion
+     *         using 2 subsession specifying same conversion uid.
+     */
+    
+    // Before we append the location info object to the info array,
+    // we need to clear the converted info in each object.
+    locationInfo->ResetAreaInfo( CLbsLocationInfo::ELbsPosInfo );
+    locationInfo1->ResetAreaInfo( CLbsLocationInfo::ELbsPosInfo );
+    
+    locationInfoArray.Append( locationInfo );
+    locationInfoArray1.Append( locationInfo1 );
+    
+    locInfoConverter.ConvertLocationInfoL(  
+                  locationInfoArray,ELbsConversionNotDefined,
+                  ELbsConversionOutputPosition,conversionModuleId1,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    locInfoConverter1.ConvertLocationInfoL( 
+            locationInfoArray1,ELbsConversionNotDefined,
+          ELbsConversionOutputPosition,conversionModuleId2,iConversionHandler1->iStatus );
+    iConversionHandler1->Start();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Here we need to wait till both the request completes.Hence we need to block it once again
+    // till the 2nd request completes.
+    if( iConversionHandler->iStatus.Int() == KRequestPending || 
+        iConversionHandler1->iStatus.Int() == KRequestPending )
+        {
+        CActiveScheduler::Start();
+        }
+    
+    // Check the converted values in both the conversions.
+    // Iterate through the array and check for converted info.
+    error = iConversionHandler->iStatus.Int();
+    if( error == KErrNone )
+        {
+        for( TInt i=0;i<locationInfoArray.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckPositionConvertedInfoL( locationInfo );
+            }
+        }
+    else if( !( error == KErrNotFound || error == KErrNotSupported ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    error = iConversionHandler1->iStatus.Int();
+    if( error == KErrNone )
+        {
+        for( TInt i=0;i<locationInfoArray1.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray1[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckPositionConvertedInfoL( locationInfo );
+            }
+        }
+    else if( !( error == KErrNotFound || error == KErrNotSupported ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    
+    CleanupStack::Pop(4); // locationInfo1,locationInfoArray1,locationInfo,locationInfoArray
+    locationInfoArray.ResetAndDestroy();
+    locationInfoArray1.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 3 ); // locInfoConverter,locInfoConverter1,locMonitorSession
+    return KErrNone;
+    }   
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo10L
+// This test case tests following unsuccessful conversion scenarios:
+// 1. Conversion preference not supported by plugin.
+// 2. Conversion request by specifying input area type same as requested type. 
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_ConvertLocationInfo10L(CStifItemParser& /*aItem*/ )
+    {
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+       {
+       return error;
+       }
+    CleanupClosePushL( locMonitorSession );
+    
+    // Here we need two subsessions
+    RLbsLocInfoConverter locInfoConverter;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+    TUid conversionModuleId = TUid::Uid( KDummyPluginId );
+    /**
+     * Case 1: Users tries to request conversion by specifying conversion
+     *         preference not supported by plugin. Example plugin doesnt 
+     *         support conversion using cache.
+     */
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaWcmdaCellInfoClass );
+    
+    locInfoConverter.ConvertLocationInfoL(  
+                  *locationInfo,ELbsConversionCacheOnly,
+                  ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Check the converted values in both the conversions.
+    error = iConversionHandler->iStatus.Int();
+    if( error != KErrNotSupported )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    /**
+     * Case 2: Users tries to request for coordinate info by specifying
+     *         only coordinate info.
+     */
+    locationInfo->ResetAreaInfo();
+    AppendAreaInfoObjectToLocationInfoL( locationInfo,ELbsAreaPositionInfoClass );
+    locInfoConverter.ConvertLocationInfoL(  
+                  *locationInfo,ELbsConversionNotDefined,
+                  ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Check the converted values in both the conversions.
+    error = iConversionHandler->iStatus.Int();
+    if( error != KErrNotSupported )
+        {
+        User::Leave( KErrArgument );    
+        }
+    
+    /**
+     * Case 3: Users tries to request for gsm cell info by specifying
+     *         only gsm cell info.
+     */
+    locationInfo->ResetAreaInfo();
+    AppendAreaInfoObjectToLocationInfoL( locationInfo,ELbsAreaGsmCellInfoClass );
+    locInfoConverter.ConvertLocationInfoL(  
+                  *locationInfo,ELbsConversionNotDefined,
+                  ELbsConversionOutputGsm,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Check the converted values in both the conversions.
+    error = iConversionHandler->iStatus.Int();
+    if( error != KErrNotSupported )
+        {
+        User::Leave( KErrArgument );    
+        }
+    
+    /**
+     * Case 4: Users tries to request for wcdma cell info by specifying
+     *         only wcdma cell info.
+     */
+    locationInfo->ResetAreaInfo();
+    AppendAreaInfoObjectToLocationInfoL( locationInfo,ELbsAreaWcmdaCellInfoClass );
+    locInfoConverter.ConvertLocationInfoL(  
+                  *locationInfo,ELbsConversionNotDefined,
+                  ELbsConversionOutputWcdma,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Check the converted values in both the conversions.
+    error = iConversionHandler->iStatus.Int();
+    if( error != KErrNotSupported )
+        {
+        User::Leave( KErrArgument );    
+        }
+    
+    /**
+     * Case 5: Users tries to request for wlan info by specifying
+     *         only wlan info.
+     */
+    locationInfo->ResetAreaInfo();
+    AppendAreaInfoObjectToLocationInfoL( locationInfo,ELbsAreaWlanInfoClass );
+    locInfoConverter.ConvertLocationInfoL(  
+                  *locationInfo,ELbsConversionNotDefined,
+                  ELbsConversionOutputWlan,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Check the converted values in both the conversions.
+    error = iConversionHandler->iStatus.Int();
+    if( error != KErrNotSupported )
+        {
+        User::Leave( KErrArgument );    
+        }
+    
+    CleanupStack::PopAndDestroy( 3 ); // locationInfo,locInfoConverter,locMonitorSession
+    return KErrNone;
+    }   
+
+
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_Cancel1L
+// This test case tests the scenario when user tries to cancel the request before 
+// and after the conversion request complete for both single and batch conversion.
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_Cancel1L(CStifItemParser& /*aItem*/ )
+    {
+
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+        {
+        return error;
+        }
+    CleanupClosePushL( locMonitorSession );
+    RLbsLocInfoConverter locInfoConverter;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray;
+    CleanupClosePushL( locationInfoArray );
+
+    TUid conversionModuleId = TUid::Uid( KDummyPluginId );
+    
+    // This can  can be done for any area type here EGsm to ECoordinate conversion has 
+    // been used.
+    
+    /**
+     * Case 1: Here single location information conversion is requested 
+     *         and cancel is called before the conversion completes.
+     */
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaGsmCellInfoClass );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+                  *locationInfo,ELbsConversionNotDefined,ELbsConversionOutputPosition
+                  ,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    locInfoConverter.CancelConvertLocationInfo();
+    iConversionHandler->Cancel();
+    
+    error = iConversionHandler->iStatus.Int();
+    // Request should be completed with the error code KErrCancel and 
+    // location info should not have converted information.
+    if( error == KErrCancel )
+        {
+        CheckPositionConvertedInfoL( locationInfo,ENegative );
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    /**
+     *  case 2: Here single location information conversion is requested
+     *          and cancel is called after the conversion completes.
+     */
+    locInfoConverter.ConvertLocationInfoL( 
+                  *locationInfo,ELbsConversionNotDefined,ELbsConversionOutputPosition
+                  ,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    CActiveScheduler::Start();
+    locInfoConverter.CancelConvertLocationInfo();
+    iConversionHandler->Cancel();
+    
+    error = iConversionHandler->iStatus.Int();
+    // Request should be completed with the error code KErrNone and 
+    // location info should have converted information.
+    if( error == KErrNone )
+        {
+        CheckPositionConvertedInfoL( locationInfo );
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    // case 3: Here mutiple location information conversion is 
+    // requested and cancel is called before the conversion completes.
+
+    CLbsLocationInfo* locationInfo1 = CreateLocationInfoObjectLC( ELbsAreaGsmCellInfoClass );
+
+    // We had requested for coordinate info, hence we need to clear it before
+    // we use it as input for next conversion.
+    locationInfo->ResetAreaInfo( CLbsLocationInfo::ELbsPosInfo );
+    locationInfoArray.Append( locationInfo );
+    
+    locationInfoArray.Append( locationInfo1 );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+            locationInfoArray,ELbsConversionNotDefined,
+            ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    locInfoConverter.CancelConvertLocationInfo();
+    iConversionHandler->Cancel();
+    
+    // Request should be completed with the error code KErrCancel and 
+    // location info should not have converted information.
+    error = iConversionHandler->iStatus.Int();
+    
+    if( error == KErrCancel )
+        {
+        for( TInt i=0;i<locationInfoArray.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckPositionConvertedInfoL( locationInfo,ENegative );
+            }
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    
+    /**
+     *  case 4: Here mutiple location information conversion is 
+     * requested and cancel is called after the conversion completes.
+     */
+    
+    locInfoConverter.ConvertLocationInfoL( 
+            locationInfoArray,ELbsConversionNotDefined,
+            ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    CActiveScheduler::Start();
+    locInfoConverter.CancelConvertLocationInfo();
+    iConversionHandler->Cancel();
+    
+    // Request should be completed with the error code KErrNone and 
+    // location info should have converted information.
+    error = iConversionHandler->iStatus.Int();
+    
+    if( error == KErrNone )
+        {
+        for( TInt i=0;i<locationInfoArray.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckPositionConvertedInfoL( locationInfo );
+            }
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+
+    CleanupStack::Pop( 3 ); // locationInfo,locationInfo1,locationInfoArray
+    locationInfoArray.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 2 );  // locInfoConverter,locMonitorSession
+    return KErrNone;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_Cancel2L
+// This test case tests the scenario when user tries to cancel the conversion request
+// from the different subsession for both single and multiple conversion.
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_Cancel2L(CStifItemParser& /*aItem*/ )
+    {
+
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+        {
+        return error;
+        }
+    CleanupClosePushL( locMonitorSession );
+    
+    // Here we need to subsessions.
+    RLbsLocInfoConverter locInfoConverter,locInfoConverter1;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+   
+    CleanupClosePushL( locInfoConverter1 );
+    locInfoConverter1.OpenL( locMonitorSession );
+    
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray;
+    CleanupClosePushL( locationInfoArray );
+
+    TUid conversionModuleId = TUid::Uid( KDummyPluginId );
+    
+    // This can  can be done for any area type here EGsm to ECoordinate conversion has 
+    // been used.
+    
+    /** 
+     * Case 1: Here single location information conversion is 
+     *         requested and cancel is called the different subsession.
+     */
+    
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaGsmCellInfoClass );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+                  *locationInfo,ELbsConversionNotDefined,ELbsConversionOutputPosition
+                  ,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    locInfoConverter1.CancelConvertLocationInfo();
+    CActiveScheduler::Start();
+    
+    error = iConversionHandler->iStatus.Int();
+    // Request should be completed with the error code KErrNone and 
+    // location info should have converted information.
+    if( error == KErrNone )
+        {
+        CheckPositionConvertedInfoL( locationInfo );
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    /**
+     * Case 2: Here mutiple location information conversion is requested 
+     *         and cancel is called from the different subsession.
+     */
+    CLbsLocationInfo* locationInfo1 = CreateLocationInfoObjectLC( ELbsAreaGsmCellInfoClass );
+
+    // We had requested for coordinate info, hence we need to clear it before
+    // we use it as input for next conversion.
+    locationInfo->ResetAreaInfo( CLbsLocationInfo::ELbsPosInfo );
+    locationInfoArray.Append( locationInfo );
+    
+    locationInfoArray.Append( locationInfo1 );
+    
+    locInfoConverter.ConvertLocationInfoL( 
+            locationInfoArray,ELbsConversionNotDefined,
+            ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    locInfoConverter1.CancelConvertLocationInfo();
+    CActiveScheduler::Start();
+    
+    // Request should be completed with the error code KErrNone and 
+    // location info should have converted information.
+    error = iConversionHandler->iStatus.Int();
+    
+    if( error == KErrNone )
+        {
+        for( TInt i=0;i<locationInfoArray.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckPositionConvertedInfoL( locationInfo );
+            }
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    CleanupStack::Pop( 3 ); // locationInfo,locationInfo1,locationInfoArray
+    locationInfoArray.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 3 );  // locInfoConverter,locInfoConverter1,locMonitorSession
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_Cancel3L
+// This test case tests the scenario when user tries to request two conversion
+// using two subsessions simultaneously specifying same plugin and we cancel one request
+// of two requests.
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_Cancel3L(CStifItemParser& /*aItem*/ )
+    {
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+       {
+       return error;
+       }
+    CleanupClosePushL( locMonitorSession );
+    
+    // Here we need to open two subsessions.
+    RLbsLocInfoConverter locInfoConverter,locInfoConverter1;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+    CleanupClosePushL( locInfoConverter1 );
+    locInfoConverter1.OpenL( locMonitorSession );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray;
+    CleanupClosePushL( locationInfoArray );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray1;
+    CleanupClosePushL( locationInfoArray1 );
+    
+    TUid conversionModuleId = TUid::Uid( KDummyPluginId );
+    
+    /**
+     * Case 1: Users tries to request 2 simultaneous single conversion
+     *         using 2 subsession specifying same conversion uid and 
+     *         anyone conversion request is cancelled.
+     */
+    
+    // Here type of area input doesnt matter.
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaGsmCellInfoClass );
+    
+    CLbsLocationInfo* locationInfo1 = CreateLocationInfoObjectLC( ELbsAreaGsmCellInfoClass );
+    
+    locInfoConverter.ConvertLocationInfoL(  
+                  *locationInfo,ELbsConversionNotDefined,
+                  ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    locInfoConverter1.ConvertLocationInfoL( 
+          *locationInfo1,ELbsConversionNotDefined,
+          ELbsConversionOutputPosition,conversionModuleId,iConversionHandler1->iStatus );
+    iConversionHandler1->Start();
+    
+    // Here first request is called.
+    locInfoConverter.CancelConvertLocationInfo();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Here we need to wait till both the request completes.Hence we need to block it once again
+    // till the 2nd request completes.
+    if( iConversionHandler->iStatus.Int() == KRequestPending || 
+        iConversionHandler1->iStatus.Int() == KRequestPending )
+        {
+        CActiveScheduler::Start();
+        }
+    
+    // Check the converted values in both the conversions.
+    error = iConversionHandler->iStatus.Int();
+    if( error == KErrCancel )
+        {
+        CheckPositionConvertedInfoL( locationInfo,ENegative );
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    error = iConversionHandler1->iStatus.Int();
+    if( error == KErrNone )
+        {
+        CheckPositionConvertedInfoL( locationInfo1 );
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    /**
+     * Case 2: Users tries to request 2 simultaneous bulk conversion
+     *         using 2 subsession specifying same conversion uid and 
+     *         any one conversion request is cancelled.
+     */
+    
+    // Before we append the location info object to the info array,
+    // we need to clear the converted info in each object.
+    locationInfo->ResetAreaInfo( CLbsLocationInfo::ELbsPosInfo );
+    locationInfo1->ResetAreaInfo( CLbsLocationInfo::ELbsPosInfo );
+    
+    locationInfoArray.Append( locationInfo );
+    locationInfoArray1.Append( locationInfo1 );
+    
+    locInfoConverter.ConvertLocationInfoL(  
+                  locationInfoArray,ELbsConversionNotDefined,
+                  ELbsConversionOutputPosition,conversionModuleId,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    locInfoConverter1.ConvertLocationInfoL( 
+            locationInfoArray1,ELbsConversionNotDefined,
+          ELbsConversionOutputPosition,conversionModuleId,iConversionHandler1->iStatus );
+    iConversionHandler1->Start();
+    
+    // Here second request is called.
+    locInfoConverter1.CancelConvertLocationInfo();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Here we need to wait till both the request completes.Hence we need to block it once again
+    // till the 2nd request completes.
+    if( iConversionHandler->iStatus.Int() == KRequestPending || 
+        iConversionHandler1->iStatus.Int() == KRequestPending )
+        {
+        CActiveScheduler::Start();
+        }
+    
+    // Check the converted values in both the conversions.
+    // Iterate through the array and check for converted info.
+    error = iConversionHandler->iStatus.Int();
+    if( error == KErrNone )
+        {
+        for( TInt i=0;i<locationInfoArray.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckPositionConvertedInfoL( locationInfo );
+            }
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    error = iConversionHandler1->iStatus.Int();
+    if( error == KErrCancel )
+        {
+        for( TInt i=0;i<locationInfoArray1.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray1[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckPositionConvertedInfoL( locationInfo,ENegative );
+            }
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    CleanupStack::Pop(4); // locationInfo1,locationInfoArray1,locationInfo,locationInfoArray
+    locationInfoArray.ResetAndDestroy();
+    locationInfoArray1.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 3 ); // locInfoConverter,locInfoConverter1,locMonitorSession
+    return KErrNone;
+    }   
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::RLbsLocInfoConverter_Cancel4L
+// This test case tests the scenario when user tries to request two conversion
+// using two subsessions simultaneously specifying different plugin.
+// -----------------------------------------------------------------------------
+//
+TInt CLocInfoConversionUnitTest::RLbsLocInfoConverter_Cancel4L(CStifItemParser& /*aItem*/ )
+    {
+    RLbsLocMonitorSession locMonitorSession;
+    TInt error = locMonitorSession.Connect();
+    if( error != KErrNone )
+       {
+       return error;
+       }
+    CleanupClosePushL( locMonitorSession );
+    
+    // Here we need two subsessions
+    RLbsLocInfoConverter locInfoConverter,locInfoConverter1;
+    CleanupClosePushL( locInfoConverter );
+    locInfoConverter.OpenL( locMonitorSession );
+    
+    CleanupClosePushL( locInfoConverter1 );
+    locInfoConverter1.OpenL( locMonitorSession );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray;
+    CleanupClosePushL( locationInfoArray );
+    
+    RPointerArray<CLbsLocationInfoBase> locationInfoArray1;
+    CleanupClosePushL( locationInfoArray1 );
+    
+    TUid conversionModuleId1 = TUid::Uid( KDummyPluginId );
+    TUid conversionModuleId2 = TUid::Uid( KSuplPluginId );
+    
+    /**
+     * Case 1: Users tries to request 2 simultaneous single conversion
+     *         using 2 subsession specifying different conversion uid
+     *         any one request is cancelled.
+     */
+    
+    CLbsLocationInfo* locationInfo = CreateLocationInfoObjectLC( ELbsAreaWcmdaCellInfoClass );
+    
+    CLbsLocationInfo* locationInfo1 = CreateLocationInfoObjectLC( ELbsAreaWlanInfoClass );
+
+    locInfoConverter.ConvertLocationInfoL(  
+                  *locationInfo,ELbsConversionNotDefined,
+                  ELbsConversionOutputPosition,conversionModuleId1,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    
+    locInfoConverter1.ConvertLocationInfoL( 
+          *locationInfo1,ELbsConversionNotDefined,
+          ELbsConversionOutputPosition,conversionModuleId2,iConversionHandler1->iStatus );
+    iConversionHandler1->Start();
+    
+    // Here first request is cancelled.
+    locInfoConverter.CancelConvertLocationInfo();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+   
+    // Here we need to wait till both the request completes.Hence we need to block it once again
+    // till the 2nd request completes.
+    if( iConversionHandler->iStatus.Int() == KRequestPending || 
+        iConversionHandler1->iStatus.Int() == KRequestPending )
+        {
+        CActiveScheduler::Start();
+        }
+    
+    // Check the converted values in both the conversions.
+    error = iConversionHandler->iStatus.Int();
+    if( error == KErrCancel )
+        {
+        CheckPositionConvertedInfoL( locationInfo,ENegative );
+        }
+    else if( !( error == KErrNotFound || error == KErrNotSupported ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    error = iConversionHandler1->iStatus.Int();
+    if( error == KErrNone )
+        {
+        CheckPositionConvertedInfoL( locationInfo1 );
+        }
+    else if( !( error == KErrNotFound || error == KErrNotSupported ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    /**
+     * Case 2: Users tries to request 2 simultaneous bulk conversion
+     *         using 2 subsession specifying same conversion uid and 
+     *         one conversion request is cancelled.
+     */
+    
+    // Before we append the location info object to the info array,
+    // we need to clear the converted info in each object.
+    locationInfo->ResetAreaInfo( CLbsLocationInfo::ELbsPosInfo );
+    locationInfo1->ResetAreaInfo( CLbsLocationInfo::ELbsPosInfo );
+    
+    locationInfoArray.Append( locationInfo );
+    locationInfoArray1.Append( locationInfo1 );
+    
+    locInfoConverter.ConvertLocationInfoL(  
+                  locationInfoArray,ELbsConversionNotDefined,
+                  ELbsConversionOutputPosition,conversionModuleId1,iConversionHandler->iStatus );
+    iConversionHandler->Start();
+    
+    locInfoConverter1.ConvertLocationInfoL( 
+            locationInfoArray1,ELbsConversionNotDefined,
+          ELbsConversionOutputPosition,conversionModuleId2,iConversionHandler1->iStatus );
+    iConversionHandler1->Start();
+    
+    // Here we cancel 2nd request 
+    locInfoConverter1.CancelConvertLocationInfo();
+    
+    // This is just to block the control till the call back method is called.
+    // Code after this statement will be resumed when Stop on CActiveScheduler
+    // is called in the HandleLocationConversion method.
+    CActiveScheduler::Start();
+    
+    // Here we need to wait till both the request completes.Hence we need to block it once again
+     // till the 2nd request completes.
+     if( iConversionHandler->iStatus.Int() == KRequestPending || 
+         iConversionHandler1->iStatus.Int() == KRequestPending )
+         {
+         CActiveScheduler::Start();
+         }
+     
+    // Check the converted values in both the conversions.
+    // Iterate through the array and check for converted info.
+    error = iConversionHandler->iStatus.Int();
+    if( error == KErrNone )
+        {
+        for( TInt i=0;i<locationInfoArray.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckPositionConvertedInfoL( locationInfo );
+            }
+        }
+    else if( !( error == KErrNotFound || error == KErrNotSupported ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    error = iConversionHandler1->iStatus.Int();
+    if( error == KErrCancel )
+        {
+        for( TInt i=0;i<locationInfoArray1.Count();i++ )
+            {
+            CLbsLocationInfoBase* locationInfobase = locationInfoArray1[i];
+            CLbsLocationInfo* locationInfo = static_cast<CLbsLocationInfo*> ( locationInfobase );
+            CheckPositionConvertedInfoL( locationInfo,ENegative );
+            }
+        }
+    else if( !( error == KErrNotFound || error == KErrNotSupported ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    
+    CleanupStack::Pop(4); // locationInfo1,locationInfoArray1,locationInfo,locationInfoArray
+    locationInfoArray.ResetAndDestroy();
+    locationInfoArray1.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 3 ); // locInfoConverter,locInfoConverter1,locMonitorSession
+    return KErrNone;
+    }   
+
+
+// Helper methods
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::CreatePositionObjectLC
+// -----------------------------------------------------------------------------
+//
+CLbsPositionInfo* CLocInfoConversionUnitTest::CreatePositionInfoObjectLC()
+    {
+    TLocality locality;
+    locality.SetCoordinate( 62.5285,23.9385 );
+    locality.SetAccuracy( 100,0.0 );
+    CLbsPositionInfo* positionInfo = CLbsPositionInfo::NewL( locality );
+    CleanupStack::PushL( positionInfo );
+    return positionInfo;
+    }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::CreateGsmCellInfoObjectLC
+// -----------------------------------------------------------------------------
+//
+CLbsGsmCellInfo* CLocInfoConversionUnitTest::CreateGsmCellInfoObjectLC()
+    {
+    CLbsGsmCellInfo* gsmCellInfo = CLbsGsmCellInfo::NewL( 100,101,102,103);
+    CleanupStack::PushL( gsmCellInfo );
+    return gsmCellInfo;
+    }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::CreateWcdmaCellInfoObjectLC
+// -----------------------------------------------------------------------------
+//
+CLbsWcdmaCellInfo* CLocInfoConversionUnitTest::CreateWcdmaCellInfoObjectLC()
+    {
+    CLbsWcdmaCellInfo* wcdmaCellInfo = CLbsWcdmaCellInfo::NewL( 100,101,102 );
+    CleanupStack::PushL( wcdmaCellInfo );
+    return wcdmaCellInfo;
+    }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::CreateWlanInfoObjectLC
+// -----------------------------------------------------------------------------
+//
+CLbsWlanInfo* CLocInfoConversionUnitTest::CreateWlanInfoObjectLC()
+    {
+    TLbsWlanMacAddress macAddress(_L8("10.0.1"));
+    CLbsWlanInfo* wlanInfo = CLbsWlanInfo::NewL( macAddress,10.1 );
+    CleanupStack::PushL( wlanInfo );
+    return wlanInfo;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::CreateLocationInfoObjectLC
+// -----------------------------------------------------------------------------
+//
+CLbsLocationInfo* CLocInfoConversionUnitTest::CreateLocationInfoObjectLC(                    
+                                                    TLbsAreaInfoClassType aAreaType )
+    {
+    CLbsLocationInfo* locationInfo = CLbsLocationInfo::NewL();
+    CleanupStack::PushL( locationInfo );
+    AppendAreaInfoObjectToLocationInfoL( locationInfo,aAreaType );
+    return locationInfo;
+    }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::AppendAreaInfoObjectToLocationInfoL
+// -----------------------------------------------------------------------------
+//
+void CLocInfoConversionUnitTest::AppendAreaInfoObjectToLocationInfoL(
+                                                    CLbsLocationInfo* aLocationInfo,                    
+                                                    TLbsAreaInfoClassType aAreaType )
+    {
+    switch( aAreaType )
+        {
+        case ELbsAreaPositionInfoClass:
+            CLbsPositionInfo* positionInfo = NULL;
+            positionInfo = CreatePositionInfoObjectLC();
+            aLocationInfo->AddAreaInfoL( positionInfo );
+            CleanupStack::Pop( positionInfo );
+            break;
+        
+        case ELbsAreaGsmCellInfoClass:
+            CLbsGsmCellInfo* gsmCellInfo = NULL;
+            gsmCellInfo = CreateGsmCellInfoObjectLC();
+            aLocationInfo->AddAreaInfoL( gsmCellInfo );
+            CleanupStack::Pop( gsmCellInfo );
+            break;
+            
+        case ELbsAreaWcmdaCellInfoClass:
+            CLbsWcdmaCellInfo* wcdmaCellInfo = NULL;
+            wcdmaCellInfo = CreateWcdmaCellInfoObjectLC();
+            aLocationInfo->AddAreaInfoL( wcdmaCellInfo );
+            CleanupStack::Pop( wcdmaCellInfo );
+            break;
+            
+        case ELbsAreaWlanInfoClass:
+            CLbsWlanInfo* wlanInfo = NULL;
+            wlanInfo = CreateWlanInfoObjectLC();
+            aLocationInfo->AddAreaInfoL( wlanInfo );
+            CleanupStack::Pop( wlanInfo );
+            break;
+        
+        default:
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::CheckPositionConvertedInfoL
+// -----------------------------------------------------------------------------
+//
+void CLocInfoConversionUnitTest::CheckPositionConvertedInfoL( CLbsLocationInfo* 
+                                                              aLocationInfo,
+                                                              TTestType 
+                                                              aTestType )
+    {
+    RLbsAreaInfoBaseArray areaInfoArray;
+    aLocationInfo->GetAreaInfo( areaInfoArray,CLbsLocationInfo::ELbsPosInfo );
+    TInt count = areaInfoArray.Count();
+    areaInfoArray.Reset();
+    if( aTestType == EPositive )
+        {
+        if( !count )
+            {
+            User::Leave( KErrArgument );
+            }
+        }
+    else 
+        {
+        if( count )
+            {
+            User::Leave( KErrArgument );
+            }
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::CheckGsmCellConvertedInfoL
+// -----------------------------------------------------------------------------
+//
+void CLocInfoConversionUnitTest::CheckGsmCellConvertedInfoL( CLbsLocationInfo* 
+                                                             aLocationInfo,
+                                                             TTestType 
+                                                             aTestType )
+    {
+    RLbsAreaInfoBaseArray areaInfoArray;
+    aLocationInfo->GetAreaInfo( areaInfoArray,CLbsLocationInfo::ELbsGsmInfo );
+    TInt count = areaInfoArray.Count();
+    areaInfoArray.Reset();
+    if( aTestType == EPositive )
+        {
+        if( !count )
+            {
+            User::Leave( KErrArgument );
+            }
+        }
+    else 
+        {
+        if( count )
+            {
+            User::Leave( KErrArgument );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::CheckWcdmaCellConvertedInfoL
+// -----------------------------------------------------------------------------
+//
+void CLocInfoConversionUnitTest::CheckWcdmaCellConvertedInfoL( CLbsLocationInfo* 
+                                                               aLocationInfo,
+                                                               TTestType 
+                                                               aTestType )
+    {
+    RLbsAreaInfoBaseArray areaInfoArray;
+    aLocationInfo->GetAreaInfo( areaInfoArray,CLbsLocationInfo::ELbsWcdmaInfo );
+    TInt count = areaInfoArray.Count();
+    areaInfoArray.Reset();
+    if( aTestType == EPositive )
+        {
+        if( !count )
+            {
+            User::Leave( KErrArgument );
+            }
+        }
+    else 
+        {
+        if( count )
+            {
+            User::Leave( KErrArgument );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CLocInfoConversionUnitTest::CheckWlanConvertedInfoL
+// -----------------------------------------------------------------------------
+//
+void CLocInfoConversionUnitTest::CheckWlanConvertedInfoL( CLbsLocationInfo* 
+                                                          aLocationInfo,
+                                                          TTestType 
+                                                          aTestType )
+    {
+    RLbsAreaInfoBaseArray areaInfoArray;
+    aLocationInfo->GetAreaInfo( areaInfoArray,CLbsLocationInfo::ELbsWlanInfo );
+    TInt count = areaInfoArray.Count();
+    areaInfoArray.ResetAndDestroy();
+    if( aTestType == EPositive )
+        {
+        if( !count )
+            {
+            User::Leave( KErrArgument );
+            }
+        }
+    else 
+        {
+        if( count )
+            {
+            User::Leave( KErrArgument );
+            }
+        }
+    }
+//  [End of File]