locsrv_pub/landmarks_api/tsrc/src/testcposlandmarkparser.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 31 Mar 2010 22:18:21 +0300
branchRCL_3
changeset 8 6fcbaa43369c
parent 0 667063e416a2
permissions -rw-r--r--
Revision: 201011 Kit: 201013

/*
* Copyright (c) 2007 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:  Provides testing of CPosLandmarkParser class methods
*
*/



// INCLUDE FILES
#include <EPos_CPosLandmark.h>
#include <EPos_CPosLandmarkDatabase.h>
#include <EPos_CPosLmCategoryManager.h>
#include <EPos_CPosLandmarkCategory.h>
#include <EPos_CPosLandmarkParser.h>
#include <LbsPosition.h>
#include "testcposlandmarkparser.h"
#include <StifParser.h>
#include <Stiftestinterface.h>

// Literals
_LIT8( KPosMimeTypeLandmarkCollectionXml, "application/vnd.nokia.landmarkcollection+xml" );

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::CTestPosLandmarkParser
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CTestPosLandmarkParser::CTestPosLandmarkParser( CStifLogger* aLog )
	{
	iLog = aLog;
	}

// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::NewL
// 
// 
// -----------------------------------------------------------------------------
//	
CTestPosLandmarkParser* CTestPosLandmarkParser::NewL(CStifLogger* aLog)
	{
	CTestPosLandmarkParser* self = new (ELeave) CTestPosLandmarkParser( aLog );
	CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop(); 
    return self; 
	}

// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::ConstructL
// 
// 
// -----------------------------------------------------------------------------
//
void CTestPosLandmarkParser::ConstructL()
	{
	
	}	

// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::~CTestPosLandmarkParser
// 
// 
// -----------------------------------------------------------------------------
//
CTestPosLandmarkParser::~CTestPosLandmarkParser()
	{
	
	}

// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::CreateParser
// 
// 
// -----------------------------------------------------------------------------
//
TInt CTestPosLandmarkParser::CreateParserL( CStifItemParser& /*aItem*/ )
	{
	CPosLandmarkParser* parser = CPosLandmarkParser::NewL( KPosMimeTypeLandmarkCollectionXml );
	delete parser;
	ReleaseLandmarkResources();
	return KErrNone;
	}
	
// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::SetInputBuffer
// 
// 
// -----------------------------------------------------------------------------
//
TInt CTestPosLandmarkParser::SetInputBufferL( CStifItemParser& /*aItem*/ )
	{
	CPosLandmarkParser* parser = CPosLandmarkParser::NewL( KPosMimeTypeLandmarkCollectionXml );
	CleanupStack::PushL( parser );
	// Set buffer
	TBufC8<1024> inputBuffer;
	parser->SetInputBuffer( inputBuffer );
	iLog->Log(_L("SetInputBuffer successful"));
	CleanupStack::PopAndDestroy( parser );
	ReleaseLandmarkResources();
	return KErrNone;
	}
	
// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::SetInputFile
// 
// 
// -----------------------------------------------------------------------------
//
TInt CTestPosLandmarkParser::SetInputFileL( CStifItemParser& aItem )
	{
	TPtrC inputFilePtr;
	TInt err = aItem.GetNextString( inputFilePtr );
	
	CPosLandmarkParser* parser = CPosLandmarkParser::NewL( KPosMimeTypeLandmarkCollectionXml );
	CleanupStack::PushL( parser );
	// Set input file
	parser->SetInputFileL( inputFilePtr );
	CleanupStack::PopAndDestroy( parser );
	ReleaseLandmarkResources();
	return KErrNone;
	}
	
// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::SetInputFileHandle
// 
// 
// -----------------------------------------------------------------------------
//
TInt CTestPosLandmarkParser::SetInputFileHandleL( CStifItemParser& aItem )
	{
	TPtrC inputFilePtr;
	TInt err = aItem.GetNextString( inputFilePtr );
		
	CPosLandmarkParser* parser = CPosLandmarkParser::NewL( KPosMimeTypeLandmarkCollectionXml );
	CleanupStack::PushL( parser );
	// File server session
	RFs rfs;
	TInt error = KErrNone;
	error = rfs.Connect();
	if( KErrNone != error )
		{
		iLog->Log(_L("SetInputFileHandle failed"));
		User::Leave( KErrGeneral );
		}
	// Open file
	RFile file;
	error = file.Open( rfs, inputFilePtr, EFileRead );
	if( KErrNone != error )
		{
		iLog->Log(_L("SetInputFileHandle failed"));
		rfs.Close();
		User::Leave( KErrNotFound );
		}
	// Set input file handle
	parser->SetInputFileHandleL( file );
	iLog->Log(_L("SetInputFileHandle successful"));
	CleanupStack::PopAndDestroy( parser );
	ReleaseLandmarkResources();
	file.Close();
	rfs.Close();
	return KErrNone;
	}			

// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::ParseContent
// 
// 
// -----------------------------------------------------------------------------
//
TInt CTestPosLandmarkParser::ParseContentL( CStifItemParser& aItem )
	{
	TPtrC inputFilePtr;
	TInt err = aItem.GetNextString( inputFilePtr );
		
	CPosLandmarkParser* parser = CPosLandmarkParser::NewL( KPosMimeTypeLandmarkCollectionXml );
	CleanupStack::PushL( parser );
	// Set input file
	parser->SetInputFileL( inputFilePtr );
	// Parse Content
	CPosLmOperation* operation = parser->ParseContentL( EFalse );
	CleanupStack::PushL( operation );
	// Execute operation
	operation->ExecuteL();
	iLog->Log(_L("ParseContent successful"));
	CleanupStack::PopAndDestroy( 2, parser );
	ReleaseLandmarkResources();
	return KErrNone;
	}
	
// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::NumOfParsedContent
// 
// 
// -----------------------------------------------------------------------------
//
TInt CTestPosLandmarkParser::NumOfParsedContentL( CStifItemParser& aItem )
	{
	TPtrC inputFilePtr;
	TInt err = aItem.GetNextString( inputFilePtr );
	
	CPosLandmarkParser* parser = CPosLandmarkParser::NewL( KPosMimeTypeLandmarkCollectionXml );
	CleanupStack::PushL( parser );
	// Set input file
	parser->SetInputFileL( inputFilePtr );
	// Parse Content
	CPosLmOperation* operation = parser->ParseContentL( EFalse );
	CleanupStack::PushL( operation );
	// Execute operation
	operation->ExecuteL();
	// Check and print number
	TUint32 numOfParsedLmk = parser->NumOfParsedLandmarks();
	iLog->Log(_L("NumOfParsedContent successful"));
	CleanupStack::PopAndDestroy( 2, parser );
	ReleaseLandmarkResources();
	return KErrNone;
	}	
	
// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::FirstAndNextCollDataId
// 
// 
// -----------------------------------------------------------------------------
//
TInt CTestPosLandmarkParser::FirstAndNextCollDataIdL( CStifItemParser& aItem )
	{
	TPtrC inputFilePtr;
	TInt err = aItem.GetNextString( inputFilePtr );
	
	CPosLandmarkParser* parser = CPosLandmarkParser::NewL( KPosMimeTypeLandmarkCollectionXml );
	CleanupStack::PushL( parser );
	// Set input file
	parser->SetInputFileL( inputFilePtr );
	// Parse Content
	CPosLmOperation* operation = parser->ParseContentL( EFalse );
	CleanupStack::PushL( operation );
	// Execute operation
	operation->ExecuteL();
	// Get first collection data id
	TPosLmCollectionDataId currentId = parser->FirstCollectionDataId();
	// Check
	if( EPosLmCollDataNone == currentId )
		{
		// No coll data found
		iLog->Log(_L("FirstAndNextCollDataId fails, no collection data exists in the input file"));
		User::Leave( KErrNotFound );
		}
	// Get next ids
	TPosLmCollectionDataId nextId;
	while( ( nextId = parser->NextCollectionDataId( currentId ) )!= EPosLmCollDataNone )
		{
		currentId = nextId;
		}
	iLog->Log(_L("FirstAndNextCollDataId successful"));
	CleanupStack::PopAndDestroy( 2, parser );
	ReleaseLandmarkResources();
	return KErrNone;
	}
	
// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::GetCollectionData
// 
// 
// -----------------------------------------------------------------------------
//
TInt CTestPosLandmarkParser::GetCollectionDataL( CStifItemParser& aItem )
	{
	TPtrC inputFilePtr;
	TInt err = aItem.GetNextString( inputFilePtr );
	
	CPosLandmarkParser* parser = CPosLandmarkParser::NewL( KPosMimeTypeLandmarkCollectionXml );
	CleanupStack::PushL( parser );
	// Set input file
	parser->SetInputFileL( inputFilePtr );
	// Parse Content
	CPosLmOperation* operation = parser->ParseContentL( EFalse );
	CleanupStack::PushL( operation );
	// Execute operation
	operation->ExecuteL();
	// Get first collection data id
	TPosLmCollectionDataId currentId = parser->FirstCollectionDataId();
	// Check
	if( EPosLmCollDataNone == currentId )
		{
		// No coll data found
		iLog->Log(_L("FirstAndNextCollDataId fails, no collection data exists in the input file"));
		User::Leave( KErrNotFound );
		}
	// Get collection data and print
	TPtrC ptr = parser->CollectionData( currentId );
	iLog->Log( ptr );
	iLog->Log(_L("GetCollectionData successful"));
	CleanupStack::PopAndDestroy( 2, parser );
	ReleaseLandmarkResources();
	return KErrNone;
	}
	
// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::RetrieveParsedLmk
// 
// 
// -----------------------------------------------------------------------------
//
TInt CTestPosLandmarkParser::RetrieveParsedLmkL( CStifItemParser& aItem )
	{
	TPtrC inputFilePtr;
	TInt err = aItem.GetNextString( inputFilePtr );
	
	CPosLandmarkParser* parser = CPosLandmarkParser::NewL( KPosMimeTypeLandmarkCollectionXml );
	CleanupStack::PushL( parser );
	// Set input file
	parser->SetInputFileL( inputFilePtr );
	// Parse Content
	CPosLmOperation* operation = parser->ParseContentL( EFalse );
	CleanupStack::PushL( operation );
	// Execute operation
	operation->ExecuteL();
	// Retrieve the last parsed landmark
	CPosLandmark* landmark = parser->LandmarkLC(); // Last parsed, indexing is not supported
	TPtrC lmkName;
	landmark->GetLandmarkName( lmkName );
	iLog->Log( lmkName );
	iLog->Log(_L("RetrieveParsedLmk successful"));
	CleanupStack::PopAndDestroy( 3, parser );
	ReleaseLandmarkResources();
	return KErrNone;
	}
	
// -----------------------------------------------------------------------------
// CTestPosLandmarkParser::RetrieveCategory
// 
// 
// -----------------------------------------------------------------------------
//
TInt CTestPosLandmarkParser::RetrieveCategoryL( CStifItemParser& aItem )
	{
	TPtrC inputFilePtr;
	TInt err = aItem.GetNextString( inputFilePtr );
	CPosLandmarkParser* parser = CPosLandmarkParser::NewL( KPosMimeTypeLandmarkCollectionXml );
	CleanupStack::PushL( parser );
	// Set input file
	parser->SetInputFileL( inputFilePtr );
	// Parse Content
	CPosLmOperation* operation = parser->ParseContentL( EFalse );
	CleanupStack::PushL( operation );
	// Execute operation
	operation->ExecuteL();
	// Retrieve the last parsed landmark
	CPosLandmark* landmark = parser->LandmarkLC(); // Last parsed
	// Retrieve Category
	TPosLmItemId id = 1; // Get first category for landmark
	CPosLandmarkCategory* category = parser->LandmarkCategoryLC( id );
	iLog->Log(_L("RetrieveCategory successful"));
	CleanupStack::PopAndDestroy( 4, parser );
	ReleaseLandmarkResources();
	return KErrNone;
	}