locationmgmt/locmonitor/test/LocInfoConversionUnitTest/src/LocInfoConversionUnitTestBlocks.cpp
Updated version of the Location Monitor supporting the new New GeoConversion interfaces.
Also includes API help information
/*
* 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]